Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 位置参数与关键字参数_Python - Fatal编程技术网

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): ...