5个Python特性 越早知道越好的

Kirill Sharkovski 发布在 Unsplash 杂志上的照片

AI开发者按，Python 是近十年来兴起的编程语言，并且被证明是一种非常强大的语言。我用 Python 构建了很多应用程序，从交互式地图到区块链。Python 有很多特性，初学者很难一开始就掌握所有的特性。

1.理解 List——压缩代码

Lambda 是一种在一行中组合函数以供一次性使用的方法。如果函数被多次调用，性能将受到影响。另一方面，map 将函数应用于列表中的所有元素，而 filter 将获取满足用户定义条件的集合中元素的子集。

add_func = lambda z: z ** 2

is_odd = lambda z: z%2 == 1

multiply = lambda x,y: x*y

aList = list(range(10))

print(aList)

# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Anastase Maragos 发表在 Unsplash 杂志上的照片

# Syntax of list comprehension
[ expression(x) for x in aList if optional_condition(x) ]
print(list(map(add_func, aList)))

print([x ** 2 for x in aList])

# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

print(list(filter(is_odd, aList)))

print([x for x in aList if x%2 == 1])

# [1, 3, 5, 7, 9]

# [1, 3, 5, 7, 9]

2.列表循环

Python 允许使用负索引，其中 Altruts [-1]＝= Altrue[LeN（Listor）-1 ]。因此，我们可以通过调用 a list[-2] 等获得列表中的倒数第二个元素。

Martin Shreder 发表在 Unsplash 杂志上的照片

a, b, c, d = aList[0:4]

print(f'a = {a}, b = {b}, c = {c}, d = {d}')

# a = 0, b = 1, c = 2, d = 3

a, *b, c, d = aList

print(f'a = {a}, b = {b}, c = {c}, d = {d}')

# a = 0, b = [1, 2, 3, 4, 5, 6, 7], c = 8, d = 9

3.压缩和枚举：for 循环

Zip 函数创建一个迭代器，该迭代器聚合来自多个列表的元素。它允许在 for 循环中并行遍历列表并并行排序。它可以用星号来解压缩。

numList = [0, 1, 2]

engList = ['zero', 'one', 'two']

espList = ['cero', 'uno', 'dos']

print(list(zip(numList, engList, espList)))

# [(0, 'zero', 'cero'), (1, 'one', 'uno'), (2, 'two', 'dos')]

for num, eng, esp in zip(numList, engList, espList):

print(f'{num} is {eng} in English and {esp} in Spanish.')

# 0 is zero in English and cero in Spanish.

# 1 is one in English and uno in Spanish.

# 2 is two in English and dos in Spanish.
Eng = list(zip(engList, espList, numList))

Eng.sort() # sort by engList

a, b, c = zip(*Eng)

print(a)

print(b)

print(c)

# ('one', 'two', 'zero')

# ('uno', 'dos', 'cero')

# (1, 2, 0)

Erol Ahmed 发表在 Unsplash 杂志上的照片

upperCase = ['A', 'B', 'C', 'D', 'E', 'F']

lowerCase = ['a', 'b', 'c', 'd', 'e', 'f']

for i, (upper, lower) in enumerate(zip(upperCase, lowerCase), 1):

print(f'{i}: {upper} and {lower}.')

# 1: A and a.

# 2: B and b.

# 3: C and c.

# 4: D and d.

# 5: E and e.

# 6: F and f.

4.生成器：内存效率

def gen(n):    # an infinite sequence generator that generates integers >= n

while True:

yield n

n += 1

G = gen(3)     # starts at 3

print(next(G)) # 3

print(next(G)) # 4

print(next(G)) # 5

print(next(G)) # 6

5.虚拟环境：isolation

Matthew Kwong 发布在 Unsplash 上的照片

Python 应用程序通常使用很多不同的包，这些包来不同的开发人员，具有复杂的依赖关系。不同的应用程序是使用特定的库设置开发的，其中的结果不能使用其他库版本复制。不存在一次安装就满足所有应用要求的情况。

conda create -n venv pip python=3.7  # select python version
source activate venv
...
source deactivate