为什么功能代码不起作用

时间:2014-02-19 11:07:48

标签: python-3.x functional-programming

我试图获得一个函数调用,但我无法打印它。请帮忙。 这是代码:

def foo():
    name = input ('>>').lower().split()
    for item in name:
        if name == foo:
            print ('foo here!')
    else:
        bar()
def bar(): 
    name = input ('>>').lower().split()
    for item in name:
        if name == bar:
            print ('bar here!')


def start():
    print('Welcome Home')
    name = input
    foo()


start()

1 个答案:

答案 0 :(得分:0)

print ('foo here!')print ('bar here!')都未执行,因为在大多数情况下,布尔表达式name == fooname == bar被评估为false。例如,在定义name == foo下的布尔表达式foo()中,列表name的第一个元素与foo进行比较。 foo返回对象函数foo()的友好字符串表示形式(通常用于调试目的)。您实际上可以通过执行foo()尝试打印print(foo),并将返回的值分配到name中的列表foo()(在我的情况下为<function foo at 0x7fad58f35d40> - 它将会可能在你的机器上有所不同)。这会将name == foo评估为true,从而导致print ('foo here!')被执行。话虽如此,here is how for loop works

enter image description here

name列表中的第一个元素已分配给item变量。接下来,执行for循环的主体。在执行主体之后,在再次执行for循环体之前,将列表name中的第二个元素分配给变量item。此过程将继续,直到name列表中没有其他元素。现在为了执行说print('foo here!'),必须将if语句中的布尔表达式求值为true。

以下是用户在运行程序后键入foo时将执行print('foo here!')的示例。

def foo():
    name = input('>>').lower().split()

    for item in name:
        if item == 'foo':
            print('foo here!')
        else:
            bar()

def bar():
    name = input('>>').lower().split()

    for item in name:
        if item == 'bar':
            print('bar here!')

print('Welcome Home')
foo()

在定义foo()中,列表name的第一个元素与string foo进行比较,从而满足条件if name == 'foo'。以下是执行的示例:

[firas@arch Python]$ ./foobar.py 
Welcome Home
>>foo
foo here!