一行Python

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

1、打印九九乘法表

# 打印九九乘法表
print('\n'.join([' '.join(['%s*%s=%-2s' % (y, x, x * y) for y in range(1, x + 1)]) for x in range(1, 10)]))

2、打印质数

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

3、import语句也是可以省略的

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

4、画心

# 画心
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)]))

5、map对象是延迟加载的

# 不加list是不会打印的,因为map对象是延迟加载的
list(map(lambda x: print(x), ("hello world",)))

6、打印阶乘

print((lambda functools: functools.reduce(lambda x, y: x * y, range(5)))(__import__("functools")))

7、实现递归

#此函数就是真正的业务递归过程,其他结构均是辅助,我们可以提取出来
job = lambda f:lambda l: 0 if len(l) == 0 else l[0] + f(l[1:])

g = (lambda y: job(lambda x: y(y)(x)))(lambda y: job(lambda x: y(y)(x)))

print(g([1,2,3]))

参考资料

http://locatino.github.io/2015/08/03/playing-python-lambda/

猜你喜欢

转载自www.cnblogs.com/weiyinfu/p/9094459.html