我可以在python中分配这样的序列:
a,b,c="ABC"
但我无法将此序列作为参数传递给函数。即
def function2(a,b,c):
print a
print b
print c
function2("ABC")
上述声明引发了错误。
任何人都可以告诉我在python中传递赋值和参数之间的区别吗?
答案 0 :(得分:9)
编译器在LHS上看到一个以逗号分隔的列表,并发出字节码以便为您迭代RHS。通过函数调用,它会看到一个值,因此将其作为单个参数发送。您需要告诉它明确地拆分序列:
>>> function2(*"ABC")
A
B
C
答案 1 :(得分:0)
您创建的功能需要3个参数a,b和c。但是当你调用函数时,你只提供一个参数。
要正确调用您的函数,您需要执行类似
的操作function2("A","B","C")
它会打印出来 一个 乙 ç
答案 2 :(得分:0)
函数可以有可选参数,指定为带有默认参数值的参数。考虑函数
def function2(a, b=None, c=None):
print a
print b
print c
以下哪项应该function2("ABC")
输出?
ABC
None
None
或
A
B
C
Python选择第一个选择,而不是检查某些参数是否具有默认值,其中可迭代值被视为参数传递的单个值,以及特殊语法
function2(*"ABC")
提供了第二个。
答案 3 :(得分:0)
由于还没有人提到这一点,(a, b) = (1, 2)
指定了一个=" A",b =" B"和c =" C"作为一个字符串也可以作为各种迭代器,也就是说,你可以循环它,检查它中的字符就像检查列表的元素等等。
它类似于代码
(a, b, c) = ("A", "B", "C")
Python将其解释为
function2(a, b, c)
并且编译器检测到2个变量,因此进行2次分配。当你将3传递给长度为3的字符串时,它的工作方式相同:
a = "ABC"
然而,正如其他人所说,在函数参数传递中,b
必须有3个参数," ABC"只有一个对象:一个字符串,因此分配c
,然后在a, b, c = ("A", "B", "C")
和*
上引发错误。要获得与function2(*"ABC") # is the same as function2("A", "B", "C")
相同的行为,请使用*
解析它,即
{{1}}
{{1}}解析器适用于任何可迭代:列表,(字符串),字典(键)等