You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python globals()函数输出差异疑问:变量显值函数显内存地址?

为什么globals()里变量显示字符串字面量,函数显示内存地址?

这个问题问得很有意思!其实本质上是Python处理不同对象的字符串表示方式的差异在搞鬼,咱们一步步拆解清楚:

1. 字典打印时默认调用对象的repr()方法

当你打印globals()返回的字典时,Python会对字典里的每一个值调用repr()函数来生成它的字符串表示,而不是我们平时用print()单独输出对象时默认调用的str()。这是因为字典的__str__方法设计目标是输出可复现的内容——也就是理论上可以通过eval()把这个输出还原成原来的字典,所以必须用更“精确”的repr()。

2. 不同对象的repr()实现逻辑不同

  • 字符串等基础数据对象:repr()会返回带引号的字符串形式(比如repr("This is a variable.")会得到"'This is a variable.'"),所以你在globals()的输出里看到的就是类似字符串字面量的样子,直观又符合可复现的要求。
  • 函数对象:函数是更复杂的可调用对象,没法用一个简单的字面量来表示它的全部信息。Python给函数的repr()实现是返回它的类型、名称以及内存地址(比如<function my_func at 0x7f9b1c0a1040>),内存地址是区分不同函数实例的唯一标识,这样能清晰告诉你这是哪个函数对象。

3. 动手验证一下

你可以自己跑几行代码确认这个逻辑:

my_var = "This is a variable."
def my_func():
    pass

# 看字符串的repr和str区别
print(repr(my_var))  # 输出: 'This is a variable.'
print(str(my_var))   # 输出: This is a variable.

# 看函数的repr和str区别
print(repr(my_func)) # 输出: <function my_func at 0x...>
print(str(my_func))  # 输出: <function my_func at 0x...>(函数的str和repr是一样的)

# 打印globals(),会看到my_var是带引号的,my_func是内存地址格式
print(globals())

内容的提问来源于stack exchange,提问作者Jonathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:21:02