# 一行代码实现求阶乘函数 fac = lambda x: __import__('functools').reduce(int.__mul__, range(1, x + 1), 1)
# 一行代码实现求最大公约数函数 gcd = lambda x, y: y % x and gcd(y % x, x) or x
# 一行代码实现判断素数的函数 is_prime = lambda x: x > 1andnot [f for f inrange(2, int(x ** 0.5) + 1) if x % f == 0]
# 一行代码实现快速排序 quick_sort = lambda items: len(items) and quick_sort([x for x in items[1:] if x < items[0]]) + [items[0]] + quick_sort([x for x in items[1:] if x > items[0]]) or items
# 生成FizzBuzz列表 ['Fizz'[x % 3 * 4:] + 'Buzz'[x % 5 * 4:] or x for x inrange(1, 101)]
设计模式从未如此简单
Python是动态类型语言,大量的设计模式在Python中被简化或弱化.
思考:如何优化下面的代码。
1 2 3 4
deffib(num): if num in (1, 2): return1 return fib(num - 1) + fib(num - 2)
代理模式在Python中可以通过内置的或自定义的装饰器来实现。
1 2 3 4 5 6 7 8 9 10 11 12
from functools import lru_cache
@lru_cache() deffib(num): if num in (1, 2): return1 return fib(num - 1) + fib(num - 2)
data = [7, 20, 3, 15, 11] result = [] for i in data: if i > 10: result.append(i * 3)
Pythonic的代码:
1 2
data = [7, 20, 3, 15, 11] result = [num * 3for num in data if num > 10]
遍历列表
跨界开发者的代码:
1 2 3 4 5
fruits = ['orange', 'grape', 'pitaya', 'blueberry'] index = 0 for fruit in fruits: print(index, ':', fruit) index += 1
Pythonic的代码:
1 2 3
fruits = ['orange', 'grape', 'pitaya', 'blueberry'] for index, fruit inenumerate(fruits): print(index, ':', fruit)
确保代码健壮性
跨界开发者的代码:
1 2 3 4 5 6 7
data = {'x': '5'} if'x'in data andisinstance(data['x'], (str, int, float)) \ and data['x'].isdigit(): value = int(data['x']) print(value) else: value = None
Pythonic的代码:
1 2 3 4 5 6
data = {'x': '5'} try: value = int(data['x']) print(value) except (KeyError, TypeError, ValueError): value = None
classPoker(object): def__init__(self): self.cards =[Card(suite, face) for suite in Suite for face inrange(1, 14)] self.current=0 defshuffle (self): self.current=0 random.shuffle(self.cards) defdeal (self): card = self.cards[self.current] self.current+=1 return card defhas_next (self): if self.current<len(self.cards): returnTrue returnFalse
p = Poker() p.shuffle() print(p.cards)
PyLint的安装和使用
Pylint是Python代码分析工具,它分析Python代码中的错误,查找不符合代码风格标准(默认使用的代码风格是
PEP 8)和有潜在问题的代码。