2

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

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

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

4 回答 4

4

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

于 2013-07-13T15:03:14.207 回答
2

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

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

于 2013-07-13T14:56:59.163 回答
2

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

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

def f(x):
    if x==2:
        return 'hello'

y = f('brouef')

print 'y ==',y

它打印

y == None

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

.

也就是说,算法并不总是需要使用函数返回。一个函数可以转换某些东西而不返回除 a 之外的任何东西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()为了让编码人员清楚地知道已排序的对象已就地更改而做出的选择。那是在文档中说的。

于 2013-07-13T14:57:19.017 回答
0

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

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

于 2013-07-13T14:49:20.947 回答