V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
GeekHub
holy_sin
V2EX  ›  Python

Python 小白,向各位大佬请教个逗号问题

  •  
  •   holy_sin · 2019-01-29 11:36:17 +08:00 · 3484 次点击
    这是一个创建于 599 天前的主题,其中的信息可能已经有所发展或是发生改变。

    leetcode 279. Perfect Squares

    class Solution(object):
        _dp = [0]
        def numSquares(self, n):
            dp = self._dp
            while len(dp) <= n:
                dp += min(dp[-i*i] for i in range(1, int(len(dp)**0.5+1))) + 1,
            return dp[n]
    

    这是 StefanPochmann 给的 python 版本动态规划答案,不知道 while 循环中的“,”是什么语法,如果去掉会直接运行失败。

    29 条回复    2019-01-31 17:18:41 +08:00
    xpresslink
        1
    xpresslink   2019-01-29 11:40:16 +08:00   ❤️ 1
    加了逗号代表那个是元组
    mayorbryant
        2
    mayorbryant   2019-01-29 11:43:56 +08:00   ❤️ 1
    逗号标识这是一个迭代器的 +=,也就是你代码中的_dp, 去掉逗号的话就是一个 int 的+=操作了,所以会在 return dp[n]报一个`'int' object is not iterable`的错误
    ![]( )
    ericls
        3
    ericls   2019-01-29 11:58:41 +08:00   ❤️ 1
    写这个代码的开除吧。。。
    whoami9894
        4
    whoami9894   2019-01-29 13:49:09 +08:00 via Android
    相当于 dp += [min(xx) + 1]
    Vegetable
        5
    Vegetable   2019-01-29 13:57:33 +08:00
    @ericls
    这么写代码的确应该开除...
    lkmountain
        6
    lkmountain   2019-01-29 14:03:18 +08:00 via Android
    这么写想打死他
    xpresslink
        7
    xpresslink   2019-01-29 14:28:39 +08:00
    @Vegetable 如果都是这种套路,人家这么写就是不想被开除
    Vegetable
        8
    Vegetable   2019-01-29 14:41:28 +08:00
    @xpresslink ...学习了
    holy_sin
        9
    holy_sin   2019-01-29 16:53:50 +08:00
    @whoami9894 没毛病
    dendi009
        10
    dendi009   2019-01-29 17:37:43 +08:00
    MMP,想打死他 +1。 为什么要逗号, 因为 list 不能跟 int 相加。
    shm7
        11
    shm7   2019-01-29 19:07:27 +08:00 via iPhone
    @dendi009 因为[]离得远还要写 2 个?
    kaneg
        12
    kaneg   2019-01-29 20:44:43 +08:00
    代码行数是少了,但真的是影响可读性。
    这个如果在我们公司里,Code Review 是不给过的。
    Raisu
        13
    Raisu   2019-01-29 21:38:52 +08:00 via Android
    开除吧,看不懂不一定是自己问题
    holy_sin
        14
    holy_sin   2019-01-29 21:55:10 +08:00
    @Raisu 老哥这个是 leetcode 的一个用户,哈哈
    mmdsun
        15
    mmdsun   2019-01-30 00:01:17 +08:00 via Android
    请问 py 为什么这样设计?既然()就是元祖的意思为啥还要多加一个逗号(1,)?
    PulpFunction
        16
    PulpFunction   2019-01-30 04:42:41 +08:00 via Android
    这个问题有意思哎 在线程传参数遇到过
    zeanzhou
        17
    zeanzhou   2019-01-30 04:55:09 +08:00
    @mmdsun #15 #15 是不是因为括号还表示优先运算?
    ysc3839
        18
    ysc3839   2019-01-30 05:49:59 +08:00 via Android
    @mmdsun
    @zeanzhou 是的。
    billwsy
        19
    billwsy   2019-01-30 06:08:33 +08:00
    应该写个 append,干嘛+=
    master13
        20
    master13   2019-01-30 08:14:48 +08:00
    看到大家都要开除这个答案,我就放心了
    ijustdo
        21
    ijustdo   2019-01-30 08:50:45 +08:00
    没毛病
    araraloren
        22
    araraloren   2019-01-30 09:00:16 +08:00
    @mmdsun 因为`括号`是一个正常的语法啊,这在其他编程语言中处理基本是一样的
    qcts33
        23
    qcts33   2019-01-30 09:11:37 +08:00
    @mmdsun 括号本身是强制提升运算优先级啊,加逗号才是 tuple
    vipppppp
        24
    vipppppp   2019-01-30 09:19:51 +08:00
    @mmdsun
    兄弟你是不是很少用 if 语句啊。。。
    括号在 if 语句经常使用啊,第一是提升运算符优先级,第二是 if 换行啊,当你写了一个很长的 if 语句,PEP8 建议使用()隐形换行。。。
    vipppppp
        25
    vipppppp   2019-01-30 09:24:45 +08:00
    上次手抖,写接口返回给前端的时候
    写了句
    data = list(my_dict.values()),
    真的是血炸,找了很久的 bug....
    xpresslink
        26
    xpresslink   2019-01-30 11:22:21 +08:00
    @mmdsun 兄弟你肯定没有认真看书,或都看了一些很二的教程。元组定义就是用逗号分隔的一组元素,跟括号根本没有关系好吧。只是因为大多情况下在表达式中需要用括号做定界符。a=1, a=1,2,3 a 就是元组了,根本不用括号。
    mmdsun
        27
    mmdsun   2019-01-30 13:27:27 +08:00 via Android
    @xpresslink 不好意思了。没学过 py 只是好奇语法。现在明白了。感谢回复。
    yim7
        28
    yim7   2019-01-30 14:03:24 +08:00
    我之前写代码不小心加上逗号,debug 找了一会,主要是在修改同事代码,语句有点长没注意到,一直觉得这是语法的坑。用这个特性的该打
    WayToGo
        29
    WayToGo   2019-01-31 17:18:41 +08:00
    为了省点眼神,还是写成 tuple(a)
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2435 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 12:15 · PVG 20:15 · LAX 05:15 · JFK 08:15
    ♥ Do have faith in what you're doing.