首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3.3:调用其他函数的函数

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

Stack Overflow用户
提问于 2014-01-02 21:07:29
回答 3查看 974关注 0票数 0

毕多尼世界的问候。在学习Python的第五天,我和大家都在努力处理调用其他函数的函数。这对有些人来说很简单..。

在此代码中:

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-02 22:53:46

我的问题是为什么“第一篇文章结束.”“第二个结束了.”当前两个函数单独运行时出现,而在运行函数组合()时则不会出现。

它看起来像是在交互式提示符下运行代码(无论是在空闲中还是在命令行中)。在交互式提示符下,当您运行一个函数而不将其返回值赋给任何东西时,返回值将打印到屏幕上。如果确实将其返回值赋值给变量,或者如果函数不是顶级函数,则返回值不会打印到屏幕上。例如:

代码语言:javascript
复制
>>> 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()添加到文件的末尾,然后运行它,则不会得到相同的结果。当您这样做时,您的结果如下所示:

代码语言:javascript
复制
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。例如,就像这个愚蠢的例子:

代码语言:javascript
复制
def add(x, y):
    return x+y

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

当您只想显示一些信息时,应该使用print

另外,我想对您的代码提供一些评论。为了实现您想要的结果,您的代码应该如下所示:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-01-02 21:09:47

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

代码语言:javascript
复制
print(powers_of_x(x))

等。

尽管如此,简单地将return语句更改为print()似乎更符合逻辑。

票数 4
EN

Stack Overflow用户

发布于 2014-01-02 21:09:28

因为他们会被退回,而不是印刷。它们返回一个字符串,但在组合式()中,这些字符串没有被分配给任何东西。

你可以说:

代码语言:javascript
复制
my_string = powers_of_x(9)
print(my_string)

或者简单地说:

代码语言:javascript
复制
print(powers_of_x(9))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20891893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档