Python 函数参数

79 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

python 是一门动态类型语言,在调用函数传递参数时候,不需要指定参数的类型,但是python在使用过程中传递参数的一些小细节你注意到了吗?

python的函数定义很简单,但是在函数传递的时候自由度非常大,支持的类型也很多

参数类型

  • 位置参数
  • 默认参数
  • 可变参数
  • 关键字参数

位置参数

传入实参 和 型参 一一对应

def power(x):
    return x * x
>>> power(2)
4
>>> power(3)
9
>>> power(1,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: power() takes 1 positional argument but 2 were given

默认参数

我们可以为一个函数传递默认参数,而且我们可以在传递参数时候指定这个值,来覆盖默认参数。

>>> def power(x,n=5):
...     return x**n
...
>>> power(2)
32
>>> power(2,3)
8

可变参数

 >>> def summ(*numbers):
...     print(type(numbers))
...     print(sum(numbers))
...
>>>
>>> summ(1,2,3,4,5)
<class 'tuple'>
15

可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3))

关键字参数

我们可以将一些键值对,传入函数在函数内解析为一个dict

>>> def person(name, age, **kw):
...     print("name:",name,"age:",age,"other:",kw)
...     print(type(kw))
...
>>> person("xiaoming",12,addr = "翻斗花园",tel=123123123)
name: xiaoming age: 12 other: {'addr': '翻斗花园', 'tel': 123123123}
<class 'dict'>

关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})

参数顺序

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数默认参数可变参数命名关键字参数关键字参数