python - 澄清作者的意思(学习Python第五版)

标签 python python-3.x

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.pyrest = []这意味着它会给我 <_io.TextIOWrapper name='script1.py' mode='r' encoding='cp1252'>因为不是[]是真的。

最佳答案

作者想要一个将可迭代对象(例如列表、元组等)作为输入并返回总和的函数,例如像这样:

mysum(open("script1.py"))

当你写的时候

mysum(*open("script1.py"))

这大致相当于

f = open("script1.py").readlines()
mysum(f[0], f[1], ..., f[n])

请注意,这里您的代码不采用可交互作为输入,而是采用几个单独的参数,这不是作者想要的

关于python - 澄清作者的意思(学习Python第五版),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45690186/

相关文章:

python - 表征我的 RAW 相机输出

python - 如何在matplotlib中设置常量figsize

python - 在 Python argparse 中,是否可以配对 --no-something/--something 参数?

python - 写从 0 到 1000000000 的数字

python - 将最长的字段放入数据框列

python - 如何在代码中包含与 Mercurial 提交相关的唯一 ID?

python - Redis 中 TransactionDB 的 getRange 等价物是什么?

python - 在 python 中使用多个输出流?

python - 需要找到有效的方法来找到强数

python-3.x - Pyinstaller 可执行文件失败并出现 pkg_resources.DistributionNotFound 错误