Python возвращает значения? - PullRequest
       12

Python возвращает значения?

2 голосов
/ 10 апреля 2011

Как мне это сделать? Могу ли я сделать это?

def aFunction(argument):  
    def testSomething():  
        if thisValue == 'whatItShouldBe':  
            return True  
        else:  
            return False  

    if argument == 'theRightValue': # this is actually a switch using elif's in my code  
        testSomething()  
    else:  
        return False  

def aModuleEntryPoint():  
    if aFunction(theRightValue) == True:  
        doMoreStuff()  
    else:  
        complain()  

aModuleEntryPoint()

aModuleEntryPoint() необходимо сначала убедиться, что условие истинно, прежде чем оно начнет что-то делать. Из-за инкапсуляции aModuleEntryPoint не знает, как проверить условие, но aFunction() имеет подфункцию под названием testSomething(), которая знает, как проверить условие. aModuleEntryPoint() звонки aFunction(theRightValue).

Поскольку theRightValue было передано aFunction() в качестве аргумента, aFunction() вызывает testSomething(). testSomething() выполняет логический тест и возвращает либо True, либо False.

Мне нужно, чтобы aModuleEntryPoint() знал, что решил testSomething(). Я не хочу, чтобы aModuleEntryPoint() знал что-либо о том, как testSomething() пришел к своему выводу.

На самом деле было бы достижением опубликовать мой фактический источник при удалении других функций и чего-то еще, поэтому мне пришлось настроить общую суть так.

Ответы [ 3 ]

4 голосов
/ 10 апреля 2011

Единственное, что я сейчас вижу неправильно - вам нужно return до testSomething() в строке 9.

0 голосов
/ 10 апреля 2011

Моя первая мысль при взгляде на ваш код состоит в том, что он слишком сложен. Почему aFunction вообще? Вы могли бы просто написать

def aModuleEntryPoint():
    argument = ...
    if argument in (theRightValue, theOtherRightValue, theOtherOtherRightValue)\
       and testSomething():
        doMoreStuff()
    else:
        complain()  

В этом предложении if сначала проверяется, является ли argument одним из возможных правильных значений, а если это так, то он продолжает вызывать testSomething() и проверяет возвращаемое значение этого значения. Только если это возвращаемое значение истинно, оно вызовет doMoreStuff(). Если один из тестов не пройден (вот почему я использовал and), он будет complain().

0 голосов
/ 10 апреля 2011

Возможно, подфункция не подходит для вас здесь. Вы хотите предоставить внутреннюю функциональность внешнему объекту. Классы Python обеспечивают лучший механизм для выражения этого, чем подфункция. Имея класс, вы можете очень легко контролировать любые части внутренней функциональности, которые вам нужны.

...