Python 中线程 run()函数竟然可以使用主函数中的变量???

2018 年 9 月 17 日
 lonisletend


为什么 run()函数中可以用 value ??? 路过的懂的麻烦解释一波,十分感谢!!!

4486 次点击
所在节点    Python
15 条回复
Mistwave
2018 年 9 月 17 日
了解一下 Python scoping 的 LEGB 法则吧
碰到一个变量,例如 value,会先在本层 Local 作用域搜索,找到了就返回,找不到就会继续向外层搜索~
monkeylyf
2018 年 9 月 17 日
你这里的 value 相当于全局变量
ClutchBear
2018 年 9 月 17 日
main
下面的全局变量 value 改成其他名字
就不会这样了,
碰巧变量名一样而已
billlee
2018 年 9 月 17 日
你这里没有主“函数”啊
congeec
2018 年 9 月 17 日
congeec
2018 年 9 月 17 日
紫红色的__init__和紫色的 self 真骚。我喜欢这配色
Tyanboot
2018 年 9 月 17 日
上面老哥们已经说了,不过我想说的是,你看着这么多下划线的 warning 就真的不头疼?
rrfeng
2018 年 9 月 17 日
?? 你这不是自己传进去的??
jingniao
2018 年 9 月 17 日
普通 if 不会形成新作用域,所以 value 是全局变量……
d18
2018 年 9 月 18 日
你是不是对线程有什么误解,线程本来就是共享数据。
BingoXuan
2018 年 9 月 18 日
msg7086
2018 年 9 月 18 日
所以主函数在哪……
lonisletend
2018 年 9 月 18 日
@Mistwave @monkeylyf @ClutchBear @jingniao @billlee @msg7086
懂了 谢谢各位的回复 应该就是下面这张图中的意思,误会线程大兄弟了。
![](
)
另外

@congeec 这是 Pycharm 自带的配色:)
@Tyanboot 临时写的试试看,对不住强迫症同学了:) 忍忍哈
wizardforcel
2018 年 9 月 18 日
@Mistwave 读操作是这样。写操作从来都是在当前作用域里写。
wizardforcel
2018 年 9 月 18 日
@wizardforcel 除非有 global 或者 nonlocal

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/490238

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX