我无法正确引用最近添加的fpath()函数。代码以命令行的形式从文件,通配符或文件夹的形式获取参数,以便在最后一个代码块中使用。
#! /usr/bin/env python
import os, sys, glob
from optparse import OptionParser
#logic to determine if argument is a file, folder or wildcard
def fpath(arguments):
files = []
for arg in arguments:
if '*' in arg or '?' in arg:
# contains a wildcard character
all_files.extend(glob.glob(arg))
elif os.path.isdir(arg):
# is a dictionary
all_files.extend(glob.glob(os.path.join(arg, '*')))
elif os.path.exists(arg):
# is a file
all_files.append(arg)
else:
# invalid?
print '%s invalid' % arg
return files
def main():
# List files in directory and upload them
all_files = ''
all_files = fpath(filename)
for filename in all_files:
#skip all directory entries which are not a file
if not os.path.isfile(filename):
continue
k.set_contents_from_filename(filename, cb=percent_cb, num_cb=10)
if __name__ == '__main__':
main()
答案 0 :(得分:2)
以下代码模式存在一些问题:
all_files = ''
def fpath(arguments):
all_files = []
# modify all_files
return all_files
您希望将all_files
的内容传回给来电者。有两种常规方法可以做到这一点,使用全局变量和返回值:
要使用全局变量,您需要告诉Python您将使用global
语句从函数内修改全局变量:
all_files = ''
def fpath(arguments):
global all_files
all_files = []
# modify all_files
在这种情况下,您也不需要return
,因为全局变量中的调用者可以使用结果。
更好的方法可能是让函数返回all_files
:
def fpath(arguments):
files = []
# modify files
return files
all_files = fpath(filename)
这消除了全局变量的使用,这通常被认为是不良实践,容易出错和混淆。我还将fpath
函数中的数组名称更改为files
,以澄清files
和all_files
确实是不同的变量。 可以具有相同的名称,但它们仍然是两个不同的变量。