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

看板Python作者 (不是我)時間7年前發表 (2017/12/27 09:27), 7年前編輯推噓16(16037)
留言53則, 16人參與, 8年前最新討論串1/2 (看更多)
菜鳥我在學Python時,有個最大的疑惑就是: "為什麼有些函數需要有東西去接,有些不用?" 像是split函數,我學的時候是這樣用的 str=str.split(' ') 這樣才能把split後的字串存進去,而不能 str.split(' ') 就好。 但像是append函數, list.append(objctive) 就可以把物件加到list後面,而不用 list=list.append(objective) 。 我目前的理解是split函數有回傳值,而append沒有,所以一個要用=,一個不用, 不知這樣是否正確? 另外,在學這些函數時有方法知道到底要不要用=嗎? 還是只能看範例照做,或是看說明文件了? 謝謝大家~~ -- ╭─╮ ──╮ ╭─┤╭╮ ╭╭─╮╮ ╭ │ │ │ ││││││ ││││ ╰─╮ ╭─┼╮╰─┼╯││││○││││ │ │ ││ │ ││││ ││││ ╰─╯ ╰─╯╰──╯ ╰╰╯╰─╯╰╯╯ 傻瓜,我們都一樣~~ ψsagwow -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.119.153 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1514366821.A.326.html

12/27 17:44, 7年前 , 1F
python其實每個函式都有回傳值,不寫return也會隱式回
12/27 17:44, 1F

12/27 17:45, 7年前 , 2F
傳None,所以都可以assign給某變數
12/27 17:45, 2F

12/27 17:46, 7年前 , 3F
你的疑惑比較是要去瞭解函式行為是否影響到receiver
12/27 17:46, 3F

12/27 17:47, 7年前 , 4F
又再可能要去瞭解mutable還有immutable,有點複雜
12/27 17:47, 4F

12/27 17:47, 7年前 , 5F
str = str.split() 問題是你不一定要用str接 可以a=st
12/27 17:47, 5F

12/27 17:47, 7年前 , 6F
r.split() 這樣str就還在
12/27 17:47, 6F

12/27 17:49, 7年前 , 7F
不過學函式不就從看文件起?再不然就是看code這是肯定的
12/27 17:49, 7F

12/27 17:50, 7年前 , 8F
開發者考慮的也許是mutable的機率 像ls鐵定更改自己
12/27 17:50, 8F

12/27 17:50, 7年前 , 9F
的機會高
12/27 17:50, 9F

12/27 18:19, 7年前 , 10F
list就是要用來原地修改的,不然用tuple就好
12/27 18:19, 10F

12/27 18:21, 7年前 , 11F
一般來說函數就是要用回傳值而非副作用運作,
12/27 18:21, 11F

12/27 18:22, 7年前 , 12F
只是這裡你遇到的是方法
12/27 18:22, 12F

12/27 18:23, 7年前 , 13F
這種情況要看方法的原始碼 用久就熟悉了
12/27 18:23, 13F

12/27 19:20, 7年前 , 14F
因為字串不可變, list 可變.不可變的東西你當然要另傳
12/27 19:20, 14F

12/27 20:06, 7年前 , 15F
你後面要用到回傳值就去接,用不到就不用接
12/27 20:06, 15F

12/27 20:09, 7年前 , 16F
有副作用的函數比較常不用接是因為你只是要它的副作用
12/27 20:09, 16F
感謝各位的意見! ※ 編輯: sagwow (140.113.119.153), 12/27/2017 20:40:38

12/27 22:24, 7年前 , 17F
這應該是bound function跟unbound function
12/27 22:24, 17F

12/28 01:04, 7年前 , 18F
樓上不對, 兩個都是bound喔
12/28 01:04, 18F

12/28 02:18, 7年前 , 19F
應該是因為原 po 用的詭異變數名才讓他誤會這是 bound
12/28 02:18, 19F

12/28 02:18, 7年前 , 20F
unbound 問題吧, 我第一眼也以為他是直接呼叫 str.split
12/28 02:18, 20F

12/28 02:19, 7年前 , 21F
仔細看才確定原文想表達什麼問題
12/28 02:19, 21F

12/28 07:55, 7年前 , 22F
這個只能背了,函數式程式設計的精神是不做inplace修改,但
12/28 07:55, 22F

12/28 07:56, 7年前 , 23F
結果就是記憶體用量大增,而傳統程式則是看你怎麼寫,大部分
12/28 07:56, 23F

12/28 07:58, 7年前 , 24F
情況下為了省記憶體,且確定資料不需保留後面使用,就會做
12/28 07:58, 24F

12/28 07:59, 7年前 , 25F
inplace條改,所以你只能記那些回傳,那些是inplace修改...
12/28 07:59, 25F

12/28 08:01, 7年前 , 26F
R採用函數式程式設計,所以所有函數都回傳不修改原值.所以
12/28 08:01, 26F

12/28 08:02, 7年前 , 27F
不用特別記,傳進去的東西不會被改. 而python就看程式怎麼寫
12/28 08:02, 27F

12/28 08:03, 7年前 , 28F
有些會修改傳入資料,有些是不修改回傳新的..只能用記的
12/28 08:03, 28F

12/28 12:47, 7年前 , 29F
immutable 和 functional 沒有必然關係
12/28 12:47, 29F

12/28 12:48, 7年前 , 30F
完全是設計者的考慮而已
12/28 12:48, 30F

12/28 16:28, 7年前 , 31F
這跟functional有關?? 沒吧 同樓上就是單純設計時的考量
12/28 16:28, 31F

12/28 16:29, 7年前 , 32F
就看怎麼用而已
12/28 16:29, 32F

12/28 16:32, 7年前 , 33F
發現好像說一樣的東西 當我沒推文
12/28 16:32, 33F

12/29 09:04, 7年前 , 34F
哭哭,我寫程式寫很久也是有這種疑問 O_Q
12/29 09:04, 34F

12/29 15:09, 7年前 , 35F
我也是初學者 這超困擾我...
12/29 15:09, 35F

12/29 15:13, 7年前 , 36F
而且有時候明明就只是想玩一下,不想修改原物件,反而還
12/29 15:13, 36F

12/29 15:13, 7年前 , 37F
要多做一次.copy
12/29 15:13, 37F

12/29 15:16, 7年前 , 38F
function vs. method對我來說也是莫名其妙 QQ
12/29 15:16, 38F

12/29 15:18, 7年前 , 39F
R的method就會掛在function 再讓function吃該data type
12/29 15:18, 39F

12/29 15:21, 7年前 , 40F
不會有len(list) vs. list.sort() 卻沒有sort(list)
12/29 15:21, 40F

12/29 15:35, 7年前 , 41F
有C的指標概念應該好理解吧 只是沒接觸過的話就是要硬記了
12/29 15:35, 41F

12/29 15:43, 7年前 , 42F
沒有 sort() 但有 sorted 啊
12/29 15:43, 42F

12/29 16:04, 7年前 , 43F
好吧 我舉了不好的例子 那再舉一個 XD
12/29 16:04, 43F

12/29 16:05, 7年前 , 44F
是list.append(...) 卻不是append(list, ...)
12/29 16:05, 44F

12/29 16:14, 7年前 , 45F
a = [1, 2, 3, 4]
12/29 16:14, 45F

12/29 16:14, 7年前 , 46F
append = list.append
12/29 16:14, 46F

12/29 16:15, 7年前 , 47F
append(a, 5)
12/29 16:15, 47F

12/29 16:15, 7年前 , 48F
print(a)
12/29 16:15, 48F

12/29 16:16, 7年前 , 49F
我是來當新人殺手的
12/29 16:16, 49F

12/29 21:17, 7年前 , 50F
:O!!! 居然還可以這樣...
12/29 21:17, 50F

12/29 22:51, 7年前 , 51F
a.f(b) == type(a).f(a, b)
12/29 22:51, 51F

01/07 15:37, 8年前 , 52F
函數還是方法
01/07 15:37, 52F

01/15 22:07, 8年前 , 53F
instance method第一個參數是self,所以可以這樣寫?
01/15 22:07, 53F
文章代碼(AID): #1QGsTbCc (Python)
討論串 (同標題文章)
文章代碼(AID): #1QGsTbCc (Python)