Python函数语法糖 python中的语法糖( 三 )


语法糖太多了点,当然 , 这是纯粹的个人感觉 。语法糖是把双刃剑,用的好,可以简化编写和阅读 , 但是太多,往往容易引入语法混乱和额外的约束 。
另外,语言的自构建特性混乱 。虽说不是每门语言都强调自构建特性,但是通常而言,都是使用C实现一个内核,由内核实现一些基础操作 。再由基础操作实现更复杂的操作 。每层的边界都是比较清晰的 。谁来告诉我,python中有多少库在移植时是由纯python实现的?库的相互依赖层级是?
python的沙盒化也是个问题,如果沙盒做的够好 , 我完全可以把python作为一个客户级别的平台 。用C写一个很简单的类似浏览器的东西,下载一个URL的python包回去运行(或者仅仅检查更新) 。从而保证本地效果/跨平台/安全性 。现在?一个都保证不了 。我连把一个python包转移到另一台同构设备上都很麻烦(如果两者不是严格匹配,例如系统差异,系统版本差异)无论是web开发还是移动终端开发都必须走传统模式 。
Python 有哪些好玩的语法糖?什么是语法糖?
很多人在Python语法糖相关的问题,但是估计其中有不少同学甚至都不知道语法糖是什么概念 。
其实 , 它并没有那么高大上,如果你跟着正常的学习链路把一门编程语言的语法学会,可能你日常开发过程中已经用到了很多语法糖 。
在正式回答问题之前,我觉得有必要先解释一下什么是语法糖 。
语法糖(Syntactic sugar),由英国计算机科学家Peter J. Landin于1964年提出,简单来说,语法糖是指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用 。语法糖让程序更加简洁,有更高的可读性 。
引用维基百科上的一个例子:
举一个比较常见的for循环的例子:
满足同样的功能和效果,我们可以通过while来实现:
这就是一个简单的语法糖 。
由此可见 , 语法糖并不是什么高大上的东西,可能我们现在开发中已经用了很多Python语法糖 。
除此之外,语法糖还派生出一些词汇 。例如 , 语法盐(syntactic salt),指的是不容易写出坏代码的语法特性 。语法糖精(syntactic saccharine) , 或者说语法糖浆(syntactic syrup) , 指的是未能让编程更加方便的附加语法 。
花了很大功夫来解释什么是语法糖,为的就是让大家更加容易理解、循序渐进,而不是上来就罗列一堆语法糖,很多基础薄弱的同学不明所以 。
讲完语法糖的概念,接下来就介绍一些Python中那些好玩的语法糖 。
魔法方法(Magic methods),有时也被称为特殊方法,是一种具有预定义名称的方法,其特征是在开头和结尾处有双下划线,例如,init。
它们之所以是 "魔法",是因为这些方法是间接调用的,你不需要直接调用它们,一切都在背后完成 。
例如,当你实例化一个类 x = MyClass() 时,Python 将调用new和init进行构造或者初始化 。
举一个简单的打印字符串的例子:
其实它间接的调用了背后的魔法方法 , 我们可以来试一下:
可以看出,repr其实就是绑定到知名的print()方法上了 。
除此之外,还有很多常用的魔法方法和我们常用的操作效果相同的:
装饰器是典型的Python语法糖 , 通过装饰器的使用,可以让Python语法格外简洁,而且可读性也很高 。
比如,我现在写了3个函数,并且要统计3个函数的执行时间 。
按常规的需要这样写:
这样不仅麻烦 , 而且有很多冗余代码 。

推荐阅读