赋值和参数传递有什么不同?

时间:2015-05-06 19:38:20

标签: python variable-assignment

我可以在python中分配这样的序列:

a,b,c="ABC"

但我无法将此序列作为参数传递给函数。即

def function2(a,b,c):
    print a
    print b
    print c
function2("ABC")

上述声明引发了错误。

任何人都可以告诉我在python中传递赋值和参数之间的区别吗?

4 个答案:

答案 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}}解析器适用于任何可迭代:列表,(字符串),字典(键)等