python 3 函数
函数是组织好的,可以被重复利用的,用来实现单一、或者相关联功能的一段代码。
函数能提高应用的模块性和代码的重复利用率,避免相同功能重复书写,节省空间。
定义一个函数
- 函数代码块以def关键字开头,后接函数名和():
- 任何传入参数必须放在()中,()中可以定义参数
- return表示函数结束,选择性地返回一个值(不选择返回值则默认为None)给调用方。
函数调用
需要调用自己定义的函数时,用函数名+()来调用()内可以传递参数
参数传递
- 位置传参
- 不定长参数
- 默认参数
- 关键字传参
命名空间和作用域
A、命名空间分为三种:
1.全局命名空间
2.局部命名空间
3.内置命名空间
三种命名空间的加载值顺序
1.全局命名空间——在运行程序时运行,不在函数内部,从上到下按顺序加载
2.局部命名空间——程序运行中,调用函数才加载
3.内置命名空间——运行程序之前已加载
三种命名空间的取值顺序
在局部调用:局部->全局->内置
在全局调用:全局->局部
B、作用域
作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域
全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被调用,全局有效
局部作用域:局部名称空间,只能在局部范围内生效
globals和locals方法
globals 在函数里后边跟变量可以更改对应全局的变量值
函数的嵌套和作用域链
A、函数的嵌套调用
B、函数的嵌套定义
C、函数的作用域链
D、nonlcoal关键字
# 1.外部必须有这个变量
# 2.在内部函数声明nonlocal变量之前不能再出现同名变量
# 3.内部修改这个变量如果想在外部有这个变量的第一层函数中生效
函数名的本质
函数名本质上就是函数的内存地址
1、可以被引用
2、可以被当作容器类型的元素
3、可以当作函数的参数和返回值(普通变量)
闭包
闭包函数:
内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数(两个或两个以上函数的嵌套,里边的函数有外边的函数的变量名)
例如:
def func(): name = ‘eva‘ def inner(): print(name)
#函数内部定义的函数称为内部函数
由于有了作用域的关系,就不能拿到函数内部的变量和函数了。如果就是想拿怎么办呢?返回!
知道函数内的变量我们要想在函数外部用,可以直接返回这个变量,那么如想在函数外部调用函数内部的函数呢?
是不是直接就把这个函数的名字返回就好了?
这才是闭包函数最常用的用法
闭包函数获取网络应用实例:
from urllib.request import urlopen def index(): url = "http://www.xiaohua100.cn/index.html" def get(): return urlopen(url).read() return get xiaohua = index() content = xiaohua() print(content)