归纳总结Python函数进阶的使用方法

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库中导入一个函数。这种方式使得在一行中调用一个特定函数变得更加容易。

后端开发标签