专栏名称: 码农小胖哥
技术公众号:码农小胖哥
目录
相关文章推荐
康石石  ·  我跨专业拿到了世界第一的offer!!! ·  昨天  
中国城市报  ·  “哪吒雕塑被吐槽像光头强”,广东一景区回应 ·  2 天前  
中国城市报  ·  “哪吒雕塑被吐槽像光头强”,广东一景区回应 ·  2 天前  
青海教育  ·  这些高校正在招聘,来看! ·  2 天前  
中国上海国际艺术节  ·  开票 | ... ·  3 天前  
51好读  ›  专栏  ›  码农小胖哥

python 函数中的参数类型

码农小胖哥  · 掘金  ·  · 2020-02-11 03:23

正文

阅读 11

python 函数中的参数类型

1.前言

Python 中函数的参数类型比较丰富,比如我们经常见到 *args **kwargs 作为参数。初学者遇到这个多少都有点懵逼,今天我们来把 Python 中的函数参数进行分析和总结。

2.Python 中的函数参数

在Python中定义函数参数有5种类型,我们来一一演示它们。

2.1必选参数

必须参数是最基本的参数类型,当你在 Python 函数中定义一个必选参数时,每次调用都必须给予赋值,否则将报错。

>>>def fun(a):
       print("a=",a) 
   
>>>fun('felord.cn')
a= felord.cn
>>>fun()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: fun() missing 1 required positional argument: 'a'复制代码

2.2默认参数

默认参数就是拥有一个默认值的参数。

>>>def fun(a="felord.cn"):
       print("a=",a) 
   
>>>fun()
a= felord.cn
>>>fun("Felordcn")
a= Felordcn复制代码

我们来看看下面这种情况:

>>>def fun(a=[]):
       a.append("foo")
       print("a=",a)
    
>>>fun()
a= ['foo']
>>>fun()
a= ['foo', 'foo']
>>>fun()
a= ['foo', 'foo', 'foo']复制代码

这是什么情况?每次调用参数 a 都“记忆”了原来的值,这是因为 Python 函数在定义的时候,默认参数 a 的值就被初始化为 [] ,其实 a 也是一个变量,它指向对象 [] ,每次调用该函数改变 a 的值则会改变 a 指针指向的对象的值。当你将 a 的默认值定义为一个不可变对象时就不会发生这种情况,你可以试试我说的。

所以,定义默认参数要牢记一点:默认参数必须指向不变对象!

2.3可变参数

有很多场景我们不确定参数的个数,也就是说参数是可变的。首先你可能会想到使用 list 或者 tuple (元组)来封装多个参数,但是如何才能从函数的语义上看出这是一个可变参数呢?所以我们通过一个前缀标识 * 来声明该参数是一个可变参数,通常记作 *args ,你也可以记作 *params args 会把所有的参数收纳成一个 tuple 。我们来演示一个求和的函数:







请到「今天看啥」查看全文