zoukankan      html  css  js  c++  java
  • 函数名称空间与作用域

    1.函数对象

    函数名指向的值可以被当作参数进行传递。

      1.函数名可以被传递,当函数被打印出来的结果是函数名的内存地址,可以通过加括号()来调用这个函数.

      2.函数名可以当做参数被传递给其他函数,在作参数被传递的时候,一定要注意函数后面不能有括号

      3.函数名可以被当做函数的返回值

      4.函数名可以被当做容器类型的参数。

    2.函数的嵌套调用

      在函数的内部调用其他函数,函数要想被调用,必须要变量名加冒号才可以访问到这个函数代码。

    def index():     #第一步
        func()        #第四步
        print('index')   #第五步
    def func():        #第二步
         print('func')  #第六步
    index()            #第三步  
    补充:同一级别的代码没有大小之分,按照从上往下的操作依次进行。

      通过镶嵌调用,可以将复杂的逻辑简单化。在整体的程序中只要定义好了某个函数,下面的代码中如果想使用这个功能,可以直接调用这个函数,能节省代码。

    函数内定义函数的应用场景:

      写一个函数,该函数用户可以通过传参的不同控制函数执行不同的功能。

    3.名称空间

    1.名称空间是指存放名字的地方,可分为内置名称空间,全局名称空间和局部名称空间。

      (1).内置名称空间指的python解释器就提前给定义好的名字,如len(),max(),min()等。

      (2).全局名称空间指文件级别的代码,无论if,for,while 嵌套多少层,它们内部所创建的名字都是全局名称空间的。

      (3).局部名称空间指函数体内创建的名字都属于局部名称空间,如username()。

      一般存放的是变量名与变量值的内存地址所绑定关系的地方。想要访问到一个变量的值,必须要先去名称空间中拿到对应的名字,然后才能访问到变量的值。

    2.名称空间的加载顺序

      (1)内置名称空间:只要python解释器启动就会立即创建,当python解释器关闭的时候,内置名称空间就会自动销毁。

      (2).全局名称空间:当右键点击py文件运行就会自动创建,py文件程序运行结束,全局名称空间就会自动销毁。

      (3).局部名称空间:函数被调用的时候自动创建  函数指向结束立即销毁(动态创建动态销毁)

    3.名字的查找顺序

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

      需要注意的是:在全局无法查看局部的,在局部可以查看全局的,如下示例

    max=1
    def f1():
        max=2
        def f2():
            max=3    #  f2()函数中包括max=3,跟print处于同一级别
            print(max)  
        f2()
    f1()
    print(max)
    >>>:3
    # 补充:函数在定义阶段查找名字的顺序就已经固定了,不会因为函数的调用位置变化而改变。

    4.作用域

    作用域分为两种,一种是全局作用域,一种是局部作用域。

      全局作用域只能在全局起作用。内置名称空间和全局名称空间属于全局有效。

      局部作用域只能在局部起作用。局部名称空间属于局部有效(动态创建,动态销毁)。

    #global  在局部修改全局的不可变类型,想修改多个可以用逗号隔开
    # x = []    因为列表是可变类型
    x = 1    #不可变类型
    def func()
        global x    #修改全局变量,而不是创建局部名称空间
        x = 666
    func()
    
    #nonlocal   局部修改局部
    def func():
        x = 1
        def index():
            nonlocal x   #想修改多个可以用逗号隔开
            x = 2
         index()
         print(x)
    func()    
  • 相关阅读:
    ECMAScript 6教程 (二) 对象和函数
    ECMAScript 6教程 (一)
    MongDB 批量更新
    Discuz模版与插件 安装时提示“对不起,您安装的不是正版应用...”解决方法
    命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)
    解决浮层弹出如何加上datepicker,并且浮动在上面
    Jquery DataTables warning : Requested unknown from the data source for row 0
    jquery.dataTables插件使用例子详解
    MVC @Html.DropDownListFor 默认值
    初探 ref 和 out
  • 原文地址:https://www.cnblogs.com/blue-tea/p/11165373.html
Copyright © 2011-2022 走看看