0

假设我们有两个功能:

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

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

如果我调用 getFileList() 函数,它将不起作用,因为它不知道 ftp var。

我知道如果我将 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 类,它将ftp-variable 作为私有属性。

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 回答