0

let's say we have two functions:

def ftpConnect(): 
    ftp = FTP('server')
    ftp.login()
    ftp.cwd('/path')

def getFileList():
    ftpConnect()
    files = ftp.nlst()
    print(files)

If I call the getFileList() function it won't work because it doesn't know the ftp var.

I know that if I declare the ftp variable inside ftpConnect() function as global it will work, but I was wondering if there is a better / more elegant way of doing it.

3 Answers 3

4

Functions can return values. Return values are cool!

Return ftp from ftpConnect():

def ftpConnect(): 
    ftp = FTP('server')
    ftp.login()
    ftp.cwd('/path')
    # return the value of `ftp` to the caller
    return ftp

def getFileList():
    # assign the return value of `ftpConnect` to a new local variable
    ftp = ftpConnect()
    files = ftp.nlst()
    print(ftp.nlst())

You may also want to look in to object-oriented programming techniques; define a class that handles all your FTP-related operations, and store the FTP server connection as an attribute of the instance.

Sign up to request clarification or add additional context in comments.

1 Comment

I misread the code at first, then edited it; if we ended up with the same code then that's because we are both awesome.
2

Return ftp from ftpConnect() and assign the return value to a variable named ftp:

def ftpConnect(): 
    ftp = FTP('server')
    ftp.login()
    ftp.cwd('/path')
    return ftp         #return ftp from here

def getFileList():
    ftp = ftpConnect() # assign the returned value from the
                       # function call to a variable
    files = ftp.nlst()
    print(ftp.nlst())

Comments

1

In my opinion, the most elegant solution would be to make a FTP-class, which would have the ftp-variable as a private attribute.

class FTPConnection(object):
    def __init__(self, server):
        self._ftp = FTP(server)

    def connect(self): 
       self._ftp.login()
       self._ftp.cwd('/path')


    def getFileList():
        files = self._ftp.nlst()
        print(files)

ftp = FTPConnection('server')
ftp.connect()
ftp.getFileList()

1 Comment

Seems like a good idea, but the name of the class is misleading.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.