文章目录
1、函数的简介
这里的函数和我们在数学中的f(x)比较相似,输入一个参数得到一个结果。当然,有的时候不需要参数。
什么时候能用到函数呢?比如,有的时候,我们需要重复进行某一些操作,那么我们就可以把这一些操作打包,在需要的时候,调用这个函数就可以了。
函数是一个对象,加括号才会执行函数。
2、函数的创建
以下格式
def 函数名(参数……):
操作1
操作2
……
(return)
3、函数的参数
3.1 参数的简介
函数是可以没有参数的,但是一般情况我们都是想要参数的。
这里函数里面的参数叫做形参,我们调用函数时传入的参数叫做实参,实参和形参是对应的。
传参实际就是形参指针指向实参的过程。 |
参数的类型是不限制的,可以是任意类型的对象。 |
3.2 参数的传递方式
3.2.1 设置默认参数
在定义函数时,可以给形参设置默认值,如果没有实参传入时,就会把默认值传递给它。
In [35]: def h(a=1,b=2):
...: print('a=',a)
...: print('b=',b)
...:
In [36]: h(0,0)
a= 0
b= 0
In [37]: h()
a= 1
b= 2
3.2.2 位置传参
就是按照形参的顺序传递参数,一般用的都是这个。
In [35]: def h(a=1,b=2):
...: print('a=',a)
...: print('b=',b)
In [38]: h(4,5)
a= 4
b= 5
3.3.3 关键字传参
使用关键字来传递参数,这样的好处就是不需要记忆形参的顺序。
In [35]: def h(a=1,b=2):
...: print('a=',a)
...: print('b=',b)
In [39]: h(b=5,a=6)
a= 6
b= 5
3.3.4 位置、关键字混合传参
这时候必须把位置参数放在前面,否则就会报错。
In [35]: def h(a=1,b=2):
...: print('a=',a)
...: print('b=',b)
In [40]: h(17,a=8)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-40-8cde5f751228> in <module>()
----> 1 h(17,a=8)
TypeError: h() got multiple values for argument 'a'
In [41]: h(7,b=8)
a= 7
b= 8
In [42]: h(a=7,8)
File "<ipython-input-42-6a8108aaaef8>", line 1
h(a=7,8)
^
SyntaxError: positional argument follows keyword argument
4、不定长参数
有时候我们可能不太清楚形参到底有几个,或者是有很多形参,我们只想传入两个,这时候就可以用到不定长参数。
def h(a,b,*c):
print('a=',a)
print('b=',b)
print('c=',c)
h(1,2,3,4,5)
"""
a= 1
b= 2
c= (3, 4, 5)
"""
h(1,2)
"""
a= 1
b= 2
c= ()
"""
注意:
- 不定长参数只能有一个。
- 如果不定长参数没有放在最后一个,它后面的参数要用关键字传参,否则不知道怎么分配。
- *形参只能接受位置参数,不能接受关键字参数。多个参数保存在元组中。
- **形参可以接受关键字参数,以字典的形式存放。
- **形参只能有一个,并且只能放在最后一个。
- ‘*’处理的是位置参数,‘**’处理的是关键字参数
5、参数的解包
这样实现了变量作为实参进行传递,但是变量的长度需要和参数个数对应。
5.1 解包列表、元组、集合
In [1]: def h(a,b,*c):
...: print('a=',a)
...: print('b=',b)
...: print('c=',c)
...: m=[1,2,3,4,5]
...: h(*m)
...:
...:
a= 1
b= 2
c= (3, 4, 5)
5.2 解包字典
In [2]: def h(a,b,c):
...: print('a=',a)
...: print('b=',b)
...: print('c=',c)
...: m={'a':1,'b':3,'c':6}
...: h(**m)
...:
...:
a= 1
b= 3
c= 6