0

У меня есть программа, которая определяет функцию verboseprint либо печати или не печатать на экране на основе булево:Функция, которая определяет функцию в Python

# 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 boolean. Я знаю, что могу просто определить verboseprint сам по себе в файле, а затем импортировать его во все мои другие файлы, но мне нужно, чтобы определение функции могло быть объявлено двумя разными способами на основе логического.

Итак, в резюме: Мне нужна функция, которая может объявить другую функцию двумя разными способами, что я могу затем импортировать в несколько файлов.

Любая помощь будет оценена по достоинству.

+0

Вы хотите объявить одну функцию и использовать его везде по-разному, это то, как работает полиморфизм: http://stackoverflow.com/questions/1031273/what-is-polymorphism-what-is-it- для-и-хау-это-это используется. И обычно вы не определяете функцию в python таким образом. –

+0

Я не понимаю, что вы подразумеваете под «Все файлы будут переданы' in_verbose_mode' boolean. " вы имеете в виду, что у каждого файла есть собственная переменная? –

ответ

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 

А затем импортировать эту функцию для использования в других файлах.

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 

 Смежные вопросы

  • Нет связанных вопросов^_^