找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1606|回复: 2

[求助] 关于局部变量的问题

0

主题

0

帖子

0

积分

贫民

积分
0
velscode 发表于 2019-3-25 10:59:30 | 显示全部楼层 |阅读模式
本帖最后由 velscode 于 2019-3-25 11:01 编辑
  1. def f1():
  2.     i=1   
  3.     def f2():      
  4.         i=i+1
复制代码

类似这样的代码会报

UnboundLocalError: local variable 'i' referenced before assignment
我的想法是f2中修改f1-i的值

但是我让解释器不理解f2-i是否就是f1-i了,是吗?

请问这样的逻辑错误在哪里?应该如何修改?谢谢





回复

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
help 发表于 2019-3-25 21:37:01 | 显示全部楼层
内部函数,不能修改全局变量但可以访问全局变量
内部函数,在尝试修改同名全局变量时,Python 会认为它是一个局部变量,并引发 UnboundLocalError
在内部函数修改同名全局变量之前尝试访问变量名称(如: print l; l = l + 1),也会引发 UnboundLocalError
摘抄别人的回答,但基本上就是这个意思
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2019-3-25 22:10:28 | 显示全部楼层
本帖最后由 sheeboard 于 2019-3-25 22:11 编辑

nonlocal关键词。

def scope_test():
      def do_local():
            spam = "local spam"

      def do_nonlocal():
            nonlocal spam
            spam = "nonlocal spam"

      def do_global():
            global spam
            spam = "global spam"

    spam = "test spam"
    do_local()
    print("After local assignment:", spam)
    do_nonlocal()
    print("After nonlocal assignment:", spam)
    do_global()
    print("After global assignment:", spam)

scope_test()
print("In global scope:", spam)

结果
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表