我有一个模块有一个方法:
def find_inverse_matrix(C, log=False):
n = C.shape[0]
Cs = C.copy()
i = 0
C = np.matrix(np.eye(n))
B = np.matrix(np.eye(n))
J = set(range(n))
S = [0] * n
if log: print Cs
while i <= n-1:
if log: print '\nIteration', i
f = False
j = 0
ei = get_ek(i, n)
for j in J:
cj = get_ck(Cs, j)
alpha = (ei * B * cj)[0, 0]
if log: print 'alpha%s = %s' % (j, alpha)
if not(is_zero(alpha)):
f = True
break
if not(f):
exit('Inverse matrix is not exist')
J.remove(j)
S[j] = i
C[:, i] = Cs[:, j]
if log: print 'C%s:\n%s' % (i, C)
D = get_Dkz(i, B * C[:, i])
if log: print 'D%s:\n%s' % (i, D)
B = D * B
if log: print 'B%s:\n%s' % (i, B)
i += 1
if log: print '\n S = ', S
if log: print 'Result'
R = construct_matrix(B, S)
if log: print R
if log: print '\nCheck result:'
if log: print Cs * R
return R
如果我从这个文件中调用此方法,它会显示所有打印,但是如果我从另一个打印,则应该禁止所有打印。现在我在每次打印之前都会使用check,但它是如何以'pythonic'风格做的简单而漂亮的?
答案 0 :(得分:2)
通常,print
是语言中的陈述。但是,如果将行from __future__ import print_function
添加到导入,则将其用作函数。这意味着两件事:
a)您需要将其用作函数 - 意味着print(Cs)
而不是print Cs
。
b)你可以覆盖它,因为在python函数中你可以使用它。
您可以定义自己的“my_print”函数,以后可以更改而不是内置print
。
示例:
>>> from __future__ import print_function
>>> _print_ = print
>>> def myprint(*arg, **kwarg):
... _print_("yeah.")
... _print_(*arg,** kwarg)
...
>>> myprint("ok")
yeah.
ok
>>> print = myprint
>>> print('3')
yeah.
3
>>>
所以只需编写你的myprint
函数,以便之前检查“log”,你的打印应该是相同的。或者只在您不想禁止打印时才覆盖print
。
答案 1 :(得分:1)
if __name__ == '__main__':
才会执行代码块。您可以在那里设置一个标志来打开日志记录。
更pythonic的方法可能是将日志函数传递给模块而不是标志。这样你就可以传入一个空函数来抑制记录。