函数名称空间与作用域
函数对象
"""
1.函数可以被赋值
2.函数可以当作参数传给另外一个函数
3.函数可以当作函数的返回值
4.函数可以当作容器类型的元素
"""
def foo():
print(‘from foo‘)
def bar(f):
f()
bar(foo)
函数嵌套
# 函数的嵌套调用
def foo():
print(‘from foo‘)
def bar():
foo()
bar()
"""
不想给外界展示的函数可以封装在一个大函数里
"""
# 嵌套定义
"""
可以把一个大的功能拆分成一个一个的小的功能
"""
名称空间与作用域
内置名称空间:存放的是解释器自带的
解释器启动则产生,解释器关闭销毁
全局名称空间:存放的是*的名字
运行python文件则产生,python文件运行结束则销毁
局部名称空间:存放的是函数内的名字
调用函数则产生,函数运行结束就会销毁
"""
结论1:
名字的查找优先级
局部-->全局-->内置
基于自己当前所在位置向外查找,, LEGB(L:当前,E:外层函数, G:全局, B:内置)
"""
# len = 1
def foo():
# len = 2
print(len)
foo()
"""
名称空间的嵌套关系是以函数定义阶段为主的,与调用位置无关,而且在函数定义检测语法的时候,就已经生成函数值对的一个查找顺序
"""
例一:
x = 1
def foo():
print(x)
def bar():
x = 2
foo()
bar()
global关键字
"""
局部改全局
"""
x = 1
def foo():
x = 111
print(x)
foo()
print(x)
=====================>
111
1
x = 1
def foo():
global x
x = 111
print(x)
foo()
print(x)
============================>
111
111
nonlocal
"""
声明一个外层的函数,如果外层没有不会找全局,会报错
"""
x = 1
def f1():
x = 22
def f2():
nonlocal x
x = 333
print(x)
f2()
print(x)
f1()
======================>
333
333
作用域
全局作用域:
全局存活,全局有效
内置名称空间,全局名称空间
局部作用域:
临时存活,局部有效
局部临时空间
闭包函数
闭函数: 定义在函数内部的函数
包函数: 内部函数引用了一个外层函数的名字
闭包函数的作用就是提供了一种新的给函数传参的方式
(1) 直接使用形参
(2) 闭包函数
def index(x):
def wrapper():
print(x)
return wrapper
wrapper = index(1)
wrapper()
内置函数
help:
>>> def func():
... """
... 这是一个很厉害的函数
... """
... pass
...
>>> help(func)
Help on function func in module __main__:
func()
这是一个很厉害的函数
max:
求最大值
min: 求最小值
reversed:
生成一个“老母鸡”
>>> reversed([111,22,33,444,‘qwe‘])
<list_reverseiterator object at 0x000002A2300578B0>
round:
>>> round(3.6)
4
sum:
求和
__import__:
字符串形式导入模块
>>> __import__(‘time‘)
<module ‘time‘ (built-in)>
函数名称空间与作用域