Python 3.3:调用其他函数的函数

时间:2014-01-02 21:07:29

标签: python function

问候Pythonic世界。学习Python的第5天,我正在努力解决调用其他函数的函数。这对某些人来说很简单......

在此代码中:

def powers_of_x(x):
    print ('Powers Function with ', x, ' entered:')
    for n in range (-3,  4,  1):
        print ('power of ', n,  "= ",  x**n)
    return 'First one ended (using variables with defined range)'

def powers_of_9():
    print ("Powers function for 9 is:")
    powers_of_x(9)
    return 'Second one ended (no passed variable here)'

def combined():
    x = int(input('Enter value to start:'))
    print ('First, run powers_of_x function for entered value of: ',  x)
    powers_of_x(x)
    print ('Second, run powers_of_9 function for powers of 9:')
    powers_of_9()
    return 'All now finished.'

第一个函数powers_of_x(x)可以自行运行。第二个,powers_of_9()也是如此。在这两种情况下,都会显示打印的return消息。

但是当它们被第三个函数combined()调用时,每个({第一个结束......'和'第二个结束......')的最终return消息不会打印。为什么不? “所有现在已经完成”应该出现了。感谢您的任何更正。

[编辑]对不起,我可能不会说得好。我的问题是为什么当前两个函数分别运行时,“第一个结束......”和“第二个结束......”文本出现,而不是在函数combined()运行时出现。这是return的功能吗?如果是这样,我会坚持使用print

3 个答案:

答案 0 :(得分:4)

您忽略了函数的返回值。如果要打印它们,请添加print()

print(powers_of_x(x))

也就是说,将return语句更改为print()似乎更符合逻辑。

答案 1 :(得分:2)

  

我的问题是为什么当前两个函数分别运行时,“第一个结束......”和“第二个结束......”文本出现,但是当函数combined()运行时不会出现。

看起来您正在交互式提示符下运行代码(在IDLE或命令行中)。在交互式提示符下,当您运行函数并且将其返回值分配给任何内容时,返回值将打印到屏幕上。如果确实将其返回值分配给变量,或者如果函数不是顶级,则返回值不会打印到屏幕上。例如:

>>> def foo():
    return 3

>>> def bar():
    foo()

>>> foo()     # not assigned to anything -> prints return value to output
3
>>> bar()     # not top-level -> doesn't print return value to output
>>> x = foo() # assigned to x -> doesn't print return value to output

这是交互式提示的怪癖。如果是,例如,您将无法获得相同的结果您将行powers_of_9()添加到文件的末尾,然后运行它。当您这样做时,您的结果如下所示:

Powers function for 9 is:
Powers Function with  9  entered:
power of  -3 =  0.0013717421124828533
power of  -2 =  0.012345679012345678
power of  -1 =  0.1111111111111111
power of  0 =  1
power of  1 =  9
power of  2 =  81
power of  3 =  729

如您所见,不会打印powers_of_9的返回值。

在任何情况下,您使用return语句的方式都不正确。只有当您想从函数中提取某些信息以供其他地方使用时,才应使用return。例如,像这个愚蠢的例子:

def add(x, y):
    return x+y

def print_two_plus_three():
    result = add(2, 3)
    print(result)

当您只想显示某些信息时,print就是您应该使用的。


另外,我想对您的代码提供一些评论。为了达到你想要的结果,你的代码应该看起来像这样:

def powers_of_x(x):
    print('Powers function with', x, 'entered:')
    for n in range(-3, 4, 1):
        print('power of', n, '=', x**n)
    print('First one ended (using variables with defined range)')

def powers_of_9():
    print('Powers function for 9 is:')
    powers_of_x(9)
    print('Second one ended (no passed variable here)')

def combined():
    x = int(input('Enter value to start: '))
    print('First, run powers_of_x function for entered value of:', x)
    powers_of_x(x)
    print('Second, run powers_of_9 function for powers of 9:')
    powers_of_9()
    print('All now finished')
  • 当您编写print('abc', 'def', 'ghi')时,打印的字符串为abc def ghi。也就是说,要打印的每个参数都用空格分隔。你可以通过写例如改变这种行为print('abc', 'def', 'ghi', sep='X'),其中sep关键字参数指定应使用哪个字符串来分隔参数。正如您可能猜到的那样,这会打印abcXdefXghi
  • 正如我评论的那样,将return值括起来被认为是不好的风格(当然,除非你返回一个元组)。
  • 在函数名和参数列表之间放置一个空格也被认为是错误的样式。即使用print('foo'),而不是print ('foo')
  • input()的参数末尾添加一个空格是很好的,这样输入的值就会与输入提示分开。

答案 2 :(得分:1)

因为它们被退回,而不是打印。它们返回一个字符串,但在combined()中,这些字符串没有被赋值给任何东西。

你可以说:

my_string = powers_of_x(9)
print(my_string)

或者简单地说:

print(powers_of_x(9))