zoukankan      html  css  js  c++  java
  • 函数对象.函数嵌套,名称空间作用域

    函数对象

    函数使用方法

    之前说函数类似于变量,那么有些变量的使用方法在函数上也是适用的

    python中一切皆对象,我们可以对它获取内存地址或者打印类型或者其他的操作

    1. 引用,赋值

    def self_max(x,y):
        if x > y:
            return x
        return y
    
    a = self_max     #此时a就是函数self_max
    max_num = a(20,39)
    print(max_num)
    
    39
    

    2. 当作函数的返回值

    def f2():
        print('from f2')
    def f1():
        return f2
    
    print(f1())
    f = f1()    #因为调用f1函数返回值为f2,所以f = f1() = f2
    f()       #f2()
    
    <function f2 at 0x0000025DC8949378>
    from f2
    

    3. 当作函数的参数

    def f1():
        print ('from f1')
    def f2(m):
        return m
    
    f = f2(f1)      #以f1作为m进入函数f2,所以return  f1,所以f = f1
    f()
    
    from f1
    

    4. 作为容器元素的元素

    def f1():
        print('from f1')
        
    l = ['str',1,f1]
    l[2]()
    
    from f1
    

    函数的嵌套

    函数的嵌套可以对比循环的嵌套来看,循环的嵌套是在一个循环之内还有循环,函数的嵌套就是一个函数内还有一个函数

    def f1():
        def f2():
            代码块
        f2()
    f1()
    

    名称空间和作用域

    名称空间:存放名字的空间

    1. 内置名称空间

    内置名称空间就是在python启动的时候,就会定义出一些函数比如len(),存放在一块内存空间里,这个内存空间就叫做内置名称空间

    生命周期:python启动时产生,python关闭时结束

    2. 全局名称空间

    除了内置名称空间和局部名称空间,就是全局名称空间

    生命周期:程序/文件运行的时候产生,运行完毕就结束

    3. 局部名称空间

    函数内部就叫做局部,所以局部名称空间就是函数内部定义的名称存放的空间

    生命周期:函数运行的时候开始,这个函数结束就结束

    执行顺序

    内置名称空间--->全局名称空间--->局部名称空间

    查找顺序

    从当前名称空间开始查找,如果查找不到就逐步往上查找

    作用域

    全局作用域

    适用于全局+内置,即全局可以修改内置,内置可以修改全局

    局部作用域

    只能适用于局部范围(函数内部),在局部定义的名字只能在局部获取

    作用域关系在函数定义阶段就已经确定了

    函数与函数之间可能会有相同名字的变量,但这两个变量之间毫无关系,他们的作用域不同

    补充

    #global:从局部修改全局
    x = 100
    def f1():
        global x
        x = 1
    f1()
    print(x)
    
    1
    
    #nonlocal:把局部改成外部
    def f1():
        x = 1
        def f2():
            nonlocal x
            x = 3
        f2()
        print(x)
    print(f'xxx:{x}')
    f1()
    
    xxx:1
    3
    
  • 相关阅读:
    object对象
    addEventListener 和 attachEvent
    BOM常用对象
    动态原型
    鼠标移动图片放大效果(兼容IE8、多图)
    伪元素:before和:after
    javascript/js 判断是否安装flash player插件,提示安装方法。
    Form表单值转换为[{name:'',value}]键值对
    [转][网站、云服务与虚拟机]弄清负载均衡的机制
    C# Lazy Initialization
  • 原文地址:https://www.cnblogs.com/acate/p/10951482.html
Copyright © 2011-2022 走看看