[問題] 函數有無返回值?

作者: sagwow (不是我)   2017-12-27 17:26:56
菜鳥我在學Python時,有個最大的疑惑就是:
"為什麼有些函數需要有東西去接,有些不用?"
像是split函數,我學的時候是這樣用的
str=str.split(' ')
這樣才能把split後的字串存進去,而不能 str.split(' ') 就好。
但像是append函數,
list.append(objctive)
就可以把物件加到list後面,而不用 list=list.append(objective) 。
我目前的理解是split函數有回傳值,而append沒有,所以一個要用=,一個不用,
不知這樣是否正確?
另外,在學這些函數時有方法知道到底要不要用=嗎?
還是只能看範例照做,或是看說明文件了?
謝謝大家~~
作者: tedwu2001   2017-12-27 17:44:00
python其實每個函式都有回傳值,不寫return也會隱式回傳None,所以都可以assign給某變數你的疑惑比較是要去瞭解函式行為是否影響到receiver又再可能要去瞭解mutable還有immutable,有點複雜
作者: KyotoAnime (京アニ)   2017-12-27 17:47:00
str = str.split() 問題是你不一定要用str接 可以a=str.split() 這樣str就還在
作者: tedwu2001   2017-12-27 17:49:00
不過學函式不就從看文件起?再不然就是看code這是肯定的
作者: KyotoAnime (京アニ)   2017-12-27 17:50:00
開發者考慮的也許是mutable的機率 像ls鐵定更改自己的機會高
作者: mikapauli (桜花)   2017-12-27 18:19:00
list就是要用來原地修改的,不然用tuple就好一般來說函數就是要用回傳值而非副作用運作,只是這裡你遇到的是方法
作者: vi000246 (Vi)   2017-12-27 18:23:00
這種情況要看方法的原始碼 用久就熟悉了
作者: freeunixer (御劍客)   2017-12-27 19:20:00
因為字串不可變, list 可變.不可變的東西你當然要另傳
作者: mantour (朱子)   2017-12-27 20:06:00
你後面要用到回傳值就去接,用不到就不用接有副作用的函數比較常不用接是因為你只是要它的副作用
作者: Yshuan (倚絃)   2017-12-27 22:24:00
這應該是bound function跟unbound function
作者: bibo9901 (function(){})()   2017-12-28 01:04:00
樓上不對, 兩個都是bound喔
作者: uranusjr (←這人是超級笨蛋)   2017-12-28 02:18:00
應該是因為原 po 用的詭異變數名才讓他誤會這是 boundunbound 問題吧, 我第一眼也以為他是直接呼叫 str.split仔細看才確定原文想表達什麼問題
作者: vfgce (小兵)   2017-12-28 07:55:00
這個只能背了,函數式程式設計的精神是不做inplace修改,但結果就是記憶體用量大增,而傳統程式則是看你怎麼寫,大部分情況下為了省記憶體,且確定資料不需保留後面使用,就會做inplace條改,所以你只能記那些回傳,那些是inplace修改...R採用函數式程式設計,所以所有函數都回傳不修改原值.所以不用特別記,傳進去的東西不會被改. 而python就看程式怎麼寫有些會修改傳入資料,有些是不修改回傳新的..只能用記的
作者: CaptainH (Cannon)   2017-12-28 12:47:00
immutable 和 functional 沒有必然關係完全是設計者的考慮而已
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2017-12-28 16:28:00
這跟functional有關?? 沒吧 同樓上就是單純設計時的考量就看怎麼用而已發現好像說一樣的東西 當我沒推文
作者: henry8168 (番薯猴)   2017-12-29 09:04:00
哭哭,我寫程式寫很久也是有這種疑問 O_Q
作者: clsmbstu   2017-12-29 15:09:00
我也是初學者 這超困擾我...而且有時候明明就只是想玩一下,不想修改原物件,反而還要多做一次.copyfunction vs. method對我來說也是莫名其妙 QQR的method就會掛在function 再讓function吃該data type不會有len(list) vs. list.sort() 卻沒有sort(list)
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2017-12-29 15:35:00
有C的指標概念應該好理解吧 只是沒接觸過的話就是要硬記了
作者: bibo9901 (function(){})()   2017-12-29 15:43:00
沒有 sort() 但有 sorted 啊
作者: clsmbstu   2017-12-29 16:04:00
好吧 我舉了不好的例子 那再舉一個 XD是list.append(...) 卻不是append(list, ...)
作者: tedwu2001   2017-12-29 16:14:00
a = [1, 2, 3, 4]append = list.appendappend(a, 5)print(a)我是來當新人殺手的
作者: clsmbstu   2017-12-29 21:17:00
:O!!! 居然還可以這樣...
作者: mikapauli (桜花)   2017-12-29 22:51:00
a.f(b) == type(a).f(a, b)
作者: Zundel (編圓人)   2016-01-07 15:37:00
函數還是方法
作者: smallreader (小讀者)   2016-01-15 22:07:00
instance method第一個參數是self,所以可以這樣寫?

Links booklink

Contact Us: admin [ a t ] ucptt.com