Подтвердить что ты не робот

В чем разница между этими двумя способами передачи аргументов?

В 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'. Может ли кто-нибудь рассказать мне об этом?

4b9b3361

Ответ 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 в этом случае является аргументом , что означает, что он является необязательным. Если вы не укажете его явно, значение по умолчанию будет предоставлено автоматически.