一、函数对象
函数是第一类对象:指的是函数的内存地址可以像一个变量值去使用
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程序执行完毕后则销毁局部名称空间: 在函数内定义的名字
产生: 在函数调用时临时产生
销毁: 在函数调用完毕后则销毁
三种名称空间的产生的先后顺序: 内置->全局->局部
查找名字的顺序:从当前位置往外一层一层查找
如果当前在局部名称空间: 局部->全局->内置
如果当前在全局名称空间: 全局->内置
扫描二维码关注公众号,回复:
5362159 查看本文章
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