python3 三目运算符,python 三目运算

  python3 三目运算符,python 三目运算

  人们喜欢优化。它们易于理解和应用.但不久前,在看Twig的pull请求时,我看到了一个关于PHP中三元运算符性能的有趣讨论。

  你知道下面哪个片段最快吗?当然,他们做完全相同的事情。//代码片段1

  $tmp=isset($context[test])?$ context[ test ]:;

  //代码片段2

  if(isset($context[test]).

  $ tmp=$ context[ test ];

  }否则{

  $ tmp=“”;

  }

  正确答案是:

  看情况。在大多数情况下,它们的速度是一样的。没必要在意。但是,如果$context[test]包含大量数据,代码片段2将比代码片段1快得多。

  下面是我用来测试不同场景的代码:$ context=array( test =true);

  ///可选file-inthetestvaluewithlotsofdata

  for($ I=0;10万美元;$i ) {

  $ context[ test ][$ I]=$ I;

  }

  //youcanalsojustcreateabigstring

  //$context=str_repeat(,1000000);

  //基准测试

  $ time=microtime(true);

  for($ I=0;100美元;$i ) {

  //要进行基准测试的代码片段

  $tmp=isset($context[test])?$ context[ test ]:;

  }

  printf(time:%0.2d(n),)microtime)-$ time)* 1000);

  请注意,这里的绝对性能数字是没有意义的。我们只是想比较不同段之间的速度。

  在我的笔记本电脑上,snippet 1运行2秒多,snippet 2运行0.05 ms左右,这是很大的区别!但是,如果要测试的变量不包含很多数据,速度就差不多了。

  那么,为什么三元运算符在某些情况下会变慢呢?为什么要依赖存储在测试变量中的值?

  答案很简单:

  三元运算符总是复制值,但if语句不会。为什么?因为PHP使用了一种称为“写时复制”的技术:当给变量赋值时,PHP不会创建变量内容的副本,直到它被实际修改。

  在编写语句时(例如,$tmp=$context[test]),很少出现$tmp变量,只出现对$context[test]变量的引用。这么快。但是如果要修改变量,PHP会把原来的:$ tmp=$ context[ test ];

  //现在开始复制

  $ tmp[]=true;

  //copyalsoconsiftheoriginalvariablechanges

  //$ context[ test ][]=true;

  如上所述,三元运算符的速度与复制语句结果所需的时间直接相关,即使没有严格要求。复制一个包含100,000个元素的数组需要时间。

  如果你用的是PHP 5.3,有没有比用新PHP更简单的方法?构造:是指我们的语言:$tmp=$context[test]? ;

  但是从性能上来说,这种新结构和标准结构有着相同的缺点,这可能使PHP能够优化变量的存在。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: