2016-02-19 5 views
2

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

На данный момент я «цепи» моя операция в 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 есть очень элегантный способ продолжить с помощью «трубы» %>% оператора (оператор трубы также присутствует в Haskell). Эквивалентно код:

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

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

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

Это вполне относятся к этой теме, но с дополнительными аргументами: Better way to call a chain of functions in python?

ответ

0

fn пакета (see on GitHub имеет оператор >>, и многое другие приятные вещи для функционального программирования. Вы можете сделать функциональное программирование на python, даже если (see also this answer) это не самый оптимальный способ. Python может «цеплять» через методы:

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

Это способ цепных операций.