my_list = [ [1,2,3,4,5,6], [1,3,4],[34,56,56,56]]
for item in my_list:
var1,var2,var3,var4,var5,var6 = None
if len(item) ==1:
var1 = item[0]
if len(item) == 2:
var1 = item[0]
var2 = item[1]
if len(item) == 3:
var1 = item[0]
var2 = item[1]
var3 = item[2]
if len(item) == 4:
var1 = item[0]
var2 = item[1]
var3 = item[2]
var4 = item[3]
fun(var1,var2,var3,var4,var5,var6)
我有一个功能
def fun(var1, var2 = None, var3 = None, var4 = None, var5=None, var6= None)
取决于我内部列表中的值。我正在传递它的功能。 我希望我说清楚。
由于
答案 0 :(得分:2)
请参阅Calls中的Function definitions和Python documentation,具体为:
如果语法*表达式出现在 函数调用,表达式必须 评估一个序列。来自的元素 这个序列被视为好像它们一样 是额外的位置 参数....
如果语法**表达式出现在函数调用中,则表达式必须求值为映射,其内容被视为附加关键字参数....
...函数调用总是指定值 对于所提到的所有参数 参数列表,来自位置 参数,来自关键字参数,或 来自默认值。如果表格 “*标识符”存在,它是 初始化为接收任何元组的元组 超额位置参数, 默认为空元组。如果 形式“**标识符”存在,它是 初始化为新词典 收到任何多余的关键字 参数,默认为新的空 字典。
您最有可能需要以下内容,因为您的参数是简单的整数:
my_list = [[1,2,3,4,5,6],[1,3,4],[34,56,56,56]]
def func(*var):
for arg in var:
print arg,
print
for args in my_list:
func(*args)
1 2 3 4 5 6
1 3 4
34 56 56 56
下一个示例显示您可以使用默认值填写函数的任意数量的参数:
my_list = [[1,2,3,4,5,6],[1,3,4],[34,56,56,56]]
def func(var1=None,var2=None,var3=None,var4=None,var5=None,var6=None):
print var1,var2,var3,var4,var5,var6
for args in my_list:
func(*args)
1 2 3 4 5 6
1 3 4 None None None
34 56 56 56 None None
您甚至可以使用**
语法无序填写它们:
my_list = [dict(var1=1,var5=5,var6=6),dict(var2=2,var4=4)]
def func(var1=None,var2=None,var3=None,var4=None,var5=None,var6=None):
print var1,var2,var3,var4,var5,var6
for args in my_list:
func(**args)
1 None None None 5 6
None 2 None 4 None None
答案 1 :(得分:1)
编辑 - 真正的问题是 - 我的函数采用def fun(var1,var2 = None,var3 = None,var4 = None,var5 = None,var6 = None):所以如果我的内部列表只包含1个元素然后函数只接受var1。但如果我的内部列表中有超过1个元素,则传递给函数
您想要使用的是*运算符
fun(*l)
相当于
fun(l[0],l[1],....)
所以你想使用:fun(*my_list[0])
作为第一个,依此类推
要将它用于my_list中的所有列表,请执行以下操作:
for i in my_list:
fun(*i)