python - 海象运算符到底有多高效

工具:%%timeit
时长排序

if 1:0  if语句 # 10.8 ns 之所以写在前面,只是因为他必须带一个东西,那去除这个东西的话,他是最快的
if True:0 # 11+ ns
0 '' pass 数值 # 10.4 ns
0+0 2**2 简单运算 # 11.4 ns
b=a 变量传递指针 # 23.8 ns
b=(a:=0) 海象酱 # 24.1 ns
if (c:=0):'' # 24+ ns
b=a=0 同时赋值 # 25.2 ns
if 1:a 神奇的if # 25.9 ns if带我飞
a 读取变量 # 26.1 ns
if 1:a=0 # 28.9 ns
if a:=1:'' # 29 ns 关键看这两行
a,b=0,0 真同时赋值 # 29.5 ns
a=0 赋值 # 28 ns ~ 34 ns
a=0;b=0 # 36 ns
a=0;b=a # 43.2 ns
list1[50] # 44.6 ns
list1[0] # 47.4 ns 列表的索引可能是从后往前做的!即出栈

以上看出一些事情,首先因为代码运行是要热身的,所以赋值和在if中赋值产生了奇妙的感觉。
个人猜想:if是个很快的入口,他快速的带动了系统的活性,所以if语句比常规语句还要快。

海象酱其实也挺快的,只是我第一次测试他时,使用的是2**2的数值,这个数值也很快,快到掩盖了海象酱的性能,产生海象酱比邓禹还要慢很多的错觉!

%%timeit
f=2**3
if f>0:f
71.1 ns ± 2.07 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%%timeit
if 2**3>0:2**3
32.6 ns ± 1.56 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%%timeit
if (f:=2**3)>0:f
271 ns ± 10.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%%timeit
f=list1[50]
if f>0:f
76.1 ns ± 1.67 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%%timeit
if list1[50]>0:list1[50]
114 ns ± 1.96 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%%timeit
if (f:=list1[50])>0:f
96.3 ns ± 3.08 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

嘛!不管怎么说,海象酱我现在认了。至于是否有时海象酱有实打实的作用,现在想不到,但曾经因为要回去多写一段而烦恼过。就例如我刚才,是先写int再在里面写input,还是先写input,再在外面括int,一瞬间就忘了地说。

而海象酱虽然没有怎么提高效率,但也没拉什么后腿,而且这个方便会不会有欲罢不能的感觉,毕竟鼠标和光标什么最讨厌了!

if list1[50]:
    list1[50]
    list1[50]
150 ns ± 6.26 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

v=list1[50]
if v:
    v
    v
74.1 ns ± 14.6 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

if (v:=list1[50]):
    v
    v
67 ns ± 7.01 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

来一发养刀术,实战亮了

加括号会拖慢吗?

因为这个新奇的符号,在运算中是怎么个优先级呢,按理说他和=是同一个优先级,但是因为他是出现在别的表达式里面的,所以经常会出现语法报错,加个括号就没问题,但括号会占用多少的运算时长呢:

1+2*2
10.6 ns ± 1.05 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)

1+(2*2)
10.5 ns ± 0.924 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)

感觉良好,如果不确定的话,括号确实方便,但是也很容易乱,少半边括号什么的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值