0

2 つの関数があるとします。

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

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

getFileList() 関数を呼び出しても、ftp 変数がわからないため機能しません。

ftpConnect() 関数内で ftp 変数をグローバルとして宣言すると機能することはわかっていますが、より良い/よりエレガントな方法があるかどうか疑問に思っていました。

4

3 に答える 3

4

関数は値を返すことができます。戻り値がかっこいい!

ftpから戻る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())

また、オブジェクト指向プログラミングのテクニックも調べてみてください。すべての FTP 関連操作を処理するクラスを定義し、FTP サーバー接続をインスタンスの属性として保存します。

于 2013-07-10T14:41:30.040 に答える
2

ftpから戻りftpConnect()、戻り値を という名前の変数に代入します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())
于 2013-07-10T14:41:57.600 に答える
1

私の意見では、最も洗練された解決策はftp、プライベート属性として -variable を持つ FTP クラスを作成することです。

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()
于 2013-07-10T14:42:36.947 に答える