我想使用一个可以自动打印出变量和值的函数。如下所示:
num = 3
coolprint(num)
输出:
num = 3
此外,如果它也能做到这样的话会很酷:
variable.a = 3
variable.b = 5
coolprint(vars(variable))
输出:
vars(variable) = {'a': 3, 'b': 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'])} """])