python中的函数变量范围

时间:2013-07-10 14:40:27

标签: python function variables scope

假设我们有两个功能:

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

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

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

我知道如果我将ftpConnect()函数中的ftp变量声明为全局它将起作用,但我想知道是否有更好/更优雅的方法。

3 个答案:

答案 0 :(得分: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服务器连接存储为实例的属性。

答案 1 :(得分: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())

答案 2 :(得分:1)

在我看来,最优雅的解决方案是创建一个FTP类,它将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()