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
最后修改:2021 年 06 月 01 日 02 : 08 PM
如果觉得我的文章对你有用,请随意赞赏