Как передать оператор if в функцию? - PullRequest
4 голосов
/ 12 июля 2011

Я хочу передать необязательный оператор if в функцию Python для выполнения.Например, функция может копировать некоторые файлы из одной папки в другую, но функция может принимать необязательное условие.

Так, например, один вызов метода может сказать «скопировать файлы из источника в dest».if source.endswith(".exe")

Следующим вызовом может быть простое копирование файлов из источника в место назначения без каких-либо условий.

Следующим вызовом может быть копирование файлов из источника в место назначения if today is monday

Как передать эти условия функции в Python?

Ответы [ 3 ]

14 голосов
/ 12 июля 2011

Функции являются объектами.Это просто функция, которая возвращает логический результат.

def do_something( condition, argument ):
   if condition(argument):
       # whatever

def the_exe_rule( argument ):
    return argument.endswith('.exe')

do_something( the_exe_rule, some_file )

Лямбда - это еще один способ создания такой функции

do_something( lambda x: x.endswith('.exe'), some_file )
5 голосов
/ 12 июля 2011

Вы можете передать лямбда-выражение в качестве необязательного параметра:

def copy(files, filter=lambda unused: True):
    for file in files:
        if filter(file):
            # copy

Лямбда по умолчанию всегда возвращает true, поэтому, если условие не указано, все файлы копируются.

0 голосов
/ 12 июля 2011

Думаю, вы можете использовать что-то вроде этого:

def copy_func(files, destination, condition=None):
    for fileName in files:
        if condtition is None or condition(fileName):
            #do file copy

copy_func(filesToCopy, newDestionation) # without cond
copy_func(filesToCopy, newDestionation, lambda x: x.endswith('.exe')) # with exe cond
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...