Python 赋值和参数传递之间有什么不同?
我可以在python中指定这样的序列:Python 赋值和参数传递之间有什么不同?,python,variable-assignment,Python,Variable Assignment,我可以在python中指定这样的序列: a,b,c="ABC" 但我无法将此序列作为参数传递给函数。i、 e def function2(a,b,c): print a print b print c function2("ABC") 上面的语句引发了一个错误 有谁能告诉我python中赋值和参数传递之间的区别吗?编译器在LHS上看到一个逗号分隔的列表,并为您发出字节码在RHS上迭代。通过函数调用,它看到一个值,因此将其作为一个参数发送。您需要告诉它显式拆分序列: &
a,b,c="ABC"
但我无法将此序列作为参数传递给函数。i、 e
def function2(a,b,c):
print a
print b
print c
function2("ABC")
上面的语句引发了一个错误
有谁能告诉我python中赋值和参数传递之间的区别吗?编译器在LHS上看到一个逗号分隔的列表,并为您发出字节码在RHS上迭代。通过函数调用,它看到一个值,因此将其作为一个参数发送。您需要告诉它显式拆分序列:
>>> function2(*"ABC")
A
B
C
您创建的函数采用3个参数a、b和c。但是当调用函数时,只提供一个参数 要正确调用函数,需要执行以下操作
function2("A","B","C")
它会打印出来
A.
B
C函数可以具有可选参数,指定为具有默认参数值的参数。考虑函数
def function2(a, b=None, c=None):
print a
print b
print c
以下哪项应该function2(“ABC”)
输出
ABC
None
None
或
Python选择第一个选项,而不是检查某些参数是否具有默认值(其中iterable值被视为参数传递的单个值)以及特殊语法
function2(*"ABC")
提供第二个。由于还没有人提到这一点,
a,b,c=“ABC”
将a=“a”、b=“b”和c=“c”指定为字符串,也可以作为排序的迭代器,也就是说,您可以循环它,检查其中的字符,就像检查列表的元素一样
它与代码类似
a, b = 1, 2
Python将其解释为
(a, b) = (1, 2)
编译器检测到2个变量,因此进行2次赋值。将3传递给长度为3的字符串时,其工作原理相同:
(a, b, c) = ("A", "B", "C")
然而,正如其他人所说,在传递函数参数时,function2(a,b,c)
必须有3个参数,“ABC”只是一个对象:一个字符串,因此赋值a=“ABC”
,然后在b
和c
上引发并出错。要获得与a,b,c=(“a”,“b”,“c”)
相同的行为,可以使用*
解析它,即
function2(*"ABC") # is the same as function2("A", "B", "C")
*
解析器适用于任何iterable:list、(string)、dict(keys)等您的函数定义了3个参数,但当您调用它时,您只传递了一个参数,因此ABC
被分配给函数中的a
,而b、c则没有定义。为了好玩,请尝试function2(*“ABC”)
我想您的意思是“Python选择第一个选项”,我本来把这两个选项颠倒过来,但忘了更新那句话。
function2(*"ABC") # is the same as function2("A", "B", "C")