在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'
的含义感到奇怪。有人可以告诉我这个吗?
答案 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'
因为它的位置,而second
和third
得到了它们的值,因为它们是通过明确使用它们的名称传递这些值的。 / p>
有关详细信息,请参阅文档:http://docs.python.org/3/tutorial/controlflow.html#more-on-defining-functions
答案 1 :(得分:14)
我对text ='Hello'的含义感到奇怪。有人可以告诉我这个吗?
这是named argument或keyword 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)
text
是keyword argument,这意味着它是可选的。如果您未明确提供,则会自动提供默认值。