23

在 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

4 回答 4

43

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'是因为它的位置,而second获取third它们的值是因为它们通过显式使用它们的名称传递了这些值。

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

于 2013-06-17T07:42:19.877 回答
14

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

它是一个命名参数关键字参数

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

于 2013-06-17T07:39:53.673 回答
7

正如其他人所说,这是一个keyword argument. 务实地,指定或不指定参数之间的区别只是将使用哪个参数。

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

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
于 2013-06-17T07:47:28.557 回答
6

text在这种情况下是一个关键字参数,这意味着它是可选的。如果您没有明确提供它,则会自动提供默认值。

于 2013-06-17T07:40:17.527 回答