На основании этого
Позиционный аргумент - это имя, за которым не следует знак равенства (=) и значение по умолчанию.
За аргументом ключевого слова следует знак равенства и выражение, которое дает значение по умолчанию.
def rectangleArea(width, height):
return width * height
print rectangleArea(width=1, height=2)
Вопрос > Я предполагаю, что оба аргумента width
и height
являются позиционными. Тогда почему мы можем также вызвать его с помощью синтаксиса аргумента ключевого слова?
Ответы:
Этот текст, который вы цитируете, предназначен для определения функции и не имеет ничего общего с вызовами функции. При вызове этой функции вы используете функцию «именованный аргумент». Ссылка, которую вы предоставляете, не очень хорошего качества, авторы, похоже, путают две разные вещи.
Ссылка Python относится к позиционным аргументам и аргументам ключевого слова только в отношении вызова функции (см. Раздел
5.3.4 Calls
).Когда они говорят об определении функции в разделе
7.6 Function definitions
, это совершенно другой термин «значения параметров по умолчанию».Я подозреваю, что люди, которые составляли этот курс, не были полностью знакомы с Python :-)
В качестве примера обратитесь к следующему определению и вызовам:
def fn (a, b, c = 1): # a/b required, c optional. return a * b + c print fn (1, 2) # returns 3, positional and default. print fn (1, 2, 3) # returns 5, positional. print fn (c = 5, b = 2, a = 2) # returns 9, named. print fn (b = 2, a = 2) # returns 5, named and default. print fn (5, c = 2, b = 1) # returns 7, positional and named. print fn (8, b = 0) # returns 1, positional, named and default.
Смысл
=
меняется в зависимости от того, в определении или в звонке.В определении он помечает аргумент как необязательный и устанавливает значение по умолчанию.
В вызове он просто позволяет вам указать, какие аргументы должны быть какими значениями, в любом порядке, который вы хотите.
источник
Поскольку в python 3.8 представлены только позиционные аргументы, этот пост нуждается в обновлении.
Позиционные аргументы, аргументы ключевого слова, обязательные аргументы и необязательные аргументы часто путают. Позиционные аргументы НЕ ТО ЖЕ, КАК обязательные аргументы. аргументы и ключевые слова НЕ ТО ЖЕ, КАК необязательные аргументы.
Позиционные аргументы - это аргументы, которые можно вызывать по их положению в определении функции.
Аргументы ключевого слова - это аргументы, которые можно вызвать по имени.
Обязательные аргументы - это аргументы, которые необходимо передать функции.
Необязательные аргументы - это аргументы, которые нельзя передавать функции. В python необязательные аргументы - это аргументы, которые имеют значение по умолчанию .
Позиционный аргумент, который является необязательным (python 3.8)
def f(a=2, /): pass f() # Allowed, argument is optional f(1) # Allowed, it's a positional argument f(a=1) # Error, positional only argument
Требуемый позиционный аргумент (Python 3.8)
def f(a, /): pass f() # Error, argument required f(1) # Allowed, it's a positional argument f(a=1) # Error, positional only argument
Необязательный аргумент ключевого слова
def f(*, a=1): pass f() # Allowed f(1) # Error, keyword only arguments f(a=1) # Allowed, it's a keyword argument
аргумент ключевого слова, который требуется
def f(*, a) pass f() # Error, argument required f(1) # Error, keyword only arguments f(a=1) # Allowed, it's a keyword argument
Позиционный и ключевой аргумент, необязательный
def f(a=1) pass f() # Allowed, argument is optional f(1) # Allowed, it's a positional argument f(a=1) # Allowed, it's a keyword argument # In fact this function is the same as def f(*, a=1, /): pass
Позиционный и ключевой аргумент, который требуется
def f(a): pass f() # Error, argument required f(1) # Allowed, it's a positional argument f(a=1) # Allowed, it's a keyword argument # In fact this function is the same as def f(*, a, /): pass
Вывод: аргумент может быть необязательным или обязательным, но не одновременно . Он также может быть позиционным, ключевым или и тем , и другим одновременно .
Python 3.8 представил только позиционные параметры .
def f(positional_argument, /, positional_or_keyword_argument, *, keyword_argument): pass
источник
f(/,a,*)
вместоf(*, a, /)
в двух последних примерах?Аргумент ключевого слова - это просто позиционный аргумент со значением по умолчанию. Вы должны указать все аргументы, которые не имеют значения по умолчанию. Другими словами, аргументы ключевого слова являются только «необязательными», потому что для них будут установлены значения по умолчанию, если они не указаны специально.
источник
Позиционные аргументы могут быть вызваны либо с использованием значений по порядку, либо путем именования каждого. Например, все три из следующих действий будут работать одинаково:
def rectangleArea(width, height): return width * height print(rectangleArea(1, 2)) print(rectangleArea(width=1, height=2)) print(rectangleArea(height=2, width=1))
источник
name=
) в вызове функции или передается как значение в словаре, которому предшествует**
. Эти два определения противоречат вашему примеру.позиционные аргументы: аргументы, переданные функции в правильном позиционном порядке. ниже программа понимает позиционные аргументы функции
#positional arguments example def combine(str1, str2): #To join str1 and str2 with str3 str3 = str1 + str2 print(str3) #call combine() and pass 2 strings combine("Well", "come") #positional arguments
Предположим, сначала мы прошли «пришел», а затем «хорошо», тогда будет результат. Кроме того, вызов функции 3 строки становится ошибкой.
источник
Поймите аргументы ключевого слова функции.
Аргументы ключевого слова - это аргументы, которые идентифицируют параметры по их именам.
#keyword arguments example: def employee(name, Id): print("Employee Name: ", name) print("Employee Id : ", Id) #call employee() and pass 2 arguments employee(name = "inban", Id = "pay001") employee(Id = "pay002", name = "karthik") #we can change the order args.
источник
Здесь может помочь определение параметров и аргументов.
Например,
def my_function(parameter_1, parameter_2): pass my_function(argument_1, argument_2)
Теперь, когда вы говорите «позиционный аргумент», вы говорите об аргументах , поэтому не имеет ничего общего с определением функции.
width
аheight
в вашем примере - это позиционные параметры или параметры ключевого слова (так называемые параметры позиционного или ключевого слова).То, как вы вызываете / передаете значение функции, определяет, являются ли они позиционными аргументами или аргументами ключевых слов .
rectangleArea(1, 2) # positional arguments rectangleArea(width=1, height=2) # keyword arguments
Мало кто знает, что вы можете указать только позиционный параметр, используя
/
в списке параметров (пример отсюда ).def func(positional_only1, positional_only2, /, positional_or_keyword): ...
Точно так же вы также можете иметь параметры, содержащие только ключевые слова, используя
*
символ.def func(positional_or_keyword, *, keyword_only1, keyword_only2): ...
Наконец, у нас также есть var-positional и var-keyword (также известные как * args и ** kwargs соответственно). Это означает, что вы можете иметь произвольную последовательность позиционных аргументов или аргументов ключевого слова, передаваемую функции.
источник