Python全栈学习Day10 函数进阶:命名空间 作用域 闭包
昨日内容复习
函数返回值
没有返回值
1.不写return 函数执行完毕自动结束
2.只写return 结束函数
3.return none
返回一个值
结束函数且返回一个值
返回多个值
多个值用逗号隔开,可以用一个变量(元祖)或等量的变量接收。
参数
形参
位置参数(按顺序)
*args 动态参数,可以接收任意多个位置参数
默认参数 可以不传
**kwargs 动态参数,可以接收任意多个按关键字传入的参数
如果默认参数的值是一个可变数据类型,那么每次调用函数的时候,如果不传值就公用这个数据类型的资源
def func(l = []): l.append('1') print(l) func() func() func()
实参
按照位置传参
按照关键字传参
今日内容 函数进阶
命名空间和作用域
全局命名空间
是程序从上到下被执行的过程中依次加载到内存
放置了我们设置的所有变量名和函数名
局部命名空间
函数内定义的名字
当调用函数时候才会产生此命名空间,当函数执行结束随之消失
内置命名空间
就是python解释器一起动就可以使用,比如print()
内置的名字在启动解释器的时候加载到内存里
在局部可以使用全局命名空间和内置命名空间
在全局可以使用内置,但不可以使用局部
作用域
全局作用域
内置和全局都属于全局作用域
局部作用域
对于不可变数据类型,在局部可以查看全局,但不能直接修改,若要修改,需要在局部上加个global(global尽量少用,不安全)
a =1 def func(): global a a += 1 print(a) func()
或者
a =1 def func(): a = 2 return a ret = func() print(ret)
locals()可以查看局部中所有变量,也可以查看全局的
根据locals的位置输出,在全局输出全局,在局部输出局部
globals()可以查看全局和内置中所有变量
只显示全局
a =1 def func(): a = 1 b = 2 print(locals()) func()
函数的嵌套和作用域链
函数嵌套调用
def max(a,b): return a if a>b else b def the_max(x, y, z): c = max(x, y) return max(c, z) ret = the_max(1, 2, 3) **print(ret)
函数嵌套定义
内部函数可以使用外部函数的变量
def outer(): a = 1 def inner(): print('inner') print(a) inner() outer()
nolocal用法类似global 只能用于局部变量,找上层离当前函数最近一层的局部变量
函数可以放在列表中这么用:
def func1(): print(1, 3, 3) func2 = func1 l = [func1, func2] for i in l: i()
函数名可以作为函数的参数
def func(): print(1, 3, 3) def func1(f): f() func1(func)
函数名可以作为函数的返回值
def func(): print(1, 3, 3) def func1(f): f() return f addrss = func1(func) addrss()
闭包
定义:是嵌套函数,内部函数调用外部函数的变量
验证:打印函数.closure,当结果前部分有cell就是闭包
def outer(): a = 1 def inner(): print(a) print(inner.__closure__) outer()
闭包最常用的形式
外部函数调用内部函数,不需要每次都重复生成外部函数的变量
def outer(): a = 1 def inner(): print(a) return inner address = outer() address()
小例子:
from urllib.request import urlopen def get_url(): url = urlopen('https://hao.360.cn/?a1004') # 打开网站 def inner(): ret = urlopen(url).read() print(ret) return inner get_func = get_url()
- Javascript学习笔记之函数篇(六) : 作用域与命名空间
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域(装饰器基础)
- 10-[函数进阶]-命名空间、作用域
- python基础之函数参数、嵌套、返回值、对象、命名空间和作用域
- Python全栈学习Day14 生成器函数进阶 推导式
- JavaScript权威设计--命名空间,函数,闭包(简要学习笔记十二)
- Javascript学习笔记之函数篇(六) : 作用域与命名空间
- 王亟亟的Python学习之路(10)-函数对象的作用域,函数作为返回值,闭包
- Python学习笔记:作用域和命名空间
- python____函数的命名空间和作用域
- Python进阶_关于命名空间与作用域(详解)
- python记录_day10 动态传参 命名空间 作用域
- 函数的命名空间,作用域,闭包等
- Python函数——命名空间与闭包
- Python开发基础-Day6-函数参数、嵌套、返回值、对象、命名空间和作用域
- python基础6之命名空间与作用域
- 5.1 Python 函数-默认参数,*args,**kwargs的使用;作用域-局部空间使用全局变量需要注意的事项等
- 基于Python函数的作用域规则和闭包(详解)
- 洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assign
- Python命名空间和作用域