1. Lambda表达式
在Python中渐渐成为常见的函数使用方法是lambda函数,也叫匿名函数。它能在方法内临时创建一个小函数,使代码更简洁,更易读
1.1 基础语法
一个基本的lambda表达式例子:
f = lambda x, y: x + y
print(f(2, 3)) #输出5
通过lambda表达式定义一个相加函数,变量x和y分别是传入的参数,返回一个x和y之和。
1.2 与sort()方法结合使用
Lambda表达式与内置的sort函数搭配使用时,能快速、简便地得到符合特定条件的排列。例如,当你需要按照某个键或属性排序时,可以通过lambda表达式来指定:
old_list = [1, 5, 16, 8, 9, 0, 3]
new_list = sorted(old_list, key=lambda x: -x)
print(new_list)
这段程序将列表中的元素进行降序排序。key参数将每个元素作为参数传给lambda函数。程序输出:
[16, 9, 8, 5, 3, 1, 0]
1.3 与map()方法结合使用
lambda表达式也可以应用于内置的Python函数map(),map让你可以以一种简单的方式将一个已存在的函数应用到一组数据上。λ函数这很方便,您可以很快地定义一个小函数,而不必显式地编写函数。
old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
new_list = map(lambda x: x ** 2, old_list)
print(list(new_list))
# 或者
print([i**2 for i in old_list])
程序用map()计算列表old_list中每个元素的平方,并输出:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
[1, 4, 9, 16, 25, 36, 49, 64, 81]
2. 装饰器
装饰器是Python中的一种高级函数,允许你用一个函数修改另一个函数。装饰器向现有函数添加金丝雀测试、日志记录、计时等一些功能,而不需要修改函数原始结构。
2.1 基础语法
一般地,Python中的函数是第一类对象,他们可以像其他对象一样传递和使用。 最简单的装饰器可以用一个话题来描述
def new_decorator(original_func):
def wrap_func(*args, **kwargs):
print("Before the function runs")
original_func(*args, **kwargs)
print("After the function runs")
return wrap_func
def func_needs_decorator():
print("The function needs a decorator")
decorated_func = new_decorator(func_needs_decorator)
decorated_func()
通过wrap_func函数的调用,我们在原始程序之前和之后输出消息,提示人们代码正在执行。它看起来像一种特殊类型的函数,可以修改和执行包装器函数的原始函数。
2.2 语法糖
Python提供了方便编写装饰器的语法糖: "@" 符号。 每当明确提到 "@decorator" 时,它实际上只是调用了语法糖代码:
def new_decorator(original_func):
def wrap_func(*args, **kwargs):
print("Before the function runs")
original_func(*args, **kwargs)
print("After the function runs")
return wrap_func
@new_decorator
def func_needs_decorator():
print("The function needs a decorator")
func_needs_decorator()
通过语法糖简化了指定封装器的过程,现在就可以愉快地在代码周围添加装饰器,以放置代码或添加某种功能。
3. 生成器
Python的生成器是一种构建了序列的类,与普通的对象不同,它们按需生成值。Python的生成器在读取和操作大型数据集方面提供了极大的灵活性和效率。
3.1 基础语法
要创建简单的生成器,可以定义一个包含”yield”的函数:
def simple_generator():
yield 1
yield 2
yield 3
for i in range(10):
yield i
# Using the generator
for value in simple_generator():
print(value)
在我们的示例中,我们创建了一个简单的生成器函数simple_generator()。它包含几个yield语句,因为yield会生成一些返回给调用方的值。一旦更多的值被需要,它会从停止的地方恢复执行。这意味着生成器保持了状态,而不是被遗忘,我们在 for循环结束前可以在代码中取用这些状态。
3.2 协程
协程是一个函数,可以接受输入并且产生输出,但是在生成器的基础上,它增加了代码的控制,可以在任何时候中断和继续执行
def co_routine():
i = 0
while True:
line = yield
print(f"{i}: {line}")
i += 1
# create an instance of the coroutine
coro = co_routine()
# start the coroutine
next(coro)
# "send" inputs to the coroutine
coro.send("hello")
协程可以不间断的执行,这在大量运行时操作的I / O密集型工作中是有用的,因为操作可能需要很长时间才能完成。而且它们通常不会引入大量的上下文开销或复杂性。
4. 模块导入使用
Python提供了方便导入模块的方式,可用于将代码分为多个文件。导入功能在Python中使用频率很高,提高Python模块的重用而无需从头开始编写代码并减少出错几率
4.1 import
使用import加载Python中的模块,它们实际上是Python中的一个.py文件。以下描述了如何使用import语句加载模块:
import random
print(random.randint(1, 10))
这是Python的基本模块使用方法,它使用import语句和Python自带的random模块。代码块生成1到10之间的一个随机数并将其输出。
4.2 from
从一个模块中只导入特定变量或函数,而不是导入整个模块:
from random import randint
print(randint(1,10))
通过from关键字和random库的randint函数,Python从random库中导入一个函数。这种方式使得在一行中调用一个特定函数变得更加容易。