不能在Python中使用list作为函数参数

时间:2018-02-26 08:35:34

标签: python list function parameters

我有这样的功能。对于* 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])时调用该函数。

我在哪里弄错了?

2 个答案:

答案 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 ...>],)