这两种传递参数的方式有什么区别?

时间:2013-06-17 07:37:29

标签: python

在Python中,这两个例子做同样的事情:

from tkinter import Label
widget = Label(None, text='Hello')
widget.pack()
widget.mainloop()

from tkinter import Label
widget = Label(None,'Hello')
widget.pack()
widget.mainloop()

我认为Label是一个类,当我尝试创建该类的实例时,我总是做与上一个代码示例相同的事情。我对text='Hello'的含义感到奇怪。有人可以告诉我这个吗?

4 个答案:

答案 0 :(得分:44)

text='Hello'表示您在函数参数中明确地将值'Hello'传递给关键字参数 text

Label(None,'Hello')表示'Hello'被传递给函数定义中的第二个位置参数(无论该变量的名称是什么)

>>> def func(first, second):
...     print first, second
...     
>>> func('foo', 'text')
foo text
>>> func('foo', second = 'text')
foo text

使用关键字参数,调用顺序无关紧要,但所有关键字参数必须位于位置参数之后。

>>> def func(first, second, third):
    print first, second, third
...     
>>> func('foo', third = 'spam', second = 'bar')
foo bar spam

此处first获取值'foo'因为它的位置,而secondthird得到了它们的值,因为它们是通过明确使用它们的名称传递这些值的。 / p>

有关详细信息,请参阅文档:http://docs.python.org/3/tutorial/controlflow.html#more-on-defining-functions

答案 1 :(得分:14)

  

我对text ='Hello'的含义感到奇怪。有人可以告诉我这个吗?

这是named argumentkeyword argument

命名参数允许以任何顺序将参数传递给函数,不仅传递参数值,还传递参数名称。

答案 2 :(得分:7)

正如其他人所说,这是keyword argument。实际上,指定或不指定参数之间的区别仅在于使用哪个参数。

例如,如果你有一个带有3个参数的函数,并且只传递了一个或两个参数,那么你必须指定你正在使用的参数,以防它们不是你定义中的第一个参数。 / p>

def f(a = "a", b = "b", c = "c"):
    print a, b, c

>>> f("x")
x b c
>>> f("x", "y")
x y c
>>> f("x", c = "y")
x b y

答案 3 :(得分:6)

在这种情况下,

textkeyword argument,这意味着它是可选的。如果您未明确提供,则会自动提供默认值。