一行 Python 代码

Life is short, just use Python.

自从08年接触Python,就有爱不释手的感觉,逐渐地,有些不忍地疏远了Perl 和Shell编程,因为python 的优雅么? 不全是,主要是可以高效开发吧。

那一行代码可以干什么呢?

有趣

我孩子的英文名叫andy,也许当初教他写程序的时候,如果先秀一下这行代码,可能就更能激起他对代码的兴趣了。

再python 里执行它,会输出一个字符拼出的心形。

LoveAndy

字符图形还是很有趣的,有一个著名的图像叫mandelbrot。Mandelbrot图像中的每个位置都对应于公式N=x+y*i 中的一个复数,高中学过复数的都还应该有印象。每个位置用参数N来表示,它是x*x+y*y的平方根。如果这个值大于或等于2,则这个数字对应的位置值是0。如果参数N的值小于2,就把N的值改为N*N-
N(N=(x*x-y*y-x)+(2*x*y-y)*i)),并再次测试这个新N值。wiki百科给出的图像是这样的:
Mandelbrot

让我们用一行代码画一个Mandelbrot:

这里写图片描述

高效

对于随手小工具而言,更是Python的拿手好戏。

一行代码打印九九乘法表:

输出:
乘法表

一行代码计算出1-1000之间的素数

一行代码可以输出前100项斐波那契数列的值:

一行代码实现阶乘,而且还带交互:

一行代码实现摄氏度与华氏度之间的转换器:

至于字符串排序和快速排序更是手到擒来。

内涵

看一看下面一行python代码,可能就要晕了:

猜数游戏

这是原来为了激发孩子编程兴趣,让孩子练习的代码,它的真实面貌是大致这样的:

实际上,只要理解了函数式编程,使用神奇的Lambda,配合列表推导以及复杂一点的判断语句,任何的python 代码都可以转换成一行代码的。

例如,取一个列表里的随机数

转换成Lambda 可以是:

这些代码出了觉得好玩,主要是可以帮助我们了解某些Python的雕虫小记,尤其是神奇的Lambda 用法

延展

当然,还有其他好玩的地方,输入下面这一行

它打开了浏览器,展示网站上的漫画和相关内容:
python 打开浏览器

我们可以把python的文件打包,做成库的形式,然后import进来,是一种偷换概念和前提的一行代码。例如,为了与windows 传输文件,再Mac上临时搭个ftp:

这当然要依赖pyftpdlib 这个库了,机器上没有,pip install pyftpdlib 就可以了。

如果一行代码中允许分号存在,那就只是牺牲可读性而已了,那就基本上无所不能。

在连网的前提下,获取公网IP地址

一行代码就可以轻易写个小游戏了,来模拟一下golf击球。

输入角度和力量大小如(0.8,80),就能得到一条字符描画的抛物线了。
增加上while 等语句,画一个没完没了的

maze wall

最后,一行代码以python 的哲学结束吧。

参考资料:
http://www.zhihu.com/question/37046157
https://onelinepy.herokuapp.com/
https://github.com/csvoss/onelinerizer

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

8 37 收藏 13 评论

关于作者:abel_cao

半吊子全栈工匠一枚,20多年老码农,无所成,有初心,自娱自乐的微信公众号 wireless_com ,记录日常点滴...... 个人主页 · 我的文章 · 25 ·    

相关文章

可能感兴趣的话题



直接登录
最新评论
  • iPixelOldC 学生,Python爱好者 2016/10/24

    WoW,好厉害!!!

  • jackyspy   2016/10/27

    作者所举的例子都非常有吸引力,虽然平时很少会把Python代码写到一行这么长。不过这说明了Python语言的简练和强大。

    求素数的代码存在一个bug,因为range不包含end参数,所以需要在int(i++.5)后面➕1。原来的程序会出现25、49等平方数。

    字符串排序可以更简练:

    我也是Python的重度依赖者,太❤️

  • GaryHost   2016/10/28

    很优雅的语言

  • Mr.君陌 攻城狮 2016/10/28

    膜拜

  • DXkite 学生党 2016/10/30

    额?所谓一行代码?……

    还不如写一个库,然后就 something.run(); ……

    • abel_cao 半吊子全栈工匠 2016/10/30

      一行代码更多是对python 的列表推导,匿名函数lambda 等多重使用,提高对这些技能的理解,纯粹就是为了好玩

  • lilin2333   2016/10/30

    学习了

  • 有意思

  • JamesXie 软件工程师 2016/11/14

    作者所举的例子都非常有吸引力,虽然平时很少会把Python代码写到一行这么长。不过这说明了Python语言的简练和强大。正在学习Python中。

  • golf击球那个,terminal输入

    python -c "import math as m;a,v=eval(input());[print('%03d'%x+' '*m.floor(0.5+x*m.tan(a)-x*x/(v*m.cos(a)))+'o') for x in range(102)]"

    结果有syntax error:

     

    File "<string>", line 1

    import math as m;a,v=eval(input());[print('%03d'%x+' '*m.floor(0.5+x*m.tan(a)-x*x/(v*m.cos(a)))+'o') for x in range(102)]

    ^

    SyntaxError: invalid syntax

     

    小白不懂原因,请各位大神赐教

     

  • 敢问楼主用的什么编译器?

     

跳到底部
返回顶部