鱼C论坛

 找回密码
 立即注册
查看: 2739|回复: 6

交互模式的无变量名的值如果未赋值给下划线,那赋值给谁了?

[复制链接]
发表于 2016-9-21 09:59:20 | 显示全部楼层 |阅读模式
30鱼币
我们知道交互模式,如果输入一个表达式,则显示出它的值,并赋值给下划线,其后可以用下划线把值再调出。
  1. >>> _
  2. Traceback (most recent call last):
  3.   File "<pyshell#2>", line 1, in <module>
  4.     _
  5. NameError: name '_' is not defined
  6. >>> 4 + 5
  7. 9
  8. >>> _
  9. 9
  10. >>>
复制代码


但我发现,如果先将下划线作为变量名给它赋值,再输入表达式,则下划线仍保留了先前的值,而不是表达式的值,那么表达式的值赋值给谁了?同时发现dir(__builtins__)中仍只有一个下划线。
  1. >>> _ = 5
  2. >>> _
  3. 5
  4. >>> 4 + 8
  5. 12
  6. >>> _
  7. 5
复制代码

最佳答案

查看完整内容

交互模式的无变量名的值仍然是赋值给下划线。 只是 两个下划线的定义域不同而已。 _ = 5的下划线定义在 全局变量 交互模式的的下划线定义在 内置变量(builtins) 而且,python的查找变量的顺序是:L-G-B Locals 局部变量 Globals 全局变量 Builtins 内置变量 所以,当你查询 _ 的值,全局变量中的 _ 优先返回,就会显示 5 -------------------------- 回答完毕,给分吧~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-21 09:59:21 | 显示全部楼层
SixPy 发表于 2016-9-21 10:33
难得 @冬雪雪冬 来送分~  抢了~~

交互模式的无变量名的值仍然是赋值给下划线
只是 两个下划线的定义域不同而已。
_ = 5下划线定义在 全局变量
交互模式的下划线定义在 内置变量(builtins)

而且,python的查找变量的顺序是:L-G-B
Locals 局部变量
Globals 全局变量
Builtins 内置变量

所以,当你查询 _ 的值,全局变量中的 _ 优先返回,就会显示 5  

--------------------------
回答完毕,给分吧~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-21 10:33:55 | 显示全部楼层
难得 @冬雪雪冬 来送分~  抢了~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-9-21 10:53:25 | 显示全部楼层
SixPy 发表于 2016-9-21 09:59
交互模式的无变量名的值仍然是赋值给下划线。
只是 两个下划线的定义域不同而已。
_ = 5的 ...

谢谢@SixPy
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-21 11:08:04 | 显示全部楼层
栗子
  1. >>> _='xxxx'
  2. >>> 999+1
  3. 1000
  4. >>> __builtins__._
  5. 1000
  6. >>> globals()['_']
  7. 'xxxx'
  8. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-9-21 11:25:27 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-22 10:38:38 | 显示全部楼层
学习一下了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-22 22:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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