您的位置:首页 > 编程语言 > Python开发

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)

三、名称空间

  1. 名称空间Namespaces:指的就是存放名字与值内存地址绑定关系的地方(内存空间)

  2. 名称空间分为三大类
    内置名称空间: 存放的是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
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: