一.定义函数
def 函数名([形式参数]):
函数体 函数要执行的程序
return 返回值 如果没有return返回,默认返回值为None;
函数名([实参])
注意:有返回值 的函数,必须print fun(),可以打印出返回值;
<a href="https://s3.51cto.com/wyfs02/M00/A4/3E/wKioL1mnZZSj7tJMAAAsZlVWwdc987.png" target="_blank"></a>
二.调用函数
内置函数(BIF,built-in function)
min,max,sum,zip,abs,
int,float,str,list,tuple,bool,
<a href="https://s4.51cto.com/wyfs02/M01/05/78/wKiom1mlf6TxHgK0AABIsXB4zC8512.png" target="_blank"></a>
函数实质上是一个变量;函数名是一个指向函数对象的引用,完全可以把函数赋值给一个变量,相当于给这个函数起了个别名;
In [59]: a = abs a变量指向abs函数
In [60]: a(-1) 可以通过a实现abs的功能;
Out[60]: 1
In [61]: abs(-1)
Out[61]: 1
<a href="https://s1.51cto.com/wyfs02/M00/05/78/wKiom1mlfZWgT0Q8AABPif4Suj8817.png" target="_blank"></a>
三.空函数:
定义一个什么事也不做的空函数,可以用 pass 语句;
pass 可以用来作为占位符,还没想好怎么写函数的代码, 就可以先放一个 pass ,让代码能运行起来
def nofunc():
pass
四.函数的返回值
- 在函数中,一旦遇到return关键字,函数就执行结束;
- 函数返回值只能返回一个,如果想间接返回多个值,返回值实际是一个元组;
- 函数执行完毕也没有 return 语句时,自动 return None
<a href="https://s2.51cto.com/wyfs02/M01/05/78/wKiom1mlfeTxim2fAACOre4ZFhg308.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M01/A4/29/wKioL1mlfdLQDMQKAACOUgxgqGo759.png" target="_blank"></a>
<a href="https://s4.51cto.com/wyfs02/M00/05/8E/wKiom1mnal6SYfWVAABP1p12PAI399.png" target="_blank"></a>
四.函数的参数传值
默认参数注意事项:
- 默认参数可以降低调用函数的难度。
- 有多个参数时,变化大放前面,变化小的放后面;
- 必选参数在前,默认参数在后
<a href="https://s1.51cto.com/wyfs02/M00/A4/3F/wKioL1mnbGSjrOEvAAAmEYg5ULM154.png" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M00/A4/3F/wKioL1mnbm_BTl3LAAAe8FI02p0490.png" target="_blank"></a>
1. 必选参数:形参与实参的个数必须相同,否则直接报错;
2. 默认参数:在定义函数时,给形参一个默认值;
小测试:
先定义一个函数,传入一个 list,添加一个END 再返回
<a href="https://s2.51cto.com/wyfs02/M00/05/78/wKiom1mlfyPROZT7AACQ75EXAEg819.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M02/05/78/wKiom1mlfvLgiB-HAACPk69uEXk262.png" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M01/A4/29/wKioL1mlft_iY8f2AACaofgTsds948.png" target="_blank"></a>
3.可变参数:传入的参数个数是可变的,可以是1-n个,也可以是0个;一般实参中用*args来表示可变参数;
args接收的是一个元组(tuple);
<a href="https://s4.51cto.com/wyfs02/M01/05/AF/wKiom1mpVCPiNFq-AABpcZX_qfY031.png" target="_blank"></a>
4.关键字参数:
- 关键字参数允许你传入 0 个或任意个含参数名的参数;
- 这些关键字参数在函数内部自动组装为一个 dict;
- 关键字参数用**kwargs
多个关键字需加上key值
<a href="https://s4.51cto.com/wyfs02/M00/05/AF/wKiom1mpVCOzQrN6AABWtynDdOI679.png" target="_blank"></a>
解包
把一个序列元素依次传入带有可变参数的函数时,可通过fun(*l)来解包
把一个字典元素依次传入带有关键字参数的函数时,可通过fun(**d)来解包
<a href="https://s4.51cto.com/wyfs02/M00/A4/60/wKioL1mpVAuzXHBpAADPHCG-sk8474.png" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M01/05/AF/wKiom1mpVCOyNhm_AACh-SiEtHo038.png" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M01/A4/60/wKioL1mpVAzwpMfQAAB1bLzcnlg298.png" target="_blank"></a>
5.参数组合
- 参数组合是指可以必选参数、 默认参数、 可变参数和关键字参数一起使用。
- 参数定义的顺序必须是:必选参数、 默认参数、可变参数和关键字参数。
6.参数总结
- 必选参数
- 默认参数:默认参数一定要用不可变对象
- 可变参数:*args 是可变参数,args 接收的是一个 tuple
- 关键字参数:**kw 是关键字参数,kw 接收的是一个dict
- 对于任意函数,都可以通过类似 func(*args, **kw) 的形式调用它
<a href="https://s1.51cto.com/wyfs02/M02/05/78/wKiom1mlgAugq2QrAAC8EuFN-GU781.png" target="_blank"></a>
五.变量的作用域
1.全局参数:在函数外定义的函数
2.局部参数:在函数内部定义的函数;
- global:声明局部变量为全局变量;
global name
name = "westos"
<a href="https://s2.51cto.com/wyfs02/M02/05/78/wKiom1mlfnLgtnq7AAB4DK6wM3U367.png" target="_blank"></a>
<a href="https://s3.51cto.com/wyfs02/M02/A4/29/wKioL1mlfmCwSKmiAACACtetAMw853.png" target="_blank"></a>
六.帮助文件
帮助文件结尾为__doc__,可以自行编写
<a href="https://s3.51cto.com/wyfs02/M02/05/AF/wKiom1mpWTCjk62WAAEsy3Fs_yE997.png" target="_blank"></a>
<a href="https://s3.51cto.com/wyfs02/M02/A4/61/wKioL1mpWRiR-eC8AAFARVsDUsk555.png" target="_blank"></a>
本文转自一百个小排 51CTO博客,原文链接:http://blog.51cto.com/anfishr/1960929,如需转载请自行联系原作者