我的要求是拥有一个与print完全相同的功能,但在顶部添加时间戳
目前我使用
之类的东西def tprint(var):
print(str(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))+" :: "+str(var))
虽然它为我提供了特定集合的所有必需输出,例如
tprint("dummy"+" print")
2017-11-09 19:38:42 :: dummy print
我无法完全将其变换为print语句,例如 tprint(" hi","你好")和tprint(" a =",a,sep =' 0',end =& #39;')失败。我的要求不是理想地使这两个陈述有效。但是要为print创建一个替代函数,该函数适用于所有打印参数,但会提供额外的时间戳。我相信这可能不是一个直接的解决方案。但如果有人已经想出任何类似的方法,不要错过。
答案 0 :(得分:1)
修改强>
在查看了您想要的内容后,为什么不将所需的值传递给使用内置print()
的函数?像这样:
def tprint(*args, *kwargs):
stamp = str(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
print(stamp + ' :: ', *args, sep = kwargs['sep'], end = kwargs['end'])
a = 'Hello World'
tprint("a =", a, sep='0000', end='')
>>> [whatever the timestamp is] :: 0000a =0000Hello World
为了提供更好的响应,我真的需要知道你的预期输出会给出一个例子。到目前为止,你只说了什么有效或无效,但不是为什么或如何看。
原始回复:
在函数定义中使用*args
参数。它允许您在函数调用中提供可选的(未指定的)数量的参数,并将它们收集到列表中。
按definition,关键字参数必须在所有*args
参数之后。 **kwargs
将它们打包到字典中以进行迭代。更多信息可在this和that上获取。
所以你可以这样做:
def tprint(*args, **kwargs):
tempa = ' '.join(str(a) for a in args)
tempk = ' '.join([str(kwargs[k]) for k in kwargs])
temp = tempa + ' ' + tempk # puts a space between the two for clean output
print(str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + " :: " + temp)
a = 'Hello World!'
tprint("a =", a, sep='0', end='')
>>> 2017-11-09 09:35:37.148780 :: a = Hello World! 0 # I used datetime.datetime.now()