基于this
位置参数是一个未跟随等号的名称 (=)和默认值。
关键字参数后跟一个等号和一个表达式 给出它的默认值。
def rectangleArea(width, height):
return width * height
print rectangleArea(width=1, height=2)
问题>我假设width
和height
都是位置参数。那么为什么我们也可以用关键字真实参数语法来调用它?
答案 0 :(得分:102)
您引用的文本是针对函数的定义,与调用函数无关。在该函数的调用中,您正在使用“命名参数”功能。你提供的链接质量不是很好,作者似乎对两种不同的东西感到困惑。
Python引用仅涉及对函数的调用的位置和关键字参数(参见section 5.3.4 Calls
)。
当他们在section 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.
=
的含义会发生变化,具体取决于它是在定义中还是在调用中。
在定义中,它将参数标记为可选,并设置默认值。
在调用中,它只是允许您以任何您想要的顺序指定哪些参数应该是哪些值。
答案 1 :(得分:13)
关键字参数只是具有默认值的位置参数。您必须指定所有没有默认值的参数。换句话说,关键字参数只是“可选的”,因为如果没有特别提供,它们将被设置为默认值。
答案 2 :(得分:3)
可以使用顺序中的值或通过命名每个来调用位置参数。例如,以下所有三个都将以相同的方式工作:
def rectangleArea(width, height):
return width * height
print(rectangleArea(1, 2))
print(rectangleArea(width=1, height=2))
print(rectangleArea(height=2, width=1))
答案 3 :(得分:2)
由于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引入了positional only parameters。
def f(positional_argument, /, positional_or_keyword_argument, *, keyword_argument):
pass
答案 4 :(得分:1)
位置参数:以正确的位置顺序传递给函数的参数。下面的程序理解函数的位置参数
#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字符串变为错误。
答案 5 :(得分:0)
了解函数的关键字参数。
关键字参数是通过名称标识参数的参数。
#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.
答案 6 :(得分:0)
在此处定义参数和参数会有所帮助。
例如,
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
鲜为人知的是,您可以使用参数列表中的/
(例如here中的示例)来指定仅位置参数。
def func(positional_only1, positional_only2, /, positional_or_keyword): ...
类似地,您也可以使用*
字符来使用仅关键字的参数。
def func(positional_or_keyword, *, keyword_only1, keyword_only2): ...
最后,我们还有var-positional和var-keyword(也称为* args和** kwargs)。意思是,您可以将任意位置参数或关键字参数序列传递给该函数。