我是新手,希望有人可以帮我解决我的基本问题,以帮助澄清我的概念。
我正在玩耍来缩短代码,但第二种情况不起作用。
我认为它不起作用,因为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')
答案 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。
函数式编程语言将副作用看作是一件坏事,并限制它们。