2013-07-13 155 views
2

我對此很陌生,希望有人能幫助我的基本問題,以幫助澄清我的概念。你什麼時候寫函數不返回任何東西

我正在玩弄縮短代碼,但第二個案例沒有奏效。

我認爲它沒有工作,因爲remove()不返回任何東西。那是對的嗎?

這讓我想知道。你想什麼時候寫函數不返回任何東西?即使可能被使用,返回一些東西並不總是好事嗎?你如何使用不返回任何東西的函數。

s = 'abc' 

# This remove a from the abc 
x = list(s) 
x.remove('a') 

# if remove() can return the list this would be simpler 
x = list(s).remove('a') 
+1

可能的重複[是否返回'None'對於Python函數來說是個好主意?](http://stackoverflow.com/questions/16252331/is-returning-none-for-python-function-ever-a-好主意) – sashkello

+0

我想你想'pop()' –

+0

'sys.exit()'是一個不返回函數的好例子。 – yeyo

回答

2

這是一個風格問題。我和其他許多人一致認爲,通常讓函數返回一些東西會更有用 - 特別是返回self而不是None的對象的方法允許鏈接。

不幸的是,這不是Python社區中大多數人的做法,也不是內置庫的創建者所做的。你將不得不學會如何應對這種情況,並且考慮到風格是普遍的,決定你是否想要應對風格之間的切換,或者是否符合主導範式。

+0

**不幸**爲什麼不幸? – eyquem

+0

@eyquem我相信第一段充分解釋。這是一個更靈活的風格。 – Marcin

+1

pyparsing中的大部分類方法都返回自我。我從我的Smalltalk年中挑選了這個,這是典型的習慣用法。 – PaulMcG

0

很有意義如果該函數的目的是發出一個副作用,如改變一個全局變量,執行輸入/輸出或調用其它函數與副作用。最後,「無價值」本身就是一種回報價值,這就是爲什麼例如C編程語言中的函數被標記爲返回類型void。

函數式編程語言將副作用視爲一件壞事,並對其進行限制。

2

函數總是返回一些東西:如果函數調用期間沒有執行return,則返回None

可能發生,沒有return被調用,當這些方法都導致return的條件給出了一個真實的結果,如下面的代碼中excuted:

def f(x): 
    if x==2: 
     return 'hello' 

y = f('brouef') 

print 'y ==',y 

它打印

y == None 

如果函數的代碼塊中沒有return語句,那麼也可能發生這種情況,如下面的代碼所示。

也就是說,算法並不總是要求使用函數的返回值。一個函數可以轉換某些東西,而不會返回任何東西而不是None
例如:

li = [1000] 

def f(x): 
    for i in xrange(100): 
     if i%3==0 and not i in range(20,85): 
      li.append(i) 

print li 
f(li) 
print li 

結果

[1000] 
[1000, 0, 3, 6, 9, 12, 15, 18, 87, 90, 93, 96, 99] 

他是那個採取sort(),例如,使編碼器深知,排序對象代替改變的選擇。這在文檔中說過。

3

許多程序員都支持所謂的Command-query separation。返回值的函數(查詢)通常不會產生副作用,而具有副作用的函數是命令,通常不會返回太多有趣的數據。分離的目的是更容易跟蹤全球狀態的變化。

相關問題