Python 位置参数与关键字参数
基于 位置参数是后面没有等号的名称 (=)和默认值 关键字参数后跟等号和 提供其默认值Python 位置参数与关键字参数,python,Python,基于 位置参数是后面没有等号的名称 (=)和默认值 关键字参数后跟等号和 提供其默认值 问题>我假设宽度和高度都是位置参数。那么为什么我们还可以用关键字参数语法来调用它呢?您引用的文本用于函数的定义,与函数的调用无关。在对该函数的调用中,您使用的是“命名参数”特性。你提供的链接质量不是很好,作者们似乎对两种不同的东西感到困惑 Python引用仅针对函数调用引用位置参数和关键字参数(请参阅) 当他们在中谈论函数的定义时,它是一个完全不同的术语“默认参数值” 我怀疑制作该课件的人并不完全熟悉Pyth
问题>我假设
宽度
和高度
都是位置参数。那么为什么我们还可以用关键字参数语法来调用它呢?您引用的文本用于函数的定义,与函数的调用无关。在对该函数的调用中,您使用的是“命名参数”特性。你提供的链接质量不是很好,作者们似乎对两种不同的东西感到困惑
Python引用仅针对函数调用引用位置参数和关键字参数(请参阅)
当他们在中谈论函数的定义时,它是一个完全不同的术语“默认参数值”
我怀疑制作该课件的人并不完全熟悉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.
=
的含义会发生变化,这取决于它是在定义中还是在调用中
在定义中,它将参数标记为可选并设置默认值
在调用中,它只允许您指定哪些参数应该是哪些值,顺序如何。可以按顺序使用值或通过命名每个值来调用位置参数。例如,以下三项的工作方式相同:
def rectangleArea(width, height):
return width * height
print(rectangleArea(1, 2))
print(rectangleArea(width=1, height=2))
print(rectangleArea(height=2, width=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字符串变为错误 了解函数的关键字参数 关键字参数是通过名称标识参数的参数
#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.
由于Python3.8只引入了位置参数,因此本文需要更新 位置参数、关键字参数、必需参数和可选参数经常混淆。位置参数与所需参数不同。和关键字参数与可选参数不同 位置参数是可以通过其在函数定义中的位置调用的参数 关键字参数是可以通过名称调用的参数 必需参数是必须传递给函数的参数 可选参数是不能传递给函数的参数。在python中,可选参数是具有默认值的参数 可选的位置参数(python 3.8) 定义f(a=2,/): 通过 f()#允许,参数是可选的 f(1)#允许,这是一个位置参数 f(a=1)#错误,仅位置参数 必需的位置参数(python 3.8) 定义f(a,/): 通过 f()#错误,需要参数 f(1)#允许,这是一个位置参数 f(a=1)#错误,仅位置参数 可选的关键字参数
def(*,a=1):
通过
f()#允许
f(1)#错误,仅关键字参数
f(a=1)#允许,这是一个关键字参数
必需的关键字参数
定义f(*,a)
通过
f()#错误,需要参数
f(1)#错误,仅关键字参数
f(a=1)#允许,这是一个关键字参数
位置和关键字参数是可选的
def(a=1)
通过
f()#允许,参数是可选的
f(1)#允许,这是一个位置参数
f(a=1)#允许,这是一个关键字参数
#实际上,这个函数与
def f(*,a=1,/):
通过
必需的位置和关键字参数
def(a):
通过
f()#错误,需要参数
f(1)#允许,这是一个位置参数
f(a=1)#允许,这是一个关键字参数
#实际上,这个函数与
定义f(*,a,/):
通过
结论:一个参数可以是可选的,也可以是必需的,但不能同时是可选的和必需的。它也可以是位置、关键字或同时是
介绍了Python 3.8
def(位置参数,/,位置参数或关键字参数,*,关键字参数):
通过
在此处定义参数和参数可能会有所帮助
def my_function(parameter_1, parameter_2):
pass
my_function(argument_1, argument_2)
现在,当你说位置参数时,你说的是参数,所以和函数定义无关<示例中的代码>宽度和高度是位置参数或关键字参数(所谓的位置参数或关键字参数)
调用/传递值给函数的方式决定它们是位置参数还是关键字参数
很多人不知道的是,您可以通过使用参数列表中的/
来指定仅位置参数(例如中的)
类似地,您也可以使用*
字符使用仅关键字参数
def func(positional_or_keyword, *, keyword_only1, keyword_only2): ...
最后,我们还有var positional和var关键字(分别是a.k.a*args和**kwargs)。也就是说,您可以将任意顺序的位置参数或关键字参数传递给函数。“为什么我们可以?”
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): ...