Python语言很优美,语法简单却功能强大。Python有很多非常有用的先进特性,下面挑了最重要的5个特征来讲解。
Lambda函数
Lambda函数是一个匿名函数,不需要对其命名。Python函数通常需要用def 函数名:
来定义函数,但Lambda函数不需要命名,因为它只是用来完成一些不需要复用功能。
一个Lambda函数可以有多个输入,但只能有一个输出。Lambda函数的形式为x= lambda 输入:输出公式
。
下面是一个例子:
x = lambda a, b : a * b
print(x(5, 6)) # 输出为 30
x = lambda a : a*3 + 3
print(x(3)) # 输出为 12
合理的使用Lambda函数可以让Python代码更加简洁工整,更能体现Python语言优美的特征。
Map函数
Map函数是Python的内置(built-in)函数,对一整个序列的元素进行统一的映射。
下面是Map的使用例子:
def square_it_func(a):
return a * a
x = map(square_it_func, [1, 4, 7])
print(list(x)) # 输出为 [1, 16, 49]
def multiplier_func(a, b):
return a * b
x = map(multiplier_func, [1, 4, 7], [2, 5, 8])
print(list(x)) # 输出为 [2, 20, 56]
Filtering
Filter也是Python的内置函数,Filter与Map的功能类似,当函数返回值为True
的时候,才会返回元素。
# 原始数组
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
# 将奇数筛选掉
def filter_odd_numbers(num):
if num % 2 == 0:
return True
else:
return False
filtered_numbers = filter(filter_odd_numbers, numbers)
print(list(filtered_numbers))
# list(filtered_numbers) = [2, 4, 6, 8, 10, 12, 14]
Itertools
Itertools模块包含很多用于控制迭代的工具,迭代可以用在数组(list)、元组(tuple)、字典(dictionary)等等。
使用Itertools可以很大程度地简化代码。下面是几个例子:
from itertools import *
# zip函数,可以将两个长度相等的
# 数组的每个元素变成Tuple并遍历
for i in zip([1, 2, 3], ['a', 'b', 'c']):
print(i)
# ('a', 1)
# ('b', 2)
# ('c', 3)
for i in chain('ABC', 'XYZ'):
print(i)
# 'A' 'B' 'C' 'X' 'Y' 'Z'
# map就不需要解释了吧
# 这里的map覆盖了built-in的map
# itertools的map可以与有限序列
# 结合,并作用在无限序列上
for x in map(lambda x, y: x * y, [1, 2, 3], count(1)):
print(x)
# 1
# 4
# 9
# cycle可以把一个序列转换为无限的迭代器,想结束
# 需要使用Ctrl-C退出循环
cs = cycle('ABC') # 注意字符串也是序列的一种
for c in cs:
print(c)
# repeat负责将一个元素无限重复下去,不过如果提供
# 第二个参数,就可以指定重复次数
ns = repeat('A', 3)
for n in ns:
print(n)
# 打印3次'A'
# count()函数用来提供一个迭代器(无限迭代)
# 其调用格式为:count(start=0, step=1)
# count()是无限的,需要手动Ctrl-C停止迭代
# 但如果和有限可迭代对象一起,就会自动停止了
for i in zip(count(1), ['Bob', 'Emily', 'Joe']):
print(i)
# (0, 'Bob')
# (2, 'Emily')
# (4, 'Joe')
# groupby()函数把相邻重复元素放到一起
a = [1, 1, 1, 2, 2, 2, 3, 3, 3]
for key, value in groupby(a):
print(key, value), end=' ')
# (1, [1, 1, 1])
# (2, [2, 2, 2])
# (3, [3, 3])
# (4, [4])
# (5, [5])
Generator
如果想创建一个100万个元素的列表,可以直接创建列表,但是会占用很大的存储空间。
所以,如果列表元素可以按照某种算法推算出来,可以一边循环一边生成后续的元素所以可以使用生成器Generator。
# 生成1到10的序列
numbers = list()
for i in range(10):
numbers.append(i)
total = sum(numbers)
print(total)
# 45
#使用generator生成10到10的序列
def generate_numbers(n):
num = 0
while num < n:
yield num
num += 1
print(total)
# 45