3

所以我有一个不断吐出的功能:

(10.3,11.4) 

什么时候应该吐出来:

10.3 11.4 

我玩了一下,写了一个简单的python代码,我似乎理解了这个概念

a=3
b=3
print a,b #returns 3 3

但它不适用于下面的函数,所以我想知道为什么它一直返回 ()

import math

x=10.01
y=9.01

def d():
    b = 2.00 *  x / math.sqrt(7)
    q=round(y-b,2)
    r=round(y+b,2)
    return q,r

print d() #returns (1.4399999999999999, 16.579999999999998)
4

4 回答 4

4

print正在(正确地)打印从 d 返回的元组。要单独打印值,请尝试以下操作:

print '{} {}'.format(*d())

或这个:

dret = d()
print dret[0],dret[1]

print a,b不解释a,b为元组,而是解释为print语句的参数序列。请注意,该print语句更改了 Python3 中的语法以增加混淆。

为了使a,b案例与案例平行q,r,它看起来更像这样:

c = a,b
print c

在这种情况下,该print语句接收一个元组,而不是两个单独的值。

于 2013-10-07T20:12:14.440 回答
2

原因在于语句“return q, r”

您不能从函数返回多个值。python 正在做的是用 q 和 r 创建一个元组,然后返回它,作为 return q,r 被解释为 return (q, r) 然后 print 接受它并输出一个元组。所以打印 (q, r) 真的是等价的

但是, print q, r 以不同的方式执行,作为多参数 print 并将打印所有参数之间有空格。

希望这可以消除任何困惑。

于 2013-10-07T20:16:20.867 回答
0

来自官方文档;

因此,像您在此处所做的那样从函数返回多个值根据定义将它们返回到一个元组中。

尝试显式解包返回的元组d()

In [1]: import math

In [2]: x=10.01

In [3]: y=9.01

In [4]: def d():
   ...:         b = 2.00 *  x / math.sqrt(7)
   ...:         q=round(y-b,2)
   ...:         r=round(y+b,2)
   ...:         return q,r
   ...: 

In [5]: a, b = d()

In [6]: print a, b
1.44 16.58
于 2013-10-07T20:22:13.607 回答
0

math.sqrt 返回一个具有实部和虚部的复数。将其更改为 math.sqrt(7).real ,复数仅为实数。这使打印按您的预期进行

于 2022-02-12T19:14:41.533 回答