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

2018-09-17 21:58:40 +08:00
 lonisletend


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

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

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

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

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

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

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

© 2021 V2EX