• Day4_名称空间与作用域


    函数嵌套:

    函数的嵌套调用:在调用一个函数的过程中,又调用了了另外一个函数 
    比如说比较多个值的大小,可以利用这种方法
    def max2(x,y):
        if x > y:
            return x
        else:
            return y
    
    def max4(a,b,c,d):
        res1=max2(a,b)
        res2=max2(res1,c)
        res3=max2(res2,d)
        return res3
    
    print(max4(1,2,3,4))
    
     
    函数的嵌套定义:在一个函数的内部,又定义了另外一个函数。 
    名称空间: 存放名字的地方,准确的说名称空间是存放名字与变量值绑定关系的空间。
    分为三种空间:
    内置名称空间: python自带的名字,在python解释器启动时产生,存放一些python内置的名字。
    全局名称空间: 在群居都能使用的定义,在执行文件时,存放文件级别定义的名字。
    局部名称空间: 在执行文件的过程中,如果调用了函数,则会产生该函数的局部名称空间。用来存放该函数内定义的名字。在函数调用时生效,在函数调用结束后失效。

    加载顺序; 内置---》全局-----》局部
    定义的名字查找顺序:自下而上的查找
    当定义了两个相同的函数,以后定义的为准:
    def func0():
        print('1111111')
    def func0():
        print('2222222')
    
    func0()
    
    
    

    作用域:作用的范围
    全局作用域:全局存活,全局有效
    局部作用域:临时存活,只能在函数内访问

    global 和 nonlocal  关键字: 
    x=1
    def f1():
        global x  #意思是在局部改掉全局的变量或者定义
        x=2
    f1()
    print(x)
    
    如果全局是可变类型的时候,可以改变全局类型
    l=[]
    def f2():
        l.append('f2')
    f2()
    print(l)
    



    改掉函数内部上一层的变量,只在函数内部有效,如果上层没有的话,再向上找,不能改掉全局的
    def f1():
        x=1
        def f2():
            x=2
            def f3():
                nonlocal x
                x=3
            f3()
        f2()
    f1()
    print(x)
    

    作用域
    关系,在函数定义的时候就已经固定好了,于调用位置无关。
    x=1
    def f1():
        def f2():
            print(x)
        return f2   #相当于函数当做返回值,这里没有括号
    #如果此时令func=f1(),即此时func=f2
    func=f1()
    print(func)
    
    
    
    
    
    
    
    
    


  • 相关阅读:
    ZOJ 2702 Unrhymable Rhymes(DP)
    unique() 去重函数
    HDU 4712 Hamming Distance(随机算法)
    HDU 4708 Rotation Lock Puzzle(模拟)
    HBase源代码分析之MemStore的flush发起时机、推断条件等详情(二)
    Androidproject师进阶之路 :《Android开发进阶:从小工到专家》上市啦!
    POJ1062 昂贵的聘礼(最短路)
    easyui required 提交验证
    leetcode
    【翻译自mos文章】在Oracle单机数据库中定义database service
  • 原文地址:https://www.cnblogs.com/sexiaoshuai/p/7240979.html
Copyright © 2020-2023  润新知