Цепочка функций с несколькими аргументами

Есть ли способ связать функции с несколькими аргументами?

На данный момент я "цепляю" свою операцию в Python следующим образом:

def createDirIfNecessary(directoryName):
    if not os.path.exists(directoryName):
        print 'Creating directory [%s]'% directoryName
        os.makedirs(directoryName)
    return directoryName

cakeName = 'lemonPie'
cookDate = '2011-01-04'

#yewww very ugly, big blob of function call ...
myDir = os.path.join(getDbDir('kitchenCupboardDir'),'cakes', cakeName)
file  = os.path.join(createDirIfNecessary(myDir), cookDate + '.gz')

Например, в R есть очень элегантный способ продолжить работу с помощью оператора 'pipe' %>% (оператор pipe также присутствует в Haskell). Эквивалентный код:

cakeName = 'lemonPie'
cookDate = '2011-01-04'

file = getDbDir('kitchenCupboardDir') %>%
         file.path('cakes', cakeName) %>%
         createDirIfNecessary %>%
         file.path(paste0(cookDate,'.gz'))

Здесь всего 4 функции, может быть 6, 7 которые легко соединяются в цепочку. К сожалению, я не могу использовать R, и мне интересно, есть ли решение в python 2.7

Это очень связано с этой темой, но с дополнительными аргументами: Как лучше вызвать цепочку функций в Python?


person Colonel Beauvel    schedule 19.02.2016    source источник


Ответы (1)


В пакете fn (см. на GitHub есть оператор >> и много других полезных вещей для функционального программирования Вы можете выполнять функциональное программирование на python, даже если (см. также этот ответ) это не совсем оптимальный способ. Python может "связывать" функции с помощью методов:

file = getDbDir(...).makePath(...).createDir(...).getPath(...)

Это способ цепочки операций.

person Timothée Poisot    schedule 19.02.2016