一句 Python 语言能实现哪些神奇功能?我已经例举几十个,还有吗

一句 Python 语言能实现哪些神奇功能?我已经例举几十个,还有吗

一行 Python 能实现什么丧心病狂的功能?

爱心

print'
'.join([''.join([('PYTHON!'[(x-y)%7]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)])

range() 不能用浮点不开心。

一句 Python 语言能实现哪些神奇功能?我已经例举几十个,还有吗

Mandelbrot set

print'
'.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 语言能实现哪些神奇功能?我已经例举几十个,还有吗

八皇后问题

让开,我要装逼了。1行python解八皇后,其中一大半代码是用于打印出来带格式的。

_=[__import__('sys').stdout.write("
".join('.' * i + 'Q' + '.' * (8-i-1) for i in vec) + "
===
") for vec in __import__('itertools').permutations(xrange(8)) if 8 == len(set(vec[i]+i for i in xrange(8))) == len(set(vec[i]-i for i in xrange(8)))]

一句 Python 语言能实现哪些神奇功能?我已经例举几十个,还有吗

终端路径切换到某文件夹下

键入:

python -m SimpleHTTPServer 8000

然后浏览器打开 localhost:8000,一个简易的web服务就开启了,我经常用这个来分享实验室里的电脑上的目录,这样在宿舍也可以方便地获取想要的资料了。

PS:Windows下通过IIS开个ftp也就几步,但如果装了Python,就一行代码。

lambda

其实,只要你功能不是太大。。。那用lambda都可以包裹到一行。

有一个这样的库,可以把你所有python实现,包裹到一行当中,比如这个

x = 3
y = 4
print (x < y < 5)

会下面变成这样:

(lambda x: (lambda y: print(x<y<5))(4))(3)

又比如复杂一点的

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 __builtin__: (lambda __print, __y, d: [(lambda ___: None)(d.guess_my_number(42)) for d.guess_my_number in [(lambda n:[(__y(lambda __this: (lambda d: (lambda __after: [(lambda __after: (lambda ___: __after(d))(__print('Not a positive integer!')) if (d.len(d.user_input)==0 or (not d.user_input.isdigit())) else [(lambda __after: (lambda ___: __after(d))(__print('Too big! Try again!')) if d.user_input>d.n else (lambda __after: (lambda ___: __after(d))(__print('Too small! Try again!')) if d.user_input<d.n else (lambda ___: d.True)(__print('You win!')))(lambda d: __after(d)))(lambda d: __after(d)) for d.user_input in [(d.int(d.user_input))]][0])(lambda d: __this(d)) for d.user_input in [(d.raw_input('Enter a positive integer to guess: '))]][0] if d.True else __after(d))(lambda d: None))))(d) for d.n in [(n)]][0])]][0])(__builtin__.__dict__['print'],(lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args)))),type('StateDict',(),__builtin__.__dict__)()))(__import__('__builtin__')) 

原理是lambda caculus,看一看也挺好玩的。

爬虫库

import requests

对于一个用C++写过爬虫的人来说,没有比这一行更加丧心病狂的了!!!

最经典的还是一行筛质数

filter(lambda x: all(map(lambda p: x % p != 0, range(2, x))), range(2, n)) 

一般而言,Python 的 one-liner 要不就是用到了很好用的库,要不就是用到了一些函数式的特性以及 list comprehension 等。

诚然,filter、map、reduce 以及 all、any 这些东西都能用 list comprehension 乃至过程式的写法来替代,但写习惯了以后会发现这样不仅写着爽而且思路更清晰了! 其实大多数时候也说不上丧心病狂,只是用来完成一些小工作比较简短方便。

随便补充几个自己经常用到的: 读取 csv 文件。with 和 list comprehension 的使用。strip 和 split 也是处理字符串的常用函数。

with open('t.csv', 'r') as f: rows = [line.strip().split(',') for line in f.readlines()] 对 array 按照第二列降序排序并取前 10 个。

匿名函数和切片操作的使用。说起来给 sort/sorted 提供 key 会比提供 cmp 要快。(好像 Python 3 里面把 cmp 给取消了) sorted(array, key=lambda x: x[1], reverse=True)[:10] 对两个字符串(这里假设等长)做异或操作。

join 和 zip 的使用。 "".join([chr(ord(x) ^ ord(y)) for (x, y) in zip(a, b)]) 其他的话,要看具体做什么。

如果写爬虫,requests 配合 pyquery 不要太好用;写数值处理 / 科学计算 的小脚本,有 numpy 就可以省下许多事。标准库里面像 os、re、random 等都有许多实用的函数。

个人觉得过分追求 one-liner 不完全是一件好事,更重要的是把这些常用的函数弄熟了,写起代码来自然得心应手,充分发挥 Python 写起来爽的优势。

同时要经常思考有没有更好的写法,比如我用了很久的 random.randint 才知道原来还有 random.randrange 这种东西。 暂时就这些,想到再来更新。

一行代码输出斐波那契数列

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 range(30)]])

一行代码实现快排算法

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

一行代码实现数组的flatten功能

将多维数组转化为一维

 flatten = lambda x: [y for l in x for y in flatten(l)] if isinstance(x, list) else [x] 

一行代码实现list

有点类似与上个功能的反功能

array = lambda x: [x[i:i+3] for i in range(0, len(x), 3)] 

一行代码实现求解2的1000次方的各位数之和

print(sum(map(int, str(2**1000))))

小编已经说了几十个相关例子了,真不相信还有人能说出更多!

一句 Python 语言能实现哪些神奇功能?我已经例举几十个,还有吗

猜你喜欢

转载自blog.csdn.net/qq_41841569/article/details/82561350