澄清作者的意思(学习Python第5版) 后两个参数也适用于单个字符串参数,例如mysum('spam'),因为字符串是一个字符串的序列 第三种变体适用于任意iterables,包括打开的输入文件mysum(open(name)),但其他变体则不适用,因为它们使用索引 函数头def mysum(first*rest),尽管与第三个变量类似,因为它需要的是单个参数而不是单个iterable
作者似乎是在暗示将澄清作者的意思(学习Python第5版) 后两个参数也适用于单个字符串参数,例如mysum('spam'),因为字符串是一个字符串的序列 第三种变体适用于任意iterables,包括打开的输入文件mysum(open(name)),但其他变体则不适用,因为它们使用索引 函数头def mysum(first*rest),尽管与第三个变量类似,因为它需要的是单个参数而不是单个iterable,python,python-3.x,Python,Python 3.x,作者似乎是在暗示将(first,*rest)作为输入参数的变体无法处理文件,但在对其进行实验后,我发现它确实有效 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 re
(first,*rest)
作为输入参数的变体无法处理文件,但在对其进行实验后,我发现它确实有效
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(*open(“script1.py”)
工作正常
我认为
mysum(open(“script1.py”))
不起作用,因为python接下来看到的是first=open(“script1.py
和rest=[]
,这意味着它会给我
,因为不是[]
是真的。作者想要一个接受iterable(例如列表、元组等)的函数作为输入并返回总和,例如:
# Code I tried:
def mysum(first, *rest):
return first if not rest else first + mysum(*rest)
当你写作时
mysum(open("script1.py"))
这大致相当于
mysum(*open("script1.py"))
请注意,在这里,您的代码没有将一个interable作为输入,而是使用了几个独立的参数,这不是作者想要的。使用元组来解释发生了什么。
*sequence
语法用于解包
f = open("script1.py").readlines()
mysum(f[0], f[1], ..., f[n])
相当于
mysum(1,2,3)
。成员从iterable中提取并作为参数输入函数。使用*open('path/to/file')
可打开文件并将其内容作为参数传递到mysum(L)
。这相当于mysum(open('path/to/file')。read()
关于SO的问题必须是独立的,不依赖外部链接。代码必须是可复制文本的形式,而不是图像。请看@PM2Ring Ah差点犯了一个新手错误哈好谢谢你的解释!我现在明白了:-)
numbers = (1, 2, 3)
mysum(*numbers) # this happens: mysum(1, 2, 3)