假设我们有两个功能:
def ftpConnect():
ftp = FTP('server')
ftp.login()
ftp.cwd('/path')
def getFileList():
ftpConnect()
files = ftp.nlst()
print(files)
如果我调用getFileList()函数,它将无法工作,因为它不知道ftp var。
我知道如果我将ftpConnect()函数中的ftp变量声明为全局它将起作用,但我想知道是否有更好/更优雅的方法。
答案 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()