V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
miniyao
V2EX  ›  Python

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

  •  
  •   miniyao · 2022-08-06 10:28:57 +08:00 · 3303 次点击
    这是一个创建于 832 天前的主题,其中的信息可能已经有所发展或是发生改变。

    函数调用 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)
    
    15 条回复    2022-08-07 07:36:17 +08:00
    Trim21
        1
    Trim21  
       2022-08-06 10:36:15 +08:00
    你这个例子里不需要函数的返回值,你就是不 return 都可以...
    reter
        2
    reter  
       2022-08-06 10:48:40 +08:00 via Android
    返回 func 可以链式调用? func(list)(list1)(list2)
    zhuweiyou
        3
    zhuweiyou  
       2022-08-06 10:53:39 +08:00
    你这个例子跟 return 半毛钱关系都没有
    xiri
        4
    xiri  
       2022-08-06 11:46:37 +08:00 via Android
    我寻思着你这个例子也用不上 retrun 的东西啊
    zxCoder
        5
    zxCoder  
       2022-08-06 13:50:15 +08:00
    ????? 啥问题这是
    JounQin
        6
    JounQin  
       2022-08-06 15:07:58 +08:00 via iPhone   ❤️ 1
    这就是 Python 程序员?
    DOLLOR
        7
    DOLLOR  
       2022-08-06 15:11:00 +08:00
    我怀疑又是 X-Y 问题
    markgor
        8
    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
        9
    learningman  
       2022-08-06 16:14:15 +08:00 via Android
    如果这是 python 的话,你还把默认的 list shadow 掉了
    ispinfx
        10
    ispinfx  
       2022-08-06 17:43:17 +08:00 via iPhone
    这个问题有点离谱
    snw
        11
    snw  
       2022-08-06 17:53:46 +08:00 via Android   ❤️ 1
    @markgor
    Python 的 list 是 mutable ,所以函数传参时传的是引用,所以在函数内对 list 的操作会影响到被传入的 list ,所以结果是[4,2,3]
    realpg
        12
    realpg  
       2022-08-06 21:06:48 +08:00
    @JounQin #6
    python 程序员不是会写爬虫就够了
    t2jk4000
        13
    t2jk4000  
       2022-08-06 21:25:09 +08:00
    建议楼主好好跟着书上的例子学吧,现在先别想这些有的没的
    Osk
        14
    Osk  
       2022-08-06 23:07:58 +08:00   ❤️ 1
    @snw 哈哈, 想到了 python 的神坑之一:

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



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

    原因楼上解释了
    muzuiget
        15
    muzuiget  
       2022-08-07 07:36:17 +08:00
    实际上 func 运行了个寂寞。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1186 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:32 · PVG 02:32 · LAX 10:32 · JFK 13:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.