python的局部变量作用域疑问

def show():

    # 本来以为要先在这里初始化一下,结果开发工具提示请删掉 
    # count = 0
    
    if False:
        count = -1
    else:
        count = 1
    print(count)


show()
# print(count)

这个count没有提前申明,为什么print里可以读取到呢?
硬要解释也是能解释通,就是countif的逻辑里被注册到方法里了。
js的不一样,js会注册到全局window里,这样外层都可以访问到。

阅读 2.1k
2 个回答

你这个代码,默认是走True的逻辑,所以count一定存在。

可以改成下面的形式

def show(count, flag):
    if not flag:
        count -= 1
    else:
        count = 1
    print(count)
    
show(1, false)

一般语言都有块级作用域,像js,java这种有大括号形式的都是,而python是没有这种作用域的,建议你去熟悉python的四种作用域LEGB.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题