В чем разница между этими двумя способами передачи аргументов?
В 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'
. Может ли кто-нибудь рассказать мне об этом?
Ответы
Ответ 1
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
Ответ 2
Я чувствую странность в значении text = 'Hello'. Может ли кто-нибудь рассказать мне об этом?
Это named argument или аргумент ключевого слова.
Именованные аргументы позволяют передавать аргументы в функции в любом порядке, не только передавая значение аргумента, но также и имя аргумента.
Ответ 3
Как говорили другие, это 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
Ответ 4
text
в этом случае является аргументом , что означает, что он является необязательным. Если вы не укажете его явно, значение по умолчанию будет предоставлено автоматически.