2013-10-07 72 views
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) 
+2

这是一个元组。你为什么不希望它看起来像一个元组? – roippi

+2

这是一个公平的问题:如果'print d()'打印一个元组,为什么不'print a,b'? –

+0

@Robᵩ因为'd()'返回一个2元组,'print a,b'给出'print'语句的两个参数。 – roippi

回答

3

print(正确)打印从d返回的元组。要单独打印值,试试这个:

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

或者这样:

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

print a,b不解释a,b一个元组,而是作为参数传递给print语句序列。请注意,print语句会在Python3中更改语法以增加混淆。

要平行于q,r情况a,b的情况下,它会看起来更象这样:

c = a,b 
print c 

在这种情况下,print声明收到一个元组,而不是两个单独的值。

+0

在第二个例子中,代码应该是:'print dret [0],dret [1]'。 – Matthias

2

原因是在声明“返回q,r”

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

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

希望这可以消除任何混淆。

+0

它的确如此,谢谢;我将如何改变回报q,r做我打算做的事情? –

0

从官方文档;

  • return语句使用表达式列表离开当前函数调用。包含至少一个逗号的expression list产生元组。

因此,从像你这样的函数中返回多个值,按照定义将它们返回到一个元组中。

尽量明确拆包由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