首页 > 代码库 > python函数
python函数
python函数学习
1. 概述:
函数是重用的程序段,用关键字def来定义,可以任意多次地运行这个语句块,被称为调用函数。Python提供了许多内建函数,比如print(),也可以自己创建函数,这被叫做用户自定义函数,函数能提高应用的模块性,和代码的重复利用率。
2、函数语法:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
3. 函数的参数:
(1). 形参与实参、位置参数。
(2). 默认参数。
(3). 关键字参数。
(4). Varargs参数:
有时,你或许想定义一个能获取任意个数参数的函数,这可通过使用 * 号来实现。
当我们定义一个带星的参数,像 *param 时,从那一点后所有的普通参数被收集为一个叫做 ’param’ 的元组。
同样的,当我们定义一个带两个星的参数,像 **param 时,从那一点开始的所有的关键字参数会被收集为一个叫做 ’param’ 的字典。
Varargs参数也叫收集参数,有很多使用的小规则小技巧,如:Python中函数参数的设置是有顺序的,不然的话很有可能报错。具体的问题都很
简单,即使实践中发生了,也很容易相同和改正。
(5). Keyword-only参数:
如果想指定特定的关键参数为 keyword-only 而不是位置参数,可以在带星的参数后申明。(亲测不可以在带两个星后面申明关键字参数或普通参数).
如果你想使用keyword-only 参数,但又不需要带星的参数,可以简单地使用不使用名字的空星,如def total(initial=5, *, vegetables) 。
3. 变量的作用域、生存期或可见性:
Python中的变量根据作用域分为全局变量,局部变量,非局部变量。仅从字面意义上就可以直观地理解变量的作用域和定义的位置的关系。
如果实在是想在函数体内对全局变量或者非局部变量进行修改,可以采用 global 语句和 nonlocal 语句(nonlocal语句是Python3的新特性,
在旧的Python中只能考虑用列表代替变量, 好像与变量的储存及屏蔽机制有关,有待深入的学习)。
4. 函数的Docstrings:
由于文档字符串帮助的程序文档更加简单易懂,应该尽量使用它。你甚至可以在程序运行的时候,从函数恢复文档字符串!
在函数的第一个逻辑行的字符串是这个函数的文档字符串。
文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。最好在自己的函数中
使用文档字符串时遵循这个惯例。
可以使用__doc__ (注意双下划线)调用 printMax 函数的文档字符串属性(属于函数的名称)。请记住Python 把每一样东西都作为对象,包括这个函数。
还可以使用help(printMax)。
5. 函数的return语句
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None
函数碰到return,立即结束这个函数
调用完函数后,返回计算的结果值
函数可以没有返回值,默认返回None
如果函数的处理需要在别的地方用到,需要给函数返回值
如果函数return多个值,它会把多个值放到一个元组中去
6. 内嵌函数和闭包:
内嵌函数,就是定义在函数体内的函数,也称内部函数。
闭包是一种内嵌函数,简单地说,闭包就是根据不同的配置信息得到不同的结果。闭包往往有以下特点,内嵌函数调用自身函数体外且在外部函数内的变量,
就是非局部变量,包含闭包的外部函数往往返回的是闭包的函数名。
7. lambda表达式:
lambda表达式即匿名函数。只能由一行组成。如 g = lambda x :x * x。冒号前面是参数,可以有一个或多个参数,冒号后面是函数返回值,用表达式表示,
有且仅能有一个表达式。lambda表达式可以使代码更精简,增强可读性,把某些简短且需多次调用的函数写成匿名函数可以大大提高程序运行的效率。
Python3中lambda表达式经常用于排序。
python函数