Python-函数对象、函数嵌套、名称空间与作用域
2018-09-26 18:50
405 查看
一、函数对象
函数是第一类对象:指的是函数的内存地址可以像一个变量值去使用
1.变量值可以被引用
def foo(): print('from foo') f=foo print(f) #<function foo at 0x00000000022A8AE8> →函数的内存地址 f() #from foo
2.变量值可以当做参数传给另外一个函数
def foo(): print('from foo') def bar(x): print(x) bar(foo) #<function foo at 0x00000000001F1E18> foo() # from foo
3.变量值可以当做参数的返回值
def foo(): print('from foo') def func(x): return x f=func(foo) print(f)
4.变量值可以当做容器类型的元素
def foo(): print('from foo') list1=[foo] print[list1] list[0]() #from foo
二、函数的嵌套
from math import pi def circle(radius,action): def cal_perimeter(): return 2 * pi * radius def cal_area(): return pi * (radius ** 2) if action == 1: res=cal_perimeter() elif action == 2: res=cal_area() return res res=circle(10,1) print(res)
三、名称空间
-
名称空间Namespaces:指的就是存放名字与值内存地址绑定关系的地方(内存空间)
-
名称空间分为三大类
内置名称空间: 存放的是python解释器自带的名字
产生:python解释器的启动则产生
销毁:python解释器关闭则销毁全局名称空间: 在顶级定义的名字
产生:执行python程序时产生
销毁:python程序执行完毕后则销毁局部名称空间: 在函数内定义的名字
产生: 在函数调用时临时产生
销毁: 在函数调用完毕后则销毁
三种名称空间的产生的先后顺序: 内置->全局->局部
查找名字的顺序:从当前位置往外一层一层查找
如果当前在局部名称空间: 局部->全局->内置
如果当前在全局名称空间: 全局->内置
len=111 def foo(): len=222 print(len) foo() #222
x=0 def f1(): x=1 def f2(): x=2 def f3(): x=3 print(x) f3() f2() f1() #3
3.二 作用域:指的是作用范围
全局作用域:包含内置与全局名称空间的名字
特点:全局存活,全局有效
局部作用域:包含局部名称空间的名字
特点:临时存活,局部有效
!!!作用域关系是在函数定义阶段就已经固定死了,与调用位置无关 示范一: def f1(): print(xxx) xxx=111 def f2(): xxx=222 f1() f2() #111 示范二: xxx=111 def f1(): print(xxx) yyy=222 print(yyy) f1() #111 222阅读更多
相关文章推荐
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域(装饰器基础)
- python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象
- 函数对象、函数嵌套、函数的名称空间与作用域
- Python(名称空间、函数嵌套、函数对象)
- Python开发基础-Day6-函数参数、嵌套、返回值、对象、命名空间和作用域
- 函数对象、函数嵌套、名称空间与作用域、装饰器(day3)
- 函数对象、函数嵌套、名称空间与作用域、装饰器
- python基础之函数参数、嵌套、返回值、对象、命名空间和作用域
- 函数对象、函数嵌套、名称空间与作用域、装饰器
- python函数篇:名称空间、作用域和函数的嵌套
- 函数对象、函数嵌套、名称空间与作用域、装饰器
- 搞懂Python的类和对象名称空间
- 一篇文章搞懂Python的类与对象名称空间
- python基础:名称空间与作用域
- Python 名称空间与作用域
- 5.1 Python 函数-默认参数,*args,**kwargs的使用;作用域-局部空间使用全局变量需要注意的事项等
- 根据字符串名称动态调用Python的函数和对象方法
- 王亟亟的Python学习之路(10)-函数对象的作用域,函数作为返回值,闭包
- 【Python模块】functools —— 作用于可调用对象的高阶函数集合
- python基础之类和对象、对象之间的交互、类名称空间与对象/实例名称空间