问候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
。
答案 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))