2013-10-07 70 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