函数
python中的函数就是以关键字def来定义的代码,而它的类型就是函数返回值的类型
函数的命名
函数可以以字母,下划线,数字组成,但不能以数字开头,函数名后面加有括号,括号里面可以添加参数,参数可以使用实参,也可以使用形参,然后再括号后面加上冒号,换行之后是函数的主体内容
函数的参数
函数的参数可以有多个,可以是实参,也可以是形参,在引用函数时,需要一一对应的给形参赋值,而实参可以直接引用默认值。当然,也可以在函数主体中重新赋值
![5400c3eb2d28263d58153fcc86f35447.png](https://i-blog.csdnimg.cn/blog_migrate/c6187b8aac8b8707b066f66a0b2b254c.jpeg)
![870cdbd285e685436bd7bdfe5d28108a.png](https://i-blog.csdnimg.cn/blog_migrate/110cbb3372c58c6ebddffc8f015fc40c.jpeg)
参数也可以是列表,元组等内置数据结构
![aeeb38aaff00a79d45fb347505cb0af1.png](https://i-blog.csdnimg.cn/blog_migrate/d68e58c8bbef559547e7e4be360f5c38.jpeg)
当要传递的参数有多个时,函数无法定义到底有几个,这时可以用 “*” 或者 “**”,“*” 可以将多个参数组合成元组引用,“**” 则可以引用字典
![1a598c0464b209797b1a1d2ed39ef271.png](https://i-blog.csdnimg.cn/blog_migrate/2d26ebafb5201f2d135e822a6759f1a1.jpeg)
![8d9ee5b6aff24f294972151f88cc6f3e.png](https://i-blog.csdnimg.cn/blog_migrate/b119d81055422255381f4599e5178137.jpeg)
函数的返回值
函数的返回值是用return语句,return后面可以是变量或表达式。
![18012726c47dfb847dd281602eae83c8.png](https://i-blog.csdnimg.cn/blog_migrate/300ed7affed5badede8f95ad398cd29d.jpeg)
和C,Java不一样,python函数中的return是可以省略的,但是仍然会获得返回值None,None是python中的一个对象,不属于数字或字符串。当return不带任何参数时,会返回None
![e50f863b67a3c2104edf5836ff31498d.png](https://i-blog.csdnimg.cn/blog_migrate/41e58cb29df2dd9ed60b469b443fefc4.jpeg)
当需要函数返回多个值时,可以在return后面加多个变量,函数会返回一个元组
![3895df9f48b64a7e3c27b4ac54a51ee5.png](https://i-blog.csdnimg.cn/blog_migrate/dd4e7cc9c4adceabada0004bfc3c5e89.jpeg)
函数中可以使用多个return语句,但是不建议使用这种方法,会使程序过于复杂化,可以尝试使用增加变量的方法减少return语句
函数的嵌套和递归
函数的嵌套是指在函数内部调用其他函数。python支持函数之间的嵌套,还支持函数内部嵌套
![25109d49f6fba1d26fd5a19358ece32b.png](https://i-blog.csdnimg.cn/blog_migrate/6816232ea6a8065b8e8e9cea2d022e01.jpeg)
![f64cf2ce5d72c55e27d59fb315c1ead2.png](https://i-blog.csdnimg.cn/blog_migrate/b87add55c773a80b879b46d1d578206b.jpeg)
内部函数还可以支持调用上级函数的变量
![bed8bfffdd7063153c68eb11305652b7.png](https://i-blog.csdnimg.cn/blog_migrate/235bd7d2380a035167cc3cb8e7e6310b.jpeg)
注意:在编写代码时,尽量不要随意定义内部函数,这样不便于程序的维护,而且嵌套层数越多,后续维护成本就越大
在函数中直接或间接的嵌套函数本身,就是递归函数。这种方法可以减少重复的代码,使代码看上去更加简洁
![bbddaa08d8487d0b21de0eb178436b2a.png](https://i-blog.csdnimg.cn/blog_migrate/a3ce067cc30b102475dbabc879d6603b.jpeg)
注意:递归函数会复制函数变量,占用较多的内存空间,所以不是必须要用递归函数,尽量用其他方法替代
lambda函数
lambda可以创建一个匿名函数
![7f7bdbbd949a3c4dcabc133751b1d028.png](https://i-blog.csdnimg.cn/blog_migrate/17520d49b0fffe4fd66e0c9efc95fca8.jpeg)
或者
![08fd9fae5b219c4bca12f2573a574d22.png](https://i-blog.csdnimg.cn/blog_migrate/955c32ce4286856dd128c162ab221f44.jpeg)
Generator函数
Generator的作用是每次产生一个数据项,然后使用__next__()来依次输出
![f37ec732dadc4f7a2372df12104ef190.png](https://i-blog.csdnimg.cn/blog_migrate/8296bc5c81a6bd3cf34d5c4ab733132f.jpeg)
return返回值之后,函数会结束,而使用__next__()的话,程序并不会结束,可以使用__next__()继续输出下一个返回值,Generator可以使用于异步操作,当其他操作结束时再进行操作,而且可以占用更少的内存,从而达到优化程序的目的