zoukankan      html  css  js  c++  java
  • 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,声明为全局的变量就可以直接修改了

  • 相关阅读:
    linux学习(三)输入输出重定向和管道功能、cat命令、more命令
    linux基础学习(二)ls命令以及文件访问权限例(-rw-r-r--)
    c语言的全排列
    linux基础学习(一)常用命令:date、pwd、cd、cal、who、wc等等
    用linux编译并运行c文件
    安装linux虚拟机
    安装quickLook插件以及解决如何不能读取offic问题
    java:数据结构(四)二叉查找树以及树的三种遍历
    java:数据结构复习(三)链表队列
    数据结构java学习(三)循环队列
  • 原文地址:https://www.cnblogs.com/luck-L/p/9150185.html
Copyright © 2011-2022 走看看