def mysum(L):
return 0 if not L else L[0] + mysum(L[1:])
def mysum(L):
return L[0] if len(L) == 1 else L[0] + mysum(L[1:])
def mysum(L):
first, *rest = L
return first if not rest else first + mysum(rest)mysum('spam'),因为字符串是单字符字符串的序列。mysum(open(name)),但其他变量不工作,因为它们使用索引。def mysum(first *rest),虽然类似于第三个变体,因为它需要单个参数,而不是一个可迭代的参数。作者似乎在暗示,以(first, *rest)作为输入参数的变量不能处理文件,但在对其进行实验之后,我发现它确实有效。
# Code I tried:
def mysum(first, *rest):
return first if not rest else first + mysum(*rest)mysum(*open("script1.py"))工作得很好。
我认为mysum(open("script1.py"))不能工作,因为python会看到的是first = open("script1.py和rest = [],这意味着它会给我<_io.TextIOWrapper name='script1.py' mode='r' encoding='cp1252'>,因为[]不是真的。
发布于 2017-08-15 09:41:35
作者希望一个函数以一个可迭代的(例如列表、元组等)作为输入,并返回和,例如:
mysum(open("script1.py"))当你写
mysum(*open("script1.py"))这大致相当于
f = open("script1.py").readlines()
mysum(f[0], f[1], ..., f[n])请注意,这里您的代码不接受可交互的输入,而是使用几个独立的参数,这不是作者想要的。
发布于 2017-08-15 10:49:43
用元组来解释发生了什么。*sequence语法用于解压缩。
numbers = (1, 2, 3)
mysum(*numbers) # this happens: mysum(1, 2, 3)等于mysum(1, 2, 3)。成员从可迭代性中提取,并作为参数输入函数。使用*open('path/to/file')会打开文件并将其内容作为参数传递给mysum(L)。这相当于mysum(open('path/to/file').read())
https://stackoverflow.com/questions/45690186
复制相似问题