登陆

极彩娱乐在线平台总代-Python之父:为什么操作符很有用?

admin 2019-05-24 356人围观 ,发现0个评论

这是我在python-ideas上发布的一些东西,但我以为这些很风趣,应该分享给更多的人。

最近有许多关于兼并两个dict(词典)的运算符的评论。

这促进我考虑为什么有些人喜爱运算符,我想起了30多年前与导师Lambert Meertens的一次评论。

关于数极彩娱乐在线平台总代-Python之父:为什么操作符很有用?学家来说,运算符关于他们的考虑方法至关重要。咱们来选取一个简略的操作,比方将两个数相加,并测验研讨它的一些行为。

add(x, y) == add(y, x) (1)

式(1)表明了加法的交换律。它一般用运算符来书写,这使得它更简练:

x + y == y + x (1a)

这似乎是一个小小的收成。

现在咱们来考虑一下结合律:

add(x, add(y, z)) == add(add(x, y), z) (2)

式绘空事(2)能够用运算符重写:

x + (y + z) == (x极彩娱乐在线平台总代-Python之父:为什么操作符很有用? + y) + z (2a)

这比式(2)简略了解得多,并且咱们发现括号是剩余的,所以现在咱们能够这样写:

x + y + z (3)

没有歧义(+ 运算符绑定到左面仍是右边并不重要)。

许多其他规则也能够很简略的运用运算符来写。这儿还有一个关于加法恒等元素的比方:

add(x, 0) == add(0, x) == x (4)

比较于

x + 0 == 0 + x == x (4a)

这儿的总的思维便是一旦你学会了这个简略的表明法,用它们写的方程就比用函数表明法写的方程更简略“操作”——就好像咱们的大脑用不同的大脑机制来把握运算符,这是更有功率的方法。

我以为,运用运算符编写的公式更简略被“视觉化”处理就与此有关: 它们利用了大脑的视觉处理机制,而这一机制在很大程度上是在潜认识中运作的,并且它会通知大脑的认识部分它看到了什么(比方,“椅子”而不是“几块木头连在一起”)。函数符号在咱们的大脑中则有必要走一条不同的途径,这是无认识的(它与内容的阅览和了解有关,这是在比视觉处理更晚的年龄段才学会/练习的)。

当你将多个运算符结合在一起时,视觉处理的功用就会变得十分显着。例如,考虑一下分配律:

mul (n,add(x, y)) == add(mul (n, x) mul (n, y)) (5)

这写起来很动火,我信任一开始你是不会看到这个规则的(或许至少你不会马上看到它,假如我没有说到这是分配律的话)。

与下式比较:

n * (x + y) == n * x + n * y (5a)

留意,这儿也运用了相对的运算符优先级。一般数学家们会把它写得更紧凑:

n(x+y) == nx+ny (5b)

可是,惋惜的是,现在这超出了Python解析器的才能。

运算符表明法的另一个十分强壮的方面是,能够方便地将它们应用于不同类型的目标。例如,规则(1)到(5)在x、y和z是相同巨细的向量,而n是标量(用0向量替代字面量“0”)时也适用,假如它们是矩阵(相同,n有必要是一个标量)也适用。

你能够这样处理不同域中的目标。例如,上面的规则(1)到(5)也适用于函数(n也是一个标量)。

经过明智地挑选运算符,数学家们能够运用他们的视觉大脑来协助他们更好地进行数学研讨: 他们会更快地发现新的风趣的规则,由于有时黑板上的符号就会跳到你面前,给你供给一条通往难以捉摸的数学证明的路途。

现在,编程并不彻底等同于数学,但咱们都知道可读性很重要,这便是Python中运算符重载的效果。一旦你内化了运算符具有的简略特点,运用+号进行字符串或列表衔接将比纯OO表明法更具可读性,上面(2)和(3)解说了(部分程度上)为什么是这样。

当然,这样做肯定有或许做过火——然后你就会运用Perl。但我以为,那些指出“极彩娱乐在线平台总代-Python之父:为什么操作符很有用?现已有方法做到这一点”的人疏忽了一点,即真实了解这一点是比较简略的:

d = d1 + d2

和下面比较:

d = d1.copy ()

d.update(d2) #批改:这一行之前是过错的

这不仅仅是少了几行代码的事: 榜首种方式答应咱们运用咱们的视觉处理,以协助咱们更快的看到它的意思,并且不会极彩娱乐在线平台总代-Python之父:为什么操作符很有用?影响咱们大脑的其他部分(例如,这些部分或许现已被盯梢d1和d2的意思占有)。

当然,任何事情都是有价值的。你有必要学习运算符,并且在应用于不同目标类型时有必要学习它们的特点。(数学中也是如此——关于数字,x*y == y*x,可是这个特点不适用于函数或矩阵; 另一方面,正如结合律相同, x+y == y+x适用于一切状况。)

“可是功能呢?”我听见你这样问。好问题。在我看来,可读性榜首,功能第二。在根本的比方(d = d1 + d2)中,与运用update的两行代码版别比较,没有功能丢失,并且可读性显着提高。我能想到许多状况,功能差异无关紧要,但可读性是最重要的,对我来说,这是默许的假定(即便在Dropbox——咱们最重要的功能代码现已用丑恶的Python或Go重写过了)。关于少量功能至关重要的状况,很简略将运算符版别转换为其他版别——*一旦你确认了这是很有必要的*(或许是经过剖析得出d的)。

英文原文:https://qiniumedia.freelycode.com/vcdn/1/%E4%BC%98%E8%B4%A8%E6%96%87%E7%AB%A0%E9%95%BF%E5%9B%BE2/why_operators_are_useful.pdf 译者:天天向上
请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP