[问题] 函数有无返回值?

楼主: 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