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 · 11 天前 · 2380 次点击

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

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



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

    原因楼上解释了
    muzuiget
        15
    muzuiget  
       10 天前
    实际上 func 运行了个寂寞。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2869 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:17 · PVG 19:17 · LAX 04:17 · JFK 07:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.