函数调用 return func 和 return result 有什么区别吗?

2022-08-06 10:28:57 +08:00
 miniyao

函数调用 return func 和 return result 有什么区别吗?

函数调用 return func 和 return result 运行结果是一样的,这两种写法的区别是什么?

def func(list):
    list[0] = 4
    return func # 和 return list 有什么区别吗?

if __name__ == '__main__':
    list = [1,2,3]
    func(list)
    print(list)
3177 次点击
所在节点    Python
15 条回复
Trim21
2022-08-06 10:36:15 +08:00
你这个例子里不需要函数的返回值,你就是不 return 都可以...
reter
2022-08-06 10:48:40 +08:00
返回 func 可以链式调用? func(list)(list1)(list2)
zhuweiyou
2022-08-06 10:53:39 +08:00
你这个例子跟 return 半毛钱关系都没有
xiri
2022-08-06 11:46:37 +08:00
我寻思着你这个例子也用不上 retrun 的东西啊
zxCoder
2022-08-06 13:50:15 +08:00
????? 啥问题这是
JounQin
2022-08-06 15:07:58 +08:00
这就是 Python 程序员?
DOLLOR
2022-08-06 15:11:00 +08:00
我怀疑又是 X-Y 问题
markgor
2022-08-06 15:29:20 +08:00
我不熟 python ,
但是我记得有变量域存在的吧?
1->list = [1,2,3]
2->func(list)
2.1->list[0] = 4
2.2->return func
3->print(list)
結果:[1,2,3]
因為 func 中修改 list 並不會導致外部的 list 變動(變量域)
所以無論 func 最後 return 什麼,都不會對外部的 list 改變
而為什麼是 return func ,那是為了鏈式調用,如 2# 所說的。
learningman
2022-08-06 16:14:15 +08:00
如果这是 python 的话,你还把默认的 list shadow 掉了
ispinfx
2022-08-06 17:43:17 +08:00
这个问题有点离谱
snw
2022-08-06 17:53:46 +08:00
@markgor
Python 的 list 是 mutable ,所以函数传参时传的是引用,所以在函数内对 list 的操作会影响到被传入的 list ,所以结果是[4,2,3]
realpg
2022-08-06 21:06:48 +08:00
@JounQin #6
python 程序员不是会写爬虫就够了
t2jk4000
2022-08-06 21:25:09 +08:00
建议楼主好好跟着书上的例子学吧,现在先别想这些有的没的
Osk
2022-08-06 23:07:58 +08:00
@snw 哈哈, 想到了 python 的神坑之一:

def func(a=[]):
...



lz 你好, 这种写法可能会埋下 bug, 稍微好一点点的写法是, func 中接收到传入的 list 后, 对源列表进行一次复制, 使用
new_list = list.copy() 或 new_list = list[:]
都行,
然后对 new_list 进行操作.

原因楼上解释了
muzuiget
2022-08-07 07:36:17 +08:00
实际上 func 运行了个寂寞。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/871039

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX