zoukankan      html  css  js  c++  java
  • 函数2

    一、命名空间

    1.命名空间一共有三种:

    内置命名空间

    全局命名空间

    局部命名空间

    2.三种命名空间之间的加载与取值顺序:

    加载:内置命名空间 >全局命名空间>局部命名空间

    调用:局部命名空间->全局命名空间->内置命名空间

    二、作用域

    1.全局作用域

      包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

    2.局部作用域

      局部名称空间,只能在局部范围生效

     


    小范围的可以用大范围的 但是大范围的不能用小范围的。
    范围从大到小
    在小范围,如果要用一个变量,是当前范围内有的,就用自己的,如果没有就用上一级的,以此类推
    如果都没有 ,报错
    globals 全局作用域的名字
    locals 局部作用域的名字

     

    global关键字:局部的变为全局的

     

    globals和locals方法

    在全局中调用

    print(globals())

    print(locals())

    在局部调用

    def func():
        a = 12
        b = 20
        print(locals())
        print(globals())
    
    func()
    a = 10
    def func():
        global a
        a = 20
    
    print(a)
    func()
    print(a)

    三、函数名的本质

    函数名本质上就是函数的内存地址

    就是一个变量,保存了函数所在的内存地址

    def func():
        print(func)
    f=func
    print(f)
         #打印出内存地址
    
    def func():
        name='egon'
        def func2():
            print(name)
        return func2()
    f=func()
       #打印出变量对应的值

     

     

    四、函数嵌套

    name='alex'
      
      def foo():
          name='lhf'
          def bar():
              print(name)
          return bar
      
     func=foo()
     func()

    nonlocal关键字

     1.外部必须有这个变量
    2.在内部函数声明nonlocal变量之前不能再出现同名变量
    3.内部修改这个变量如果想在外部有这个变量的第一层函数中生效
    def f1():
        a = 1
        def f2():
            nonlocal a
            a = 2
        f2()
        print('a in f1 : ',a)
    
    f1()

    五、闭包

    1.函数的闭包

    def func():
        name = 'eva'
        def inner():
            print(name)
        return inner
    
    f = func()
    f()

    闭包的意义:

    返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

    内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数

     

    判断闭包函数的方法‘_closure_’

    输出的__closure__有cell元素 :是闭包函数
    def func():
        name = 'eva'
        def inner():
            print(name)
        print(inner.__closure__)
        return inner
    
    f = func()
    f()
    
    #输出的__closure__为None :不是闭包函数
    name = 'egon'
    def func2():
        def inner():
            print(name)
        print(inner.__closure__)
        return inner
    
    f2 = func2()
    f2()

    闭包函数获取网络应用

    from urllib.request import urlopen
    
    def index():
        url = "http://www.xiaohua100.cn/index.html"
        def get():
            return urlopen(url).read()
        return get
    
    xiaohua = index()
    content = xiaohua()
    print(content)

  • 相关阅读:
    Mesos-DNS
    秒杀系统
    Springboot配置Druid多数据源
    Android vitals 帮您解决应用质量问题
    Android vitals 帮您解决应用质量问题 (下篇)
    Android Sunflower 带您玩转 Jetpack
    Android Smart Linkify 支持机器学习
    Android Pie SDK 与 Kotlin 更合拍
    Android P 中的新文本特性
    Android P Beta 2 及终版 API 强势来袭!
  • 原文地址:https://www.cnblogs.com/yifugui/p/7240241.html
Copyright © 2011-2022 走看看