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上迭代。通过函数调用,它看到一个值,因此将其作为一个参数发送。您需要告诉它显式拆分序列: &

我可以在python中指定这样的序列:

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")