在 Python 中打印变量名

在 Python 中打印变量名

Print a variable’s name in Python

要打印变量的名称:

  1. 使用格式化字符串文字获取变量的名称和值。
  2. 拆分等号上的字符串并获取变量的名称。
  3. 使用该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'

变量后面的等号用于调试,返回变量名及其值。

表达式扩展为:

  1. 等号前的文本。
  2. 一个等号。
  3. 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() 打印变量名

要打印变量的名称:

  1. 使用该globals()函数获取实现当前模块命名空间的字典。
  2. 遍历字典以获取匹配变量的名称。
  3. 使用该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()函数返回一个包含单个变量名的列表。

发表评论