V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
madpecker009
V2EX  ›  编程

问大家一个问题,为啥 PHP 和 js 计算的结果是 18,而 py2 和 py3 的结果是 12

  •  
  •   madpecker009 · 2020-08-28 16:20:27 +08:00 · 2916 次点击
    这是一个创建于 1555 天前的主题,其中的信息可能已经有所发展或是发生改变。

    php 结果 18

    <?php
    	$m = 4;
    	$n = (++$m) + (++$m) + (++$m);
    	echo $n;
    ?>
    

    js 结果 18

    m=4;
    n = (++m) + (++m) + (++m); 
    console.log(n);
    

    py 结果 12

    m = 4;
    n = (++m) +(++m )+(++m )
    print(n)
    	
    

    这是为什么呢?是程序计算出错了还是说什么其他的原因?

    16 条回复    2020-08-28 22:54:38 +08:00
    111111111111
        1
    111111111111  
       2020-08-28 16:26:45 +08:00
    因为 m 的值没有发生变化,一直都是 4,
    深层原因不清楚,我猜是把`++m` 当作 `0+0+m`处理了?
    6IbA2bj5ip3tK49j
        2
    6IbA2bj5ip3tK49j  
       2020-08-28 16:27:58 +08:00   ❤️ 1
    主要原因是因为写这些东西的人有毛病。
    另外一个原因是 python 不支持++操作。
    6IbA2bj5ip3tK49j
        3
    6IbA2bj5ip3tK49j  
       2020-08-28 16:28:31 +08:00
    @xgfan 病句了
    主要原因是写这些东西的人有毛病。
    Trim21
        4
    Trim21  
       2020-08-28 16:29:56 +08:00 via Android
    python 没有++操作符
    ss098
        5
    ss098  
       2020-08-28 16:30:09 +08:00
    Python 没有 ++ 操作符,使用 +=。

    至于为什么能执行,我也不知道。
    lxrmido
        6
    lxrmido  
       2020-08-28 16:31:11 +08:00
    python 没有自增运算符,++被编译器识别为+了
    polaa
        7
    polaa  
       2020-08-28 16:33:54 +08:00
    ++ is not an operator. It is two + operators. The + operator is the identity operator, which does nothing. (Clarification: the + and - unary operators only work on numbers, but I presume that you wouldn't expect a hypothetical ++ operator to work on strings.)

    ++count
    Parses as

    +(+count)
    Which translates to

    count
    You have to use the slightly longer += operator to do what you want to do:

    count += 1
    -----
    摘自 stackoverflow
    111111111111
        8
    111111111111  
       2020-08-28 16:35:15 +08:00
    @111111111111 + 没有被当作 `0+0+m`, 只是一个单纯正号运算符,一个数字前面加正号,结果与原值相等
    imn1
        9
    imn1  
       2020-08-28 16:42:17 +08:00
    你试试 m = -4
    idealhs
        10
    idealhs  
       2020-08-28 16:46:42 +08:00   ❤️ 1
    中了谭浩强的毒。。。
    tabris17
        11
    tabris17  
       2020-08-28 16:46:47 +08:00
    python 没有++操作符
    (++m) +(++m)+(++m)
    等价于
    (+(+m)) +(+(+m))+(+(+m))
    imn1
        12
    imn1  
       2020-08-28 16:47:50 +08:00
    In [3]: m = -4

    In [6]: n=(++m)+(++m)+(++m)

    In [7]: n
    Out[7]: -12

    看样子 0+0+m 的理解是正确的
    imn1
        13
    imn1  
       2020-08-28 16:50:27 +08:00
    In [8]: +m
    Out[8]: -4


    +m 不是变正值啊?晕了……我去面壁
    xiangyuecn
        14
    xiangyuecn  
       2020-08-28 16:51:31 +08:00
    不支持 又不报语法错误 只能说明什么:这种细节人家压根不考虑,管你死活呢

    +++++++++++++++++++++++++++++++++++m 惊呆了,这是合法语法
    crella
        15
    crella  
       2020-08-28 18:02:10 +08:00 via Android
    Ruby:

    m = 4;
    puts m.object_id
    n = (++m)+(++m)+(++m)
    puts n
    puts m.object_id

    # 9 12 9
    linvaux
        16
    linvaux  
       2020-08-28 22:54:38 +08:00
    @xiangyuecn 我特喵的也惊呆了😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1073 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:59 · PVG 02:59 · LAX 10:59 · JFK 13:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.