在 Python 中打印变量的名称和值

在 Python 中打印变量的名称和值

Print a variable’s name and value in Python

使用格式化的字符串文字来打印变量的名称和值,例如
print(f'{variable=}'). 您可以在 f 字符串中使用表达式来获取包含变量名称和值的字符串。

主程序
name = 'bobbyhadz' result = f'{name=}' print(result) # 👉️ name='bobbyhadz' result = ':'.join(f'{name=}'.split('=')) print(result) # 👉️ name:'bobbyhadz'

我们使用格式化字符串文字来打印变量的名称和值。

格式化字符串文字 (f-strings) 让我们通过在字符串前加上f.
主程序
var1 = 'bobby' var2 = 'hadz' result = f'{var1}{var2}' print(result) # 👉️ bobbyhadz

确保将表达式括在大括号 –{expression}中。

格式化字符串文字还使我们能够

在表达式块中使用
格式规范迷你语言。

主程序
website = 'bobbyhadz' result = f'{website=}' print(result) # 👉️ website='bobbyhadz'

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

表达式扩展为:

  1. 等号前的文本。
  2. 一个等号。
  3. repr()使用计算的表达式调用函数的结果。

如果您只需要获取变量的名称,则可以使用该split()函数。

主程序
website = 'bobbyhadz' result = f'{website=}'.split('=')[0] print(result) # 👉️ 'website'

str.split ()
方法使用定界符将字符串拆分为子字符串列表。

主程序
website = 'bobbyhadz' result = f'{website=}' print(result) # 👉️ website='bobbyhadz' print(result.split()) # 👉️ ['website', "'bobbyhadz'"]

该方法采用以下 2 个参数:

姓名 描述
分隔器 在每次出现分隔符时将字符串拆分为子字符串
最大分裂 最多maxsplit完成拆分(可选)

str.join()如果您需要使用不同的分隔符连接变量的名称和值,则可以使用该方法。

主程序
website = 'bobbyhadz' result = ':'.join(f'{website=}'.split('=')) print(result) # 👉️ website:'bobbyhadz'

str.join方法将一个可迭代对象作为参数并返回一个字符串,该字符串是可迭代对象中字符串的串联。

调用该方法的字符串用作元素之间的分隔符。

或者,您可以使用该globals()功能。

使用 globals() 打印变量的名称和值

要获取变量的名称和值:

  1. 使用该globals()函数获取实现当前模块命名空间的字典。
  2. 迭代字典以获取匹配变量的名称和值。
  3. 访问索引处的列表项0以获取变量的名称和值。
主程序
def get_variable_name_value(variable): globals_dict = globals() return [f'{var_name}={globals_dict[var_name]}' for var_name in globals_dict if globals_dict[var_name] is variable] website = 'bobbyhadz.com' print(get_variable_name_value(website)) # 👉️ ['website=bobbyhadz.com'] print(get_variable_name_value(website)[0]) # 👉️ website=bobbyhadz.com

globals函数返回一个实现当前模块命名空间的字典

主程序
website = 'bobbyhadz.com' globals_dict = globals() # {'website': 'bobbyhadz.com', '__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f1a57b19de0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/home/borislav/Desktop/bobbyhadz_python/main.py', '__cached__': None, 'globals_dict': {...}} print(globals_dict)

我们使用列表理解来遍历字典。

列表推导用于对每个元素执行某些操作或选择满足条件的元素子集。

在每次迭代中,我们检查提供的变量的标识是否与当前字典值的标识相匹配。

主程序
def get_variable_name_value(variable): globals_dict = globals() return [f'{var_name}={globals_dict[var_name]}' for var_name in globals_dict if globals_dict[var_name] is variable] website = 'bobbyhadz.com' print(get_variable_name_value(website)) # 👉️ ['website=bobbyhadz.com'] print(get_variable_name_value(website)[0]) # 👉️ website=bobbyhadz.com

我们使用 f-string 返回一个字符串,其中包含匹配元素的变量名称。

如果您有多个具有相同值的变量,指向内存中的相同位置,则列表将包含多个项目。

主程序
def get_variable_name_value(variable): globals_dict = globals() return [f'{var_name}={globals_dict[var_name]}' for var_name in globals_dict if globals_dict[var_name] is variable] website = 'bobbyhadz.com' name = 'bobbyhadz.com' # 👇️ ['website=bobbyhadz.com', 'name=bobbyhadz.com'] print(get_variable_name_value(website)) # 👇️ website=bobbyhadz.com print(get_variable_name_value(website)[0])
有 2 个具有相同值的变量,指向内存中的相同位置,因此列表返回 2 项。

如果将非原始对象传递给函数,您将得到一个仅包含一项的列表,因为这些对象存储在内存中的不同位置。

主程序
def get_variable_name_value(variable): globals_dict = globals() return [f'{var_name}={globals_dict[var_name]}' for var_name in globals_dict if globals_dict[var_name] is variable] class Employee(): pass alice = Employee() bobby = Employee() # 👇️ ['alice=<__main__.Employee object at 0x7f8faf25b4f0>'] print(get_variable_name_value(alice)) # 👇️ alice=<__main__.Employee object at 0x7f15de11f4f0> print(get_variable_name_value(alice)[0])

这两个类实例存储在内存中的不同位置,因此该
get_variable_name()函数返回一个包含单个项目的列表。

发表评论