Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
澄清作者的意思(学习Python第5版) 后两个参数也适用于单个字符串参数,例如mysum('spam'),因为字符串是一个字符串的序列 第三种变体适用于任意iterables,包括打开的输入文件mysum(open(name)),但其他变体则不适用,因为它们使用索引 函数头def mysum(first*rest),尽管与第三个变量类似,因为它需要的是单个参数而不是单个iterable_Python_Python 3.x - Fatal编程技术网

澄清作者的意思(学习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)