我有一个定义函数verboseprint
的程序,可以根据布尔值打印或不打印到屏幕上:
# define verboseprint based on whether we're running in verbose mode or not
if in_verbose_mode:
def verboseprint (*args):
for arg in args:
print arg,
print
print "Done defining verbose print."
else:
# if we're not in verbosemode, do nothing
verboseprint = lambda *a: None
我的程序使用多个文件,我想在所有文件中使用verboseprint的这个定义。所有文件都将传递in_verbose_mode
布尔值。我知道我可以在文件中自己定义verboseprint
然后将其导入我的所有其他文件中,但是我需要能够基于布尔值以两种不同的方式声明函数定义。
总结一下:我需要一个可以用两种不同的方式声明另一个函数的函数,然后我可以导入到多个文件中。
任何帮助将不胜感激。
答案 0 :(得分:3)
通常你不想以这种方式定义一个函数。
我认为实现这一目标的简单方法是将布尔值作为函数参数传递,并根据参数定义行为:
def verboseprint (*args, mode):
if mode == in_verbose_mode:
for arg in args:
print arg,
print
print "Done defining verbose print."
# if we're not in verbosemode, do nothing
##else:
## verboseprint = lambda *a: None
然后导入此函数以在其他文件中使用。
答案 1 :(得分:3)
您应该查看工厂设计模式。它的基本设计就是完全按照你所说的去做,尽管它可以用于类而不是函数。话虽这么说,你可以通过一个返回两个可能对象之一的类(基于你的布尔值)来获得你想要的行为。它们都有相同的方法,但操作方式不同(就像你的两个函数一样)。
Class A:
def method():
do things one way
Class B:
def method():
do things another way
import A,B
Class Factory:
def __init__(bool):
self.printer = A if bool else B
def do_thing():
self.printer.method()
import Factory
fac = Factory(True)
fac.do_thing() # does A thing
fac = Factor(False)
fac.do_thing() # does B thing