在 Python 中打印变量名
Print a variable’s name in Python
要打印变量的名称:
- 使用格式化字符串文字获取变量的名称和值。
- 拆分等号上的字符串并获取变量的名称。
- 使用该
print()
函数打印变量的名称。
主程序
site = 'bobbyhadz.com' result = f'{site=}' print(result) # 👉️ site='bobbyhadz.com' # ✅ print variable name using f-string variable_name = f'{site=}'.split('=')[0] print(variable_name) # 👉️ 'site'
我们使用格式化的字符串文字来打印变量的名称。
格式化字符串文字 (f-strings) 让我们通过在字符串前加上
f
.主程序
var1 = 'bobby' var2 = 'hadz' result = f'{var1}{var2}' print(result) # 👉️ bobbyhadz
确保将表达式括在大括号 –{expression}
中。
格式化字符串文字还使我们能够
在表达式块中使用格式规范迷你语言。
主程序
site = 'bobbyhadz.com' result = f'{site=}' print(result) # 👉️ site='bobbyhadz.com'
变量后面的等号用于调试,返回变量名及其值。
表达式扩展为:
- 等号前的文本。
- 一个等号。
repr()
使用计算的表达式调用函数的结果。
要仅获取变量名,我们必须在等号处拆分字符串并返回第一个列表项。
主程序
site = 'bobbyhadz.com' variable_name = f'{site=}'.split('=')[0] print(variable_name) # 👉️ 'site'
str.split ()
方法使用定界符将字符串拆分为子字符串列表。
主程序
site = 'bobbyhadz.com' result = f'{site=}' print(result) # 👉️ site='bobbyhadz.com' print(result.split('=')) # 👉️ ['site', "'bobbyhadz.com'"]
该方法采用以下 2 个参数:
姓名 | 描述 |
---|---|
分隔器 | 在每次出现分隔符时将字符串拆分为子字符串 |
最大分裂 | 最多maxsplit 完成拆分(可选) |
或者,您可以使用该globals()
功能。
使用 globals() 打印变量名
要打印变量的名称:
- 使用该
globals()
函数获取实现当前模块命名空间的字典。 - 遍历字典以获取匹配变量的名称。
- 使用该
print()
函数打印变量的名称。
主程序
def get_var_name(variable): globals_dict = globals() return [var_name for var_name in globals_dict if globals_dict[var_name] is variable] site = 'bobbyhadz.com' print(get_var_name(site)) # 👉️ ['site'] print(get_var_name(site)[0]) # 👉️ 'site'
globals函数返回一个实现当前模块命名空间的字典。
主程序
site = 'bobbyhadz.com' globals_dict = globals() # {'site': 'bobbyhadz.com', '__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f235932dde0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/home/borislav/Desktop/bobbyhadz_python/main.py', '__cached__': None, 'globals_dict': {...}} print(globals_dict)
我们使用列表理解来遍历字典。
主程序
site = 'bobbyhadz.com' globals_dict = globals() result = [key for key in globals_dict] # ['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__file__', '__cached__', 'site', 'globals_dict'] print(result)
列表推导用于对每个元素执行某些操作或选择满足条件的元素子集。
在每次迭代中,我们检查提供的变量的标识是否与当前字典值的标识相匹配。
主程序
def get_var_name(variable): globals_dict = globals() return [var_name for var_name in globals_dict if globals_dict[var_name] is variable] site = 'bobbyhadz.com' print(get_var_name(site)) # 👉️ ['site'] print(get_var_name(site)[0]) # 👉️ 'site'
匹配的变量名称(字典中的键)作为列表返回。
这意味着如果您有多个具有相同值的变量,指向内存中的相同位置,则该列表将包含多个变量名称。
主程序
site = 'bobbyhadz.com' domain = 'bobbyhadz.com' def get_var_name(variable): globals_dict = globals() return [var_name for var_name in globals_dict if globals_dict[var_name] is variable] print(get_var_name(site)) # 👉️ ['site', 'domain']
有 2 个具有相同值的变量,它们指向内存中的相同位置,因此列表返回 2 个变量名称。
如果将非原始对象传递给函数,您将得到一个仅包含一项的列表,因为这些对象存储在内存中的不同位置。
主程序
class Employee(): pass alice = Employee() bobby = Employee() def get_var_name(variable): globals_dict = globals() return [var_name for var_name in globals_dict if globals_dict[var_name] is variable] print(get_var_name(alice)) # 👉️ ['alice']
这两个类实例存储在内存中的不同位置,因此该
get_var_name()
函数返回一个包含单个变量名的列表。