python中的函数
来源:互联网 发布:2016网络诈骗事件 编辑:程序博客网 时间:2024/06/07 11:00
函数分类:
内置built_in:len、max、min、sum、abs......自定义:
def 函数名(参数1,参数2,参数3,):
注释
函数体
函数名 指向 函数体,这一点和定义变量是一样的。
定义函数:
注意:定义阶段只检测语法,不执行。
定义函数的三种形式:
- 定义无参函数 def func(): 不依赖外部参数(一般无返回值)
- 2 定义有参函数 def func(x, y, z...) 函数的执行依赖外部参数(一般有返回值,即定义return。例如系统内建的函数len()
如果不绑定返回值,用一次,python就回收内存。如果将返回值绑定一个变量,这样就将返回值保存下来了,可以重复使用多次,否则每次都调用函数来给出一个返回值,慢)
- 3 定义空函数
def func():
pass
空函数用途:构建程序
调用函数:
- func () 调用函数的语句形式(不需要返回值的):调用函数时,先找函数名func,再()执行代码
- res = func()
print(res)
调用执行函数的返回值
- 函数return返回值
几种形式:
1 不写return,默认return None
2 返回值没有类型限制:int、str、dict、、、
3 返回多个值,元组形式:
return(元素1、元素2),python中不加括号也默认返回元组
return的效果:终止函数的执行。因此return只能执行一次(返回一次值)。可以通过if多分支return多种值。
函数的参数:
python弱类型语言,函数可以传入任何参数:
形参与实参(形参相当于变量名,实参相当于变量值)
在函数调用时,形参绑定实参,才开始占用内存。
- 位置参数:按照从左到右的顺序依次定义的参数:
按位置定义的形参,必须被传值,多一个不信,少一个也不信;
按位置定义的实参,必须与形参一一对应。
- 关键字参数:实参在定义时,按key=value形式定义。打破位置限制。
注意(语法要求):
位置实参和关键字实参可以同时使用;
位置实参必须在关键字实参的前面;
位置形参不能被重复传值
- 默认参数:def func(x, y=10) 函数定义阶段,为形参赋值
注意 :
默认参数必须放在位置形参后面(语法要求) ;
值经常变化的需要定义为位置形参;
值大多数情况下不变,定义为默认参数更好;
默认参数通常定义为不可变类型;
默认参数只在定义时被赋值一次 - 可变长参数(实参个数可变):
- *将多余的实参接收,转为元组,赋值给args保存下来按位置定义的可变长度的实参:*接收位置参数
- 按关键字的实参:**接收关键字参数
**将多余的关键字实参接收,转为字典,赋值给kwargs,以字典的方式保存下来
可接受任意形式,任意长度的参数 :
- 命名关键字参数:
定义在*后的形参:必须被传值(否则报错),而且要求实参必须是以关键字的方式来传值;命名关键字参数也可以定义默认值。
应用:用户登录指定输入项: - 几种形参的位置排列:
位置形参,默认参数,*args, 命名关键字参数,**kwargs
名称空间与作用域:
- 名称空间(namespace):存放名字与值的绑定关系(python中用字典存)
- 内置名称空间:python解释器自带的名字,解释器启动,就会生成该空间 e.g. print、abs、sum、......
- 全局名称空间:文件级别定义的名字,执行python文件时产生该空间,文件执行完了,全局失效。非局部名称空间的都是。
- 局部名称空间:定义在函数内部的名字,局部名称空间只有在函数调用时生效,调用结束,失效。
- 三者的加载顺序:内置=》全局=》局部
- 取值顺序:局部 =》全局=》内置 (从当前级往上级找),即函数调用时,先找函数内的局部名称空间,如果局部没有,就从全局找,最后从内置找
- 作用域:
- 全局作用域:内置名称空间和全局名称空间中存的名字的作用范围为全局,即在整个文件的任意位置都能被引用。
- 局部作用域:局部名称空间中存的名字的作用范围;只在函数内部可以被引用。
- 找名字(变量名)从作用域找。当前级别开始往上找:max = 20
def func():
max = 10
print(globals()) # 打印全局作用域的名字
print(locals()) # 打印局部作用域的名字func() # 执行func函数运行结果是:{'__name__': '__main__', 'max': 20, 'func': <function func at 0x00000178CD86E9D8>}{'max': 10}以上结果,是在局部这一层开始找。第一个字典是全局作用域的名字,包括内置的名字和在全局自定义的名字 max 和 func 。第二个字典是局部作用域的名字,即在函数内定义的 max。
全局的局部仍然是全局:
关键字global和nonlocal:
上面的语句执行后,字典、列表的内容都更改了,而salary仍然是1000。这是因为:
列表和字典这类的可变类型,我们可以更改里面的元素。尽管如此,列表和字典的id和类型都没变,内存空间里的值变了。
而这里定义的salary = 1000 是数字,不可变类型。在函数内容对其重新赋值,只能开辟新的内存空间,产生一个新的salary来存放这个值。
如果想实现对不可变类型的全局修改,要在局部声明 global salary,让局部的那个变量成为全局变量。
nonlocal 关键字:可以在局部的层级修改到上一层级变量的值,但是不改变全局的值。x = 100def func(): x = 55 def func2(): nonlocal x x = 66 print(x) func2() print(x)func()print(x)
结果如下:
55
66
100
函数嵌套:
- 函数嵌套定义:
定义函数相当于定义变量,所以定义在函数内部的函数在外面看不到。更执行不到。 - tips: 在python中,函数是第一类对象,指函数可以被当作数据传递:可被引用;可被当作函数的参数;func1可做func2函数的返回值(返回函数func1的内存地址;函数的内存地址后面加()就可以执行):可被当作容器类型的元素:这样我们可以将函数放在字典中,实现模块化编程。
- 闭包函数:函数内部定义的函数。
阅读全文
0 0
- [Python]Python函数参数中的*,**
- Python:python中的随机数函数
- python中的exec 函数
- python中的函数对象
- python中的lambda函数
- Python中的一些函数
- python中的reduce函数
- Python函数参数中的*,**
- Python中的range()函数
- python中的专有函数
- python 中的函数
- Python中的随机函数
- Python中的函数柯里化
- Python中的main函数
- python中的lambda函数
- Python中的函数
- Python中的range函数
- python中的property函数
- POJ 2099 Fool's Day 笔记
- app或者android library调用android library之activity
- 汇编语言期末复习题
- android 控制对话框的宽度,背景透明的问题
- DNN深度神经网络 的原理 以及 使用
- python中的函数
- tomcat
- J7613
- HBase的异常(二)
- Majority Element
- JSTL
- 复用的理解
- 发发发
- python3实现UDP协议的简单服务器和客户端