当前位置: 移动技术网 > IT编程>脚本编程>Python > 荐 浅谈Python函数的参数

荐 浅谈Python函数的参数

2020年07月07日  | 移动技术网IT编程  | 我要评论
https://www.programiz.com/python-programming/function-argumenthttps://www.geeksforgeeks.org/args-kwargs-python/https://treyhunner.com/2018/04/keyword-arguments-in-python/https://docs.python.org/zh-cn/3/glossary.html#term-argumenthttps://docs.python.org

1. 函数参数的分类

    函数参数分为形参(parameter)和实参(argument),这两种参数的区别就是:形参用于函数定义,实参用于函数调用。
    函数参数还可以分为位置参数和关键字参数。把这句话换一种说法就是:函数参数分为关键字参数和非关键字参数,也可以分成位置参数和非位置参数。位置参数很好理解,函数定义时确定了参数的位置,函数调用时,输入的具体数值会赋值给相应的位置参数。那关键字参数如何理解呢?实际上,关键字(keyword)的中的key就是key-value值的key,强调的是当函数调用时,特定的取值对应特定的参数。
    那么位置参数和关键字参数有什么关系呢?举个例子,假如100对新人举办婚礼,入场时要按顺序排成两排,男士一排,女士一排,如果其中2个男士的顺序颠倒了,而女士的顺序没有改变,入场时就会产生麻烦,这就是位置参数的缺点,调用函数时,输入值的顺序必须与位置参数的顺序一致。如果入场之前互相检查一下就可以避免麻烦了,这就意味着男士和女士之间是有对应关系的,关键字参数就强调了变量与取值的对应关系。所以,比起位置参数,关键字参数更加精确。

2. 参数分类之间的关系

    想了很久,画了下面这个图,表示形参、实参、位置参数和关键字参数之间的关系。
在这里插入图片描述
    当函数定义为 def func(arg) 时,函数调用可以使用位置参数,也可以使用关键字参数,示例如下:

def func(arg1,arg2):
      print(arg1+" "+arg2+"!")

#下面3条语句输出结果相同
func("Hello",arg2="world")
func(*("Hello","world"))
func(**{"arg2":"world","arg1":"Hello"})

    “仅允许使用位置参数”这个性质是python3.8新增的,意思是 / 符号前面的参数只能是位置参数,不能是关键字参数,示例如下:

def func(arg1, arg2, /, arg3):
      print(arg1+" "+arg2+","+arg3)
      
#下面2条语句输出结果相同
func("Hello","world",arg3="zsx0728")
func(*("Hello","world","zsx0728"))

    “仅允许使用关键字参数”的意识是,* 符号后面的参数只能是关键字参数,不能是位置参数,示例如下:

def func(*, arg1, arg2):
      print(arg1+" "+arg2+"!")
      
#下面2条语句输出结果相同
func(arg1="Hello",arg2="world")
func(**{"arg1":"Hello","arg2":"world"})

    理解了上面的内容就非常好理解可变参数 *arg 和 **kwargs 了。kwargs就是 keyword arguments, **kwargs表示函数调用时只能输入关键字参数,参数作为字典传递,这些参数在函数内部构成一个字典,参数可以是一个或多个; *args表示函数调用时只能输入位置参数,参数以元组形式传递,参数可以是一个或多个。

def func(*args, **kwargs):
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print("{} : {}".format(key, value))

func(
        "caption : Luffy",
        *("mate : Zoro","navigator : Nami"),
        sniper="Usop",
        **{"cook":"Sanj","doctor":"Choppe"}
        )

    输出值为:

caption : Luffy
mate : Zoro
navigator : Nami
sniper : Usop
cook : Sanj
doctor : Choppe

3. 使用注意事项

    函数定义和函数调用时,参数都按先位置参数,后关键字参数的顺序进行定义或输入。

#函数定义时,默认参数(关键字参数)在位置参数前会报错
def complex(kwarg="Hello",arg):
SyntaxError: non-default argument follows default argument

#函数调用时,关键字参数在位置参数前会报错
complex(keyword="Hello",arg)
SyntaxError: positional argument follows keyword argument

参考文献

[1]www.programiz.com.Python Function Arguments[EB/OL].https://www.programiz.com/python-programming/function-argument,2020-01-01.
[2]www.programiz.com.Python *args and **kwargs[EB/OL].https://www.programiz.com/python-programming/args-and-kwargs,2020-01-01.
[3]www.geeksforgeeks.org.*args and **kwargs in Python[EB/OL].https://www.geeksforgeeks.org/args-kwargs-python/,2020-01-01.
[4]Python Software Foundation.术语对照表[EB/OL].https://docs.python.org/zh-cn/3.6/glossary.html#term-argument,2020-06-29.
[5]Python Software Foundation.术语对照表[EB/OL].https://docs.python.org/zh-cn/3.6/glossary.html#term-parameter,2020-06-29.
[6]Python Software Foundation.表达式[EB/OL].https://docs.python.org/zh-cn/3.6/reference/expressions.html#calls,2020-06-29.

本文地址:https://blog.csdn.net/zsx0728/article/details/107089382

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网