python 参数类型理解
阅读原文时间:2023年07月09日阅读:2

大家都知道,在java中,函数或者方法的参数在调用时必须对其进行传参操作,也就是所谓的必选参数,也可以称为位置参数,除此之外,python还拥有其他语言不具有的一些参数类型,以下将进行一一介绍。

必选参数,又称位置参数,是大多数语言都会有的参数类型, 此参数在调用是必须进行传参。

# 必选参数
def sum(x, y):
    return x + y

print(sum(1,2))

默认参数一般会拥有一个默认值,当对默认参数传参时,和必选参数作用类似,当不对默认参数传参时,则使用默认参数的默认值

# 默认参数
def plus(x, y, z=1):
    return x + y + z

print(plus(1,2))
print(plus(1,2,3))

可变参数主要是为了方便在参数未知的情况下传递参数值,可变参数一般是以元组(tuple)的形式调用, 符号为*args

# 可变参数
def sum2(*args):
    print(args)
    total = 0
    for item in args:
        total += item
    return total

print(sum2(1,3,4))


(1, 3, 4)
8

与可变参数类似,都是为了方便进行参数未知情况下的参数传递,不同的是传递的参数值是键值对形式,关键字参数一般是以字典(dict)形式传递,符号为**kwargs

# 关键字参数
def test(**kwargs):
    print(kwargs)

test(name='mike', age=14, gender='man')


{'name': 'mike', 'age': 14, 'gender': 'man'}

命名关键字参数是从关键字参数衍生而来的,对关键字参数做了进一步的限制,符号为*

# 命名关键字参数
def test2(name, age, *, gender, city):
    print(name, age, gender, city)

# 命名关键字参数传递键值对形式时只能传递*后面规定的key值,不能减少或添加新的key值,否则会报错
test2('mike',18, gender='man', city='nanjing')
test2('mike',18, test=1, city='beijing')


mike 18 man nanjing
Traceback (most recent call last):
  File "/home/ts/flask_study/python参数类型/param.py", line 36, in <module>
    test2('mike',18, a=1, city='beijing')
TypeError: test2() got an unexpected keyword argument 'a'

由于存在多种参数,且部分参数的符号类似,因此,在进行多参数设置时需要考虑参数的顺序,顺序如下

必选参数(位置参数)、默认参数、可变参数、命名关键字参数和关键字参数。


def test3(a, b=1, *, d, **kwargs):
    print(a,b,d,kwargs)

test3(1,b=2, d=2, name='mike', gender='man')


1 2 2 {'name': 'mike', 'gender': 'man'}

1.任何包含可变参数和关键字参数的函数都可以通过如下方式实现

func(*args, **kwargs)

2.为了代码更好的可读性,建议一次性不要使用过多的参数。