【问题标题】:When do you write function that doesn't return anything你什么时候写不返回任何东西的函数
【发布时间】:2013-07-11 22:59:13
【问题描述】:

我是新手,希望有人可以帮助我解决我的基本问题,以帮助澄清我的概念。

我正在尝试缩短代码,但第二种情况不起作用。

我认为它不起作用,因为 remove() 不返回任何内容。对吗?

这让我感到疑惑。您什么时候想要编写不返回任何内容的函数?即使可能会被使用,归还某些东西不是总是好的吗?您如何使用不返回任何内容的函数。

s = 'abc'

# This remove a from the abc
x = list(s)
x.remove('a')

# if remove() can return the list this would be simpler
x = list(s).remove('a')

【问题讨论】:

标签: python return


【解决方案1】:

许多程序员都支持所谓的Command-query separation。返回值(查询)的函数一般不会有副作用,而有副作用的函数是命令,一般不会返回太多有趣的数据。分离的目的是更容易跟踪全局状态的变化。

【讨论】:

    【解决方案2】:

    这是风格问题。我和其他许多人都同意,一般来说,让函数返回一些东西会更有用 - 特别是,返回 self 而不是 None 的对象的方法允许链接。

    不幸的是,Python 社区中的大多数人都不是这样做的,内置库的创建者也不是这样做的。你将不得不学会应对这种情况,并且鉴于这种风格无处不在,决定你是要应对风格之间的转换,还是要遵循主流范式。

    【讨论】:

    • 很遗憾 ??为什么不幸??
    • @eyquem 我相信第一段已经充分解释了。这是一种更灵活的风格。
    • pyparsing中的大部分类方法都返回self。这是我从 Smalltalk 时代学到的,这是典型的习语。
    • @PaulMcGuire 是的,这很令人沮丧,因为 Python 在很多方面都类似于 smalltalk。
    【解决方案3】:

    函数总是返回一些东西:如果在函数调用期间没有执行return,则返回None

    当导致return 的条件都没有给出True 结果时,可能会在调用期间没有执行return,如以下代码所示:

    def f(x):
        if x==2:
            return 'hello'
    
    y = f('brouef')
    
    print 'y ==',y
    

    打印出来

    y == None
    

    如果函数的代码块中没有return 语句,也可能发生这种情况,如下面的代码所示。

    .

    也就是说,算法并不总是需要使用函数返回。除了None,一个函数可以转换一些东西而不返回任何东西。
    例如:

    li = [1000]
    
    def f(x):
        for i in xrange(100):
            if i%3==0 and not i in range(20,85):
                li.append(i)
    
    print li
    f(li)
    print li
    

    结果

    [1000]
    [1000, 0, 3, 6, 9, 12, 15, 18, 87, 90, 93, 96, 99]
    

    这是为sort() 所做的选择,例如,让编码人员清楚地知道排序对象已就地更改。文档里是这么说的。

    【讨论】:

      【解决方案4】:

      如果函数的目的是产生副作用,例如更改全局变量、执行输入/输出或调用具有副作用的其他函数,那么它是有意义的。最后,“无价值”本身就是一个返回值,这就是为什么例如C 编程语言中的函数使用返回类型 void 进行标记。

      函数式编程语言将副作用视为一件坏事,并加以限制。

      【讨论】:

        猜你喜欢
        • 2023-02-07
        • 2016-11-10
        • 1970-01-01
        • 2019-09-14
        • 1970-01-01
        • 2020-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多