什么时候编写不返回任何内容的函数

时间:2013-07-13 14:41:49

标签: python return

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

我正在玩耍来缩短代码,但第二种情况不起作用。

我认为它不起作用,因为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')

4 个答案:

答案 0 :(得分:4)

许多程序员都支持所谓的Command-query separation。返回值的函数(查询)通常不会产生副作用,而具有副作用的函数是命令,通常不会返回很多有趣的数据。分离的目的是使跟踪全球状态的变化变得更容易。

答案 1 :(得分:2)

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

不幸的是,这不是Python社区中大多数人所做的事情,并不是内置库的创建者所做的。你将不得不学会应对这一点,并且考虑到风格是普遍的,决定你是否想要应对风格之间的转换,或者是否符合主导范式。

答案 2 :(得分:2)

函数总是返回一些内容:如果在调用函数期间没有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()的选择,例如,让编码人员充分意识到已排序的对象已就地更改。这是在文档中说的。

答案 3 :(得分:0)

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

函数式编程语言将副作用看作是一件坏事,并限制它们。