Python:轻松打印变量名称和值

时间:2017-09-06 18:07:16

标签: python printing

我想使用一个可以自动打印出变量和值的函数。如下所示:

num = 3
coolprint(num)

输出:

num = 3

此外,如果它也能做到这样的话会很酷:

variable.a = 3
variable.b = 5
coolprint(vars(variable))

输出:

vars(variable) = {'a': 3, 'b': 5}

那里有没有这样的功能?或者我应该自己做?感谢

5 个答案:

答案 0 :(得分:4)

在Python 3.8中,f字符串有一个=:

#!/usr/bin/env python3
python="rocks"
print(f"{python=}")

这将输出

# python=rocks

答案 1 :(得分:1)

即使它可能对许多人有用,但遗憾地完成这项任务的官方方法并不存在。我建议和过去有时使用过的是以下内容(我不确定这是否是最好的方法)。

基本上你可以做的是创建一个每次模仿一个Python数据类型的自定义对象。你可以找到一个整数的例子。

class CustomVariable(object):

    def __init__(self, name, value):
        self.name = name
        self.value = value

    def __str__(self):
        return "{} = {}".format(self.name, self.value)

    def __add__(self, val) :
        return self.value + val


myVar = CustomVariable("myVar", 15)
print myVar
myVar = myVar + 5
print myVar
Output:
myVar = 15
myVar = 20

检查名为" ___ str ____"

的特殊方法

答案 2 :(得分:0)

我发现答案是否定的。没有办法做到这一点。但是,你最好的选择是这样的:

from pprint import pprint

def crint(obj, name):

    if isinstance(obj, dict):
        print '\n' + name + ' = '
        pprint(obj)

    else:
        print '\n' + name + ' = ' + str(obj)

你可以这样做:

crint(vars(table.content[0]), 'vars(table.content[0])')

或:

j = 3
crint(j, 'j')

答案 3 :(得分:0)

这种基于lambda的解决方案对我来说效果不错,但可能并非在所有情况下都如此。它很简单,只消耗一行。

coolprint = lambda *w: [print(x,'=',eval(x)) for x in w]

〔实施例..

coolprint = lambda *w: [print(x,'=',eval(x)) for x in w]

a, *b, c = [1, 2, 3, 4, 5]

coolprint('a')
coolprint('b','c')
coolprint('a','b','c')
coolprint('c','b','b','a','b','c')

产生..

a = 1
b = [2, 3, 4]
c = 5
a = 1
b = [2, 3, 4]
c = 5
a = 1
b = [2, 3, 4]
c = 5
c = 5
b = [2, 3, 4]
b = [2, 3, 4]
a = 1
b = [2, 3, 4]
c = 5

答案 4 :(得分:0)

我只是附加我的自定义打印,它接受一个列表或一个表达式字典,在横向情况下添加全局变量(原谅 PEP 违规,我只喜欢单行,尤其是 lambdas):

pp = lambda p: print(' | '.join([f"{x} = {eval(x)}" for x, v in {**p, **dict(**globals())}.items() if not x.startswith('_')])) if type(p)==dict else print(' | '.join([f"{x} = {eval(x)}" for x in p if not x.startswith('_')]))

# Some Variables:    
z = {'a':100, 'b':200}
a = 1+15

# Usage with dict & all the variables in the script:
pp(dict(**locals()))

# Usage with list, for specific expressions:
pp(['a', "z['b']", """ {x:x+a for x in range(95, z['a'])} """])
  • 请注意, f'{x =}' 将无法正常工作,因为评估需要在函数内部进行作用域。