Поскольку в python 3.8 представлены только позиционные аргументы, этот пост нуждается в обновлении.
Позиционные аргументы, аргументы ключевого слова, обязательные аргументы и необязательные аргументы часто путают. Позиционные аргументы НЕ ТО ЖЕ, КАК обязательные аргументы. аргументы и ключевые слова НЕ ТО ЖЕ, КАК необязательные аргументы.
Позиционные аргументы - это аргументы, которые можно вызывать по их положению в определении функции.
Аргументы ключевого слова - это аргументы, которые можно вызвать по имени.
Обязательные аргументы - это аргументы, которые необходимо передать функции.
Необязательные аргументы - это аргументы, которые нельзя передавать функции. В python необязательные аргументы - это аргументы, которые имеют значение по умолчанию .
Позиционный аргумент, который является необязательным (python 3.8)
def f(a=2, /):
pass
f()
f(1)
f(a=1)
Требуемый позиционный аргумент (Python 3.8)
def f(a, /):
pass
f()
f(1)
f(a=1)
Необязательный аргумент ключевого слова
def f(*, a=1):
pass
f()
f(1)
f(a=1)
аргумент ключевого слова, который требуется
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()
f(1)
f(a=1)
def f(*, a, /):
pass
Вывод: аргумент может быть необязательным или обязательным, но не одновременно . Он также может быть позиционным, ключевым или и тем , и другим одновременно .
Python 3.8 представил только позиционные параметры .
def f(positional_argument, /, positional_or_keyword_argument, *, keyword_argument):
pass