很典型的文章,基本可以展示Python代码到底有多黑魔法。虽然文中有些案例连我都觉得走火入魔,但真的很值得一看。。。

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

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

有趣

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

>>> print'\n'.join([''.join([('AndyLove'[(x-y)%8]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ')for x in range(-30,30)])for y in range(15,-15,-1)])

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

字符图形还是很有趣的,有一个著名的图像叫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:

>>> print'\n'.join([''.join(['*'if abs((lambda a:lambda z,c,n:a(a,z,c,n))(lambda s,z,c,n:z if n==0else s(s,z*z+c,c,n-1))(0,0.02*x+0.05j*y,40))2 else' 'for x in range(-80,20)])for y in range(-20,20)])

高效

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

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

print '\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)])

输出:

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

print(*(i for i in range(2, 1000) if all(tuple(i%j for j in range(2, int(i**.5))))))

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

print [x[0] for x in [ (a[i][0], a.append((a[i][1], a[i][0]+a[i][1]))) for a in ([[1,1]], ) for i in xrange(100) ]]

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

>>> reduce ( lambda x,y:x*y, range(1,input()+1))

10

3628800

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

>>> print((lambda i:i not in [1,2] and "Invalid input!" or i==1 and (lambda f:f

1,Celsius to Fahrenheit

2,Fahrenheit to Celsius

Please input 1 or 2

1

Please input a Celsius temperature:28

82.4

>>>

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

"".join((lambda x:(x.sort(),x)[1])(list(‘string’)))

qsort = lambda arr: len(arr) > 1 and qsort(filter(lambda x: x<=arr[0], arr[1:] )) + arr[0:1] + qsort(filter(lambda x:x>arr[0], arr[1:] )) or arr

内涵

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

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

def guess_my_number(n):

while True:

user_input = raw_input("Enter a positive integer to guess: ")

if len(user_input)==0 or not user_input.isdigit():

print "Not a positive integer!"

else:

user_input = int(user_input)

if user_input > n:

print "Too big ! Try again!"

elif user_input < n:

print "Too small ! Try again!"

else:

print "You win!"

return True

guess_my_number(42)

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

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

import random as rnd

print rnd.choice([2,3, 5,7, 11,13,17])

转换成Lambda 可以是:

print (lambda rnd: rnd.choice([1, 2, 3, 10]))(__import__('random'))

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

延展

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

import antigravity

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

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

$ python -m pyftpdlib

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

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

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

python -c "import socket; sock=socket.create_connection(('ns1.dnspod.net',6666)); print sock.recv(16); sock.close()"

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

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)]"

输入角度和力量大小如(0.8,80),就能得到一条字符描画的抛物线了。

增加上while 等语句,画一个没完没了的

python -c "while 1:import random;print(random.choice('╱╲'), end='')"

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

$ python -c "import this"

The Zen of Python, by Tim Peters

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

Now is better than never.

Although never is often better than *right* now.

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!

你想更深入了解学习Python知识体系,你可以看一下我们花费了一个多月整理了上百小时的几百个知识点体系内容:

python一行代码是什么意思_一行Python代码能做什么?相关推荐

  1. 一行python代码值多少钱_一行python代码

    Life is short, just use Python. 自从08年接触Python,就有爱不释手的感觉,逐渐地,有些不忍地疏远了Perl 和Shell编程,因为python 的优雅么? 不全是 ...

  2. python代码库能干什么_一行Python代码能做什么?

    很典型的文章,基本可以展示Python代码到底有多黑魔法.虽然文中有些案例连我都觉得走火入魔,但真的很值得一看... 自从08年接触Python,就有爱不释手的感觉,逐渐地,有些不忍地疏远了Perl ...

  3. python上一行的代码打错了怎么办_写Python代码过程中碰到各种错误异常要怎么样去处理?...

    错误异常即便Python程序的语法是正确的,在程序运行的过程中,也可能发生错误.运行期检测到的错误被称为异常. 如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因. ...

  4. python游戏代码运行不了_用Python写游戏,不到十分钟就学会了

    安装pygame 请自行下载对应python版本的pygame 运行以下命令 创建Pygame窗口及响应用户输入 新建一个文件夹alien_invasion,并在文件夹中新建alien_invasio ...

  5. python视频处理为卡通风格_使用python代码将照片变成卡通图片

    今次介绍用代码来实现这项任务,可以就此探查各种滤镜的内部机制. 制作环境:Windows10,Python2.7,Anaconda 任务描述:将D盘某文件夹中的所有图片使用代码进行卡通化,然后保存到另 ...

  6. 为什么python代码运行不了_为什么Python代码能运行但是PyCharm给我画红线?

    PyCharm在遇到模块找不到时,会使用红色波浪线提醒开发者.这本来是一个非常好的功能,但却由于另外一个问题,会给一些Python初学者造成困扰. 这一篇文章,我们讲讲工作区导致的这个问题. 首先我们 ...

  7. python代码怎么变成软件_从Python代码到APP,你只需要一个小工具:GitHub已超6000星

    点击上方Python知识圈,选择设为星标 回复1024获取Python资料 选自TowardsDataScience作者:Adrien Treuille机器之心编译参与:魔王.一鸣 阅读文本大概需要 ...

  8. python界面小游戏贪吃蛇_用Python实现童年贪吃蛇小游戏功能的实例代码

    贪吃蛇作为一款经典小游戏,早在 1976 年就面世了,我最早接触它还是在家长的诺基亚手机中. 尽管贪吃蛇的历史相对比较久远,但它却有着十分顽强的生命力,保持经久不衰,其中很重要的原因便是游戏厂家不断的 ...

  9. 手机python代码查询四六级准考证_【python】【转载】四六级准考证号找回

    今天是四六级查成绩的时间,班里一位同学忘了准考证号,问有没有方法找回.于是我先在咱们吾爱找找有没有方法,但是只找到一个,可是失效了.于是就开始csdn,百度进行搜索,但最终那些方法还是无果. 最后通过 ...

最新文章

  1. 请收下这份NLP热门词汇解读
  2. vc 版本 宏 (zz.IS2120@BG57IV3)
  3. Linux之虚拟机里的REHL7的IP
  4. 信息系统项目管理知识--信息系统建设
  5. MongoDB 文档的更新操作
  6. 服务网关zuul之二:过滤器--请求过滤执行过程(源码分析)
  7. HIT Software Construction Review Notes(2-2 Process, Systems, and Tools of Software Construction)
  8. Github 平均 Star 为 3558 的机器学习开源项目,你错过了哪些?
  9. opensuse 14.1设置默认root自动登录
  10. 绝命毒师口语精析(3)
  11. os系统安装python_在MacOS系统上安装疯子Python
  12. Profinet IO设备
  13. dsp2812 pmsm foc之中断初始化
  14. 【STC15W402AS程序下载问题】
  15. 智能语言处理之依存树计算句子结构相似度计算
  16. 计算机网络管理员路由与交换深圳积多少分,2020年深圳积分入户,哪些加分的证书总结?...
  17. 因果推断what if
  18. 算法4第6章后缀数组讲解
  19. 新单词 part 13
  20. 这是一篇假的回顾过去展望未来计划书

热门文章

  1. beetl 页面标签_beetl模板页面使用shiro标签
  2. mac APP软件是32位还是64位
  3. Vue父子组件及mixins生命周期执行顺序
  4. 《古诗词三首》教学设计
  5. word图片自动编号,前面加章节号
  6. App动效原理和应用设计
  7. LoopBar – Tap酒吧与无限滚动
  8. 用Visual C#发送电子邮件(1)
  9. 今天工作的效率不高,才写了一个打印管理类
  10. windows环境安装Telegraf