本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

【组图】【朝花夕拾】(4)

时间:2016-12-05 19:46来源:报码现场 作者:www.wzatv.cc 点击:
使用list comprehension可以杜绝掉50%以上的for循环,后者的效率极其低下(可以看看C源码的实现),而且不够紧凑。我之前上面举的第一个粒子就是list comprehen

  使用list comprehension可以杜绝掉50%以上的for循环,后者的效率极其低下(可以看看C源码的实现),而且不够紧凑。我之前上面举的第一个粒子就是list comprehension的很好的运用。

  随便举个python官方文档的粒子:

  >>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x !=y]

  运行结果得到,

  [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

  反转一个数列的例子,j2直播,是个one-liner :

  lis[::-1]

  3. 正则表达式

  Python正则表达是内置的。一个粒子是我在实验室测试Josephson Junctions时碰到的情况,简化的说就是:我有几百个文件夹,每个文件夹有几百个文件,每个文件有几万条数据,每几个数据我要处理完然后存在另外一个文件夹的另外一个文件里。我要做的工作有:

  - 用正则表达式找到我要的文件夹和文件,剔除不需要的;

  - 逐行读出txt文件里面的数据;

  - 每几个数据设个参数平均,最小二乘处理,剔除几个极端情况,画出图;

  - 保存 这里Python就起到了一个脚本语言应尽的责任了。

  整个从打开文件到保存 不超过150行,还加上我罗哩叭嗦的注释。如果用C写... 呵呵呵呵呵呵。当然这个用Shell也不会太差,不过实验室用的是windows,用windows脚本我还不如去死。自从我写完这个脚本后,从此我们实验室的testing就过上了幸福的生活。(可能么?)

  4.reduce, lambda, filter 和map

  这些全来自于函数式编程。比如找到prime之内的质数:

  filter(lambda prime: all(prime%num for num in range(2, prime)), range(2,prime))

  如果作为中文读出来则是(prime是之前给定的一个数):在2到prime之间,过滤出那些所有不被2到自己整除的数。难道还能更简单么!如果用的C, 呵呵。 这里出现了Zen of Python没有提到但是是Python里非常重要的一点,对“数”的操纵。毕达哥拉斯信奉一切皆数,程序语言更应算更是如此,只有对“数”和“类型”的完全掌控,才能如鱼得水。

  5. 语言的动态性

  Python是动态语言,这是非常重要的一点,一直忘了说。这一点可以直接完爆C++自己一向自豪的泛型编程,模板编程。且看一个strangeness为0的粒子:

  def build(type, value):

  return type(value)

  build(int, 0)

  所以稀饭们请看过来, 你们家C可以三行写出这种东西么?!!没完,接着:

  def impose(func, value):

  return func(value)

  def anyfunc(value):

  return value*value

  print impose(anyfunc, value) #此处是python2.7的语法

  一看就知道是函数式编程。请问C可以么?!

  当然还有之前说的函数参数的灵活性:

  如果定义一个函数

  def print_whatevercrapsthefuckinguserinputs

  (**params):

  print params

  你就可以想输入多少参数就输入多少了,比如:

  print_whatevercrapsthefuckinguserinputs(“I",”dont", "give", "a", "fuck“),

  只要有print函数的接口(这又涉及了鸭子类型和类似haskell的typeclass的性质, 呱....)。其实际作用是 比如你想在数据库里输入大批量用户信息,mi amigo,对于这样一个蛋疼的函数名字,调用一次就够了。

  在Python里类型,函数,全部都是可操作的对象。这可以改变一切。第一个例子显示了对数据类型的操作,第二个是对函数的操作,第三个是对参数的控制。我不想想象用C写这个例子了,因为C根本写不出来。 以上所有这些Python的特性,你可能说我用C实现一个一样的就好了。诚然,你可以在C里一个个写出来自己喜欢的特性,但是你写到后面你会发现你只是再次发明了Python,然后拿C重新写了一个解释器, 而且实现得更烂而已。Please! Don't re-invent the wheel。

Python的类库齐全

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容