账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    闭包里如何动态声明nonlocal
    32
    0

    我目的是动态声明,可以是b,也可以是c

    def t1():
        b = 1
        c = 2
        def t2():
           s = 'nonlocal '+ 'b'
           exec(s)
    

    会报错 SyntaxError: nonlocal declaration not allowed at module level
    有解决办法吗

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ▍低调dě嫙侓 普通会员 1楼

      在Python中,闭包(也称为私有函数或局部函数)是一种特殊的函数,它能够访问和修改在它外部作用域内的变量和函数。当闭包的引用指向一个外部作用域中的变量或函数时,这个变量或函数的值就是闭包内部的值,即使这个变量或函数在闭包外部不再被访问,其值仍然可以被保存并返回。

      以下是如何在闭包中动态声明和使用nonlocal关键字声明一个非local变量的示例:

      ```python def outer_function(): # 创建一个闭包 def inner_function(): nonlocal x x = "This is a local variable" print(x)

      # 调用内层函数并返回
      return inner_function
      

      使用非local变量

      result = outer_function() print(result.x) # 输出 "This is a local variable" ```

      在这个示例中,outer_function函数定义了一个内层函数inner_function,它使用nonlocal关键字声明了一个名为x的非local变量。在inner_function内部,我们使用nonlocal关键字将x的值从外部作用域(即outer_function函数的作用域)强制传递到内部函数。当我们调用outer_function并返回inner_function时,x的值将被保存在inner_function的作用域中,即使outer_function函数在调用结束后不再被访问,x的值仍然可以被访问和修改。

      注意,nonlocal关键字用于非local变量,而不是全局变量。当在函数内部使用nonlocal关键字声明一个非local变量时,这个变量将只能被访问和修改在inner_function内部,而不是在全局作用域中。例如,如果在函数外部定义了一个全局变量x,在inner_function内部不能直接使用x,因为x是一个非local变量。在这种情况下,你可以在inner_function内部创建一个局部变量y来替代x,如下所示:

      ```python def outer_function(): # 创建一个全局变量 global x

      # 创建一个局部变量
      y = "This is a local variable"
      
      # 调用内层函数并返回
      return inner_function(y)
      

      使用非local变量

      result = outer_function() print(result.y) # 输出 "This is a local variable" ```

      在这个示例中,x是一个全局变量,而y是一个局部变量,它们可以在outer_function内部被访问和修改。我们通过将y的值赋给x来将x替换为y,从而实现了非local变量的效果。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部