建设网站的视频下载,如何给网站做推广,南京响应式网站建设,宣传网站建设实践报告函数对象#xff1a; 函数是第一类对象#xff0c;即函数可以当做数据传递 1 可以被引用 2 可以当做参数传递 3 返回值可以是函数 #xff08;函数名 不带#xff08;#xff09; 就是函数名的内存地址#xff0c;带括号就是执行函数#xff09; 4 可以当做容器类型的…函数对象 函数是第一类对象即函数可以当做数据传递 1 可以被引用 2 可以当做参数传递 3 返回值可以是函数 函数名 不带 就是函数名的内存地址带括号就是执行函数 4 可以当做容器类型的元素 def foo():print(foo)def bar():print(bar)dic{foo:foo,bar:bar,
}
while True:choiceinput(: ).strip()if choice in dic:dic[choice]() def func(): # func函数的内地址 print(from func) age10# 1. 可以被引用# xage# print(x,age)# ffunc# print(f)# f()# 2. 可以当作参数传给另外一个函数# def bar(x):# print(x)# bar(age)# bar(func)# 3. 可以当作一个函数的返回值# def bar(x): # return x# resbar(age)# print(res)# resbar(func)# print(res)# 4. 可以当作容器类型的元素# l[age,func,func()]# print(l) 利用函数的特性取代多分支的if def foo():print(foo)def bar():print(bar)dic{foo:foo,bar:bar,
}
while True:choiceinput(: ).strip()if choice in dic:dic[choice]() 函数的嵌套 函数的嵌套定义一个函数内部又定义了另一个函数
def f1():def f2():def f3():print(from f3)f3()f2()f1
f3 #报错 空间与作用域函数的嵌套调用 在调用一个函数过程中内部代码又调用了其他函数
def max(x,y):return x if x y else ydef max4(a,b,c,d):res1max(a,b)res2max(res1,c)res3max(res2,d)return res3
print(max4(1,2,3,4) 名称空间与作用域 什么是名称空间 存放名字的地方三种名称空间内置 全局 局部 名称空间的加载顺序 python test.py 1 python解释器先启动因而首先加载的是内置空间 2 执行test.py文件然后以文件为基础加载全局名称空间 3 执行文件的过程中如果调用函数则临时产生局部名称空间 名字的查找顺序 局部名称空间———》全局名称空间——》内置名称空间 (在全局无法查看局部的在局部可以查看全局的 # max1
def f1():# max2def f2():# max3print(max)f2()
f1()
print(max) 作用域 #1、作用域即范围- 全局范围内置名称空间与全局名称空间属于该范围全局存活全局有效- 局部范围局部名称空间属于该范围临时存活局部有效
#2、作用域关系是在函数定义阶段就已经固定的与函数的调用位置无关如下
x1
def f1():def f2():print(x)return f2
x100
def f3(func):x2func()
x10000
f3(f1())#3、查看作用域globals(),locals()
LEGB 代表名字查找顺序: locals - enclosing function - globals - __builtins__
locals 是函数内的名字空间包括局部变量和形参
enclosing 外部嵌套函数的名字空间闭包中常见
globals 全局变量函数定义所在模块的名字空间 将局部变量的作用域提升至全局作用域可以用来在局部修改全局的不可变类型
builtins 内置模块的名字空间nonlocal 声明一个名字是来自于当前层外一层作用域的可以用来在局部修改外层函数的不可变类型将L 与 E 中的名字统一需要提前定义 名字的查找顺序在函数定义阶段就已经固定死了及在检测语法是就已经确定了名字的查找顺序与函数的调用位置无关也就是说无论在任何地方调用函数都必须回到当初定义函数的位置去确定名字的查找关系 x111
def outer():def inner():print(from inner,x) # x访问的时全局名称空间中xreturn innerfouter() function outer.locals.inner at 0x00000000021DB6A8
print(f) from inner 222x222
f() 222 访问时全局的x已经被重新赋值了x111
def outer():def inner():print(from inner,x) # x访问的时全局名称空间中xreturn innerfouter() from inner 444 全局被重新赋值为444# x222
def func():x333f()x444func() func-f-outer-x 全局变量 444 from inner 444 转载于:https://www.cnblogs.com/lakei/p/10636639.html