我有这样的功能。对于* args,我想使用不同Excel表的列表。
def my_function(*args):
for x in args:
# some code
我用它来获取表的完整路径并列出它们。我想要使用的文件夹中只有表格。
cust_tables = os.listdir(r"my_folder")
cust_path = [r"my_folder" + "\\" + x for x in cust_tables]
这会创建一个这样的列表:
['C:\\some\\path\\to\\my\\table_1.xlsx', 'C:\\some\\path\\to\\my\\table_2.xlsx']
当我尝试调用函数my_function(cust_path)
时,我收到此错误:
File "C:\Users\my.name\AppData\Local\Continuum\anaconda3\lib\genericpath.py", line 30, in isfile
st = os.stat(path)
TypeError: stat: path should be string, bytes, os.PathLike or integer, not list
我可以在使用my_function(cust_path[0],cust_path[1])
时调用该函数。
我在哪里弄错了?
答案 0 :(得分:3)
您可以使用splat运算符执行此操作:
some_func(*params)
这会使函数将每个列表项作为单独的参数接收。这里有一个描述:http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists
答案 1 :(得分:3)
作为参数传递时,您需要解包列表元素。您可以使用splat(*
)运算符:
my_function(*cust_path)
否则,当你执行my_function(cust_path)
时,它会将整个列表作为参数传递;因此,args
将是包含列表的单元素元组,即args
将为([<cust_path_elements ...>],)
。