白白白白丶白 发表于 2020-6-30 15:03:09

变量作用域的问题

def foo():
    b = 'hello'
    def bar():
      c = True
      print(a)
      print(b)
      print(c)

    bar()

此处,我给a = 100,调用函数foo()这个a是全局变量吧? b和c是局部变量么

yhhpf 发表于 2020-6-30 15:16:27

本帖最后由 yhhpf 于 2020-6-30 15:19 编辑

是的
在函数内部的变量称为局部变量,他的作用域范围为函数内,也就是出了函数外就无效。

Twilight6 发表于 2020-6-30 15:27:29

本帖最后由 Twilight6 于 2020-6-30 15:29 编辑




这里你的 a 没看到在哪里赋值,想象空间可以很大....不能判断为什么变量

因为你如果a在其他函数内赋值 就算局部变量了,如果 a 在全局作用域赋值,那么就是全局变量

这里的b、c 对于 整个作用域来说是 局部变量 ,而 b 相对于 内嵌函数 bar() 来说是全局变量

全局变量有些时候也有相对之说哈~

白白白白丶白 发表于 2020-6-30 16:11:11

Twilight6 发表于 2020-6-30 15:27
这里你的 a 没看到在哪里赋值,想象空间可以很大....不能判断为什么变量

因为你如果a在其他函数内 ...

嵌套函数的c的值能改吗,试了半天,只能把全局的c改成True

阴阳神万物主 发表于 2020-6-30 16:12:31

用一个简单粗暴的方法告诉你:当变量的第一次被赋值时,它的左边没有能够被删除的空格或者制表符的时候,它就是全局变量,而其他的都叫局部变量。
缩进级不同的局部变量的关系,我认为能够用韦恩图表示,也就是包含与被包含的关系,缩进级靠左的能够在同级或者更右边被调用,更左边的缩进级则无法调用或者给它赋值。

Twilight6 发表于 2020-6-30 16:13:15

白白白白丶白 发表于 2020-6-30 16:11
嵌套函数的c的值能改吗,试了半天,只能把全局的c改成True



你是说外部能改内部的意思吗? 不能的哈


白白白白丶白 发表于 2020-6-30 16:20:48

Twilight6 发表于 2020-6-30 16:13
你是说外部能改内部的意思吗? 不能的哈

好吧

白白白白丶白 发表于 2020-6-30 16:21:27

阴阳神万物主 发表于 2020-6-30 16:12
用一个简单粗暴的方法告诉你:当变量的第一次被赋值时,它的左边没有能够被删除的空格或者制表符的时候,它 ...

好的,谢谢
页: [1]
查看完整版本: 变量作用域的问题