• python基础之函数对象,嵌套,名称空间和作用域


    函数对象:

    函数是第一类对象的含义是函数可以被当作数据处理

    函数可用于:

             def func():

                      print(‘func’)

             1.引用  f = func  把内存地址赋值给f

             2.当作参数传给一个函数    def foo(func)

             3.当作函数的返回值    return func

             4.可以当作容器类型的元素                 l =[func,1,2]

    #函数嵌套的定义:
    def f1():
        def f2():
            def f3():
                print('from f3')
            f3()
        f2()
    
    f1()
    #函数嵌套调用:
    def max(x,y):
        return x if x > y else y
    
    	def max4(a,b,c,d):
        	res1=max(a,b)
        	res2=max(res1,c)
       		res3=max(res2,d)
        	return res3
    	print(max4(1,2,3,4))
    

      

    名称空间和作用域

    1.名称空间

             存放名字和值的绑定关系的地方  (存值的内存地址)

    2.名称空间的三大类

             ①内置名称空间:存放python解释器自带的名字

                                       解释器打开生效,关闭失效

             ②全局名称空间:除了内置和局部的就是全局

                                       文件运行时生效,执行完毕失效

             ③局部名称空间:用于存放函数调用期间函数体产生的名字

                                       文件执行中调用某个函数时生效,函数执行完失效

    总结:三种名称空间的加载顺序:内置名称空间-全局名称空间-局部名称空间

               名称空间查找顺序:基于当前位置,自下向上找

    3.作用域

             作用域指的是区域、范围,作用域即作用的范围

             全局作用范围:全局作用域(内置名称空间和全局名称空间)

                      全局有效,全局存活

             局部作用范围:局部作用域(局部名称空间)

                      局部有效,临时存活

             作用域关系是在函数定义阶段就固定死了,但凡调用函数都需要跑到定义阶段判断作用域关系

    x = 1
    def f1():
        print(x)
    der f2():
        x = 11
        f1()
    f2()

    结果为1

      

    nonlocal  改局部,函数内往外找,没有就报错

    global      改全局,没有也不会报错

    在局部改全局可变类型,可以直接改

    在局部改全局不可变类型,需要声明global,声明为全局的变量就可以直接修改了

  • 相关阅读:
    笔试面试题集锦
    Mosquitto pub/sub服务实现代码浅析-主体框架
    查找算法(一)
    基数排序
    插入排序-----希尔排序
    插入排序------直接插入排序
    归并排序
    选择排序--------简单选择排序
    交换排序------冒泡排序
    排序算法
  • 原文地址:https://www.cnblogs.com/luck-L/p/9150185.html
Copyright © 2020-2023  润新知