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

2020-08-28 16:20:27 +08:00
 madpecker009

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)
	

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

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

至于为什么能执行,我也不知道。
lxrmido
2020-08-28 16:31:11 +08:00
python 没有自增运算符,++被编译器识别为+了
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
2020-08-28 16:35:15 +08:00
@111111111111 + 没有被当作 `0+0+m`, 只是一个单纯正号运算符,一个数字前面加正号,结果与原值相等
imn1
2020-08-28 16:42:17 +08:00
你试试 m = -4
idealhs
2020-08-28 16:46:42 +08:00
中了谭浩强的毒。。。
tabris17
2020-08-28 16:46:47 +08:00
python 没有++操作符
(++m) +(++m)+(++m)
等价于
(+(+m)) +(+(+m))+(+(+m))
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
2020-08-28 16:50:27 +08:00
In [8]: +m
Out[8]: -4


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

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

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

# 9 12 9
linvaux
2020-08-28 22:54:38 +08:00
@xiangyuecn 我特喵的也惊呆了😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/702243

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX