Python 函数式编程和并发

  • Post category:Python

Python 函数式编程:

Python 函数式编程是一种编程范式,它强调将计算看作是一组数学函数的评估。Python 的函数式编程支持函数是对象,函数闭包,递归等。

函数是Python语言中的一等公民,函数式编程利用Python中函数的这个特性来实现非常强大的功能。

以下是Python函数式编程的使用方法:

1.高阶函数:

Python中的高阶函数可以接受函数为参数,或者返回函数作为结果。使用高阶函数可以实现多种功能。例如,map(), filter(), reduce()。

其中,map()函数可以将一个函数作用于列表的每一个元素,然后返回所有的结果,filter()函数可以利用一个函数对列表进行过滤处理,reduce()函数可以利用一个函数和一个列表来实现一个累加操作。

比如,我们有一个列表,需要将其中的所有元素转化成整型并求和,可以这样实现:

list = ['1', '2', '3', '4', '5']
result = reduce(lambda x, y: x + y, map(int, list))
print(result)

输出结果为:15

2.函数闭包:

函数闭包是指在函数内部定义了一个新的函数,并将其作为函数的返回值,这个新的函数可以访问外部函数的变量。利用闭包可以实现很多功能。例如,装饰器。

比如,我们有一个函数,需要在函数执行前和执行后打印一些信息,可以这样实现:

def log(func):
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

@log
def now():
    print('2022-02-22')

now()

输出结果为:

call now():
2022-02-22

并发编程:

Python 中的并发编程指的是同时处理多个任务。Python提供了许多模块来实现并发编程,例如 threading, multiprocessing, asyncio 等。

以下是Python并发编程的使用方法:

1.线程:

Python 中的 threading 模块是线程相关的模块,提供了线程管理类,其中包括:

  • Thread:表示一个执行线程的对象。
  • Lock:提供了一个简单的锁定机制来避免线程之间的竞争。
  • RLock:可重入锁定,可以被同一线程多次获得。
  • Condition:使用条件变量可以在某些事件触发时直接通知等待线程。
  • Semaphore:用来控制对共享资源的访问数量。
  • Event:线程间的事件通信,一个线程发送信号,其他线程等待信号状态改变。

比如,我们有一个计算函数和一个打印函数,需要同时执行,可以这样实现:

import threading

def add():
    sum = 0
    for i in range(1, 11):
        sum += i
    return sum

def print_result():
    result = add()
    print('result is %d' % result)

t1 = threading.Thread(target=add)
t2 = threading.Thread(target=print_result)

t1.start()
t2.start()

t1.join()
t2.join()

输出结果为:

result is 55

2.协程:

Python 中的 asyncio 模块实现了协程的支持。协程是一种用户态的轻量级线程,可以比真正的线程更高效地解决问题。

asyncio 模块提供了三个对象用于协程的实现:

  • coroutine:定义协程的装饰器,将普通函数装饰成协程函数。
  • event_loop:实现事件循环处理 IO 事件,以及通过 add_task 函数把协程加入到事件循环中运行。
  • future:协程返回结果或者触发异常后,它会用 future 把这个结果传递给主程序。

比如,我们有一个请求函数和一个打印函数,需要同时执行,可以这样实现:

import asyncio

async def request():
    print('request start')
    await asyncio.sleep(2)
    print('request end')

def print_result():
    print('print start')
    print('print end')

tasks = [request(), print_result()]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

输出结果为:

request start
print start
request end
print end

以上就是Python函数式编程和并发编程的使用方法和示例说明。