zoukankan      html  css  js  c++  java
  • Python3 的内置函数和闭包

    1、global 关键字

      如果在函数内部需要修改全局变量那么需要使用global关键字

    x=1
    def mfun():
        global x
        x=2
        print(x)
    >>> mfun()
    2

    2、内嵌函数(内部函数)

      内部函数的的作用域在外部函数作用于之内,及只能在外部函数内调用内部函数

    def outside():
        print("正在调用outside")
        def inside():   
            print("正在调用inside")
        inside()
    outside()
    inside()#这句话是错的
    
    正在调用outside
    正在调用inside
    Traceback (most recent call last):
      File "C:UsersENVYDesktoplearnning Python	ext.py", line 7, in <module>
        inside()
    NameError: name 'inside' is not defined

    3、闭包(closure)

    def line_conf():
        def line(x):
            return 2*x+1
        return line       # return a function object
    
    my_line = line_conf()
    print(my_line(5))
    def line_conf():
        b = 15
        def line(x):
            return 2*x+b
        return line       # return a function object
     
    b = 5
    my_line = line_conf()
    print(my_line(5))    # 返回25

    在内部函数中只能对外部函数的局部变量进行访问,但是不能修改,如果需要修改则需要用到nonlocal关键字,委屈求全可以使用“容器类型”代替

    def line_conf():
        b = 15
        def line(x):
            nonlocal b
            b=20
            return 2*x+b
        return line       # return a function object
     
    b = 5
    my_line = line_conf()
    print(my_line(5))     #返回30
    def line_conf():
        b = [15]
        def line(x):
            b[0]=20
            return 2*x+b[0]
        return line       # return a function object
     
    
    my_line = line_conf()
    print(my_line(5)) #返回30
  • 相关阅读:
    jsTree获取选中节点和选中指定节点
    jsTree的checkbox默认选中和隐藏
    ElasticSearch 报错 failed to obtain node locks
    jstree单选功能的实现方法
    layui 报错 jQuery is not defined
    ssdb make 失败 autoconf required
    No package gcc48-c++ available
    查看yum已安装的包
    PHP 生成 UUID
    [构造][dfs树][树的重心][LOJ#3176]「IOI2019」景点划分
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/8366928.html
Copyright © 2011-2022 走看看