鱼C论坛

 找回密码
 立即注册
查看: 1860|回复: 6

[已解决]关于sum()函数的一个神奇用法的疑惑

[复制链接]
发表于 2017-6-7 17:29:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. a = [[1, 2], [3, 4], [5, 6]]
  2. b = sum(a,[])
  3. print(b)
复制代码

输出
  1. [1, 2, 3, 4, 5, 6]
复制代码


这个到底是怎么理解?
sum()函数的第二个参数应该是start,但是我把b = sum(a,[])改成b = sum(a,start=[])或者b = sum(a,start="[]")都报错
所以,这个用法到底是怎么用的,那这个[]代表的了什么?
最佳答案
2017-6-7 17:54:17
gopythoner 发表于 2017-6-7 17:41
我的问题是b = sum(a,[])这个用法的第二个参数到底是什么意思
https://stackoverflow.com/questions/12202311/python-sum-function-start-parameter-explanation-required
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-7 17:33:42 | 显示全部楼层
仔细看报错就知道 sum 这个函数不接受 keyword 参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-7 17:41:08 | 显示全部楼层
hldh214 发表于 2017-6-7 17:33
仔细看报错就知道 sum 这个函数不接受 keyword 参数

我的问题是b = sum(a,[])这个用法的第二个参数到底是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-7 17:54:17 | 显示全部楼层    本楼为最佳答案   
gopythoner 发表于 2017-6-7 17:41
我的问题是b = sum(a,[])这个用法的第二个参数到底是什么意思
https://stackoverflow.com/questions/12202311/python-sum-function-start-parameter-explanation-required
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-7 18:08:31 | 显示全部楼层
sum()函数的构成已经搞清楚了,这个用法还是挺实用的
我用help(sum)看到第二个参数是默认的start=0,我还以为可以添加start=,居然是不能给这个参数命名的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 10:19:40 | 显示全部楼层
如果把你原来的代码改下
a = [[1, 2], [3, 4], [5, 6]]
b = sum(a,[7])
print(b)

[7,1,2,3,4,5,6]
结果总是把start处的值放到首位,这是为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 10:28:58 | 显示全部楼层
山沟流水 发表于 2017-6-8 10:19
如果把你原来的代码改下
a = [[1, 2], [3, 4], [5, 6]]
b = sum(a,[7])

sum的逻辑应该是这样的:
  1. def sum(values, start = 0):
  2.     total = start
  3.     for value in values:
  4.         total = total + value
  5.     return total
复制代码

如果start=[7]表示start也是一个列表,两个列表相加,其实就是列表的extend的运算,所以最终就等于是把2维列表展开成1维列表了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 08:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表