函数名称空间与作用域

函数名称空间与作用域

函数对象

"""
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)>

函数名称空间与作用域

上一篇:ElasticSearch的深度分页


下一篇:闭包函数=函数对象+函数嵌套+名称空间与作用域