【问题标题】:Function that defines a function in python在python中定义函数的函数
【发布时间】:2020-08-02 01:11:48
【问题描述】:

我有一个程序定义函数 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 

我的程序使用多个文件,我想在所有文件中都使用这个详细打印的定义。所有文件都将通过 in_verbose_mode 布尔值。我知道我可以在一个文件中单独定义verboseprint,然后将其导入我的所有其他文件,但我需要函数定义能够基于布尔值以两种不同的方式声明。

总而言之:我需要一个可以以两种不同方式声明另一个函数的函数,然后我可以将其导入到多个文件中。

任何帮助将不胜感激。

【问题讨论】:

  • 你想声明一个函数并以不同的方式在任何地方使用它,这就是多态的工作原理:stackoverflow.com/questions/1031273/…。而且通常情况下,你不会通过这种方式在 python 中定义函数。
  • 我不明白您所说的“所有文件都将通过 in_verbose_mode 布尔值”是什么意思。你的意思是每个文件都有它自己的变量吗?

标签: python function


【解决方案1】:

您应该查找工厂设计模式。它基本上旨在完全按照您所说的进行,尽管它使用的是类而不是函数。话虽如此,您可以通过拥有一个返回两个可能对象之一的类(基于您的布尔值)来获得所需的行为。他们都有相同的方法,但它的运作方式不同(就像你的两个函数一样)。

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

【讨论】:

    【解决方案2】:

    通常您不希望以这种方式定义函数。

    我认为实现这一点的简单方法是将布尔值作为函数参数传递并根据参数定义行为:

    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 
    

    然后导入此函数以在您的其他文件中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 2010-10-15
      相关资源
      最近更新 更多