python进阶知识总结

一、介绍

课程来源:慕课网python进阶

支持函数式编程,函数式编程的特点
@偏向于计算,而非指令,把计算视为函数而非指令
@不需要变量,无副作用,测试简单
@支持高阶函数,代码简洁

python函数式编程的特点:
@不是纯函数式编程,可以有变量
@支持高阶函数,允许函数作为变量传入
@允许闭包,有了闭包就有返回函数
@有限度的支持匿名函数

二、高阶函数:能接收函数作为参数的函数

@变量可以指向函数
@函数的参数可以接收变量
@一个函数可以接收另一个函数作为参数
@能接收函数作参数就是高阶参数

demo

#demo
#自定义一个加法函数
def add(a, b, f):
    return f(a) +f(b)
def Sqrt(a):
    return pow(a,0.5)  #平方根

print(add(-5, 9, abs))
print(add(25, 9, Sqrt))

map函数,reduce函数,filter()函数

#map函数,对单个参数进行处理
L = list(range(10))
print(list(map(lambda x : x*x, L)))

#在Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里用的话要 先引入:对两个参数进行处理
from functools import reduce 
print (reduce(lambda x,y: x-y, [1,2,3,4,5]))

#filter()函数:过滤函数,返回符合条件的新的列表
def is_odd(x):
    return x % 2 == 1
filter(is_odd, [1, 4, 6, 7, 9, 12, 17])

@map函数输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
@map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

@reduce函数输出:-13
@reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

@filter函数输出:[1, 7, 9, 17]
@filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

自定义sorted排序,倒序

#reverse——sorted函数
def reversed_cmp(x, y):
    if x > y:
        return -1
    if x < y:
        return 1
    return 0
sorted([36, 5, 12, 9, 21], reversed_cmp)

@输出:[36, 21, 12, 9, 5]
@sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。

匿名函数

#匿名函数,上面其实早就用过了,下面描述一下
print(list(map(lambda x : x*x, L)))

@高阶函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便。匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。用完函数就会自动销毁。

<think>嗯,用户让我介绍一下Python进阶知识点及例程。首先,我需要确定用户的基础水。他们已经知道Python的基础,所以可能需要更深入的内容。我应该从哪些方面入手呢? 常见的进阶主题包括装饰器、生成器、上下文管理器、元类、并发编程、类型注解、魔术方法、函数式编程、描述符、协程和异步IO。这些都是比较高级的概念,但用户可能需要例子来理解。 比如装饰器,很多人一开始会觉得难以理解,所以需要简单的例子,比如记录函数执行时间的装饰器。生成器的话,可以用斐波那契数列的例子,展示惰性计算的优势。上下文管理器通常用with语句的例子,比如文件操作,但也可以自定义一个。 并发编程部分,用户可能对多线程、多进程和异步IO的区别不太清楚,应该分别举例说明。比如多线程的threading模块,多进程的multiprocessing,以及asyncio的异步例子。同时要提到GIL的限制,为什么多进程适合CPU密集型任务。 元类可能对用户来说比较抽象,可以结合简单的例子,比如自动注册子类。描述符和属性管理也是高级特性,可以用来做数据验证。类型注解现在越来越重要,特别是在大型项目中,用例子说明如何添加类型提示。 魔术方法比如__str__和__repr__的区别,还有运算符重载的例子,比如向量的加法。函数式编程的map、filter、reduce以及列表推导式,这些虽然基础,但进阶使用可能包括生成器表达式和条件过滤。 协程和异步IO可能需要更详细的例子,比如使用async和await关键字,aiohttp库进行异步请求。此外,单元测试和性能优化也是进阶内容,可以用unittest或pytest的例子,以及timeit和cProfile工具。 需要确保每个知识点都有对应的代示例,这样用户能够更好地理解。同时要注意代的正确性,比如生成器的yield用法,装饰器的正确结构。另外,可能用户对这些概念的实际应用场景感兴趣,所以例子要贴近实际用途。 还要检查是否有遗漏的重要进阶知识点,比如描述符、闭包、作用域、模块化设计、设计模式在Python中的实现等。不过考虑到篇幅,可能需要挑选最核心的几个点详细说明。 最后,总结部分要强调这些知识点如何帮助用户提升代质量和开发效率,并建议通过项目实践来巩固。可能用户需要进一步学习的方向,比如框架源阅读或者参与开源项目,也可以提及。</think>以下是一些 Python 进阶知识点及简单例程,涵盖高级语法、设计模式和性能优化等内容: --- ### 1. **装饰器(Decorators)** 用于增强函数行为,常用于日志、权限校验、性能分析等场景。 ```python def timer_decorator(func): import time def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(f"{func.__name__} 执行耗时: {end - start:.4f}秒") return result return wrapper @timer_decorator def heavy_calculation(): sum(range(10**6)) heavy_calculation() # 输出执行时间 ``` --- ### 2. **生成器(Generators)** 惰性计算,节省内存。 ```python def fibonacci(n): a, b = 0, 1 for _ in range(n): yield a a, b = b, a + b for num in fibonacci(10): print(num) # 输出斐波那契数列前10项 ``` --- ### 3. **上下文管理器(Context Managers)** 资源自动管理(如文件、网络连接)。 ```python class CustomContext: def __enter__(self): print("进入上下文") return self def __exit__(self, exc_type, exc_val, exc_tb): print("退出上下文") with CustomContext() as ctx: print("正在执行操作") ``` --- ### 4. **元类(Metaclasses)** 控制类的创建行为。 ```python class SingletonMeta(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super().__call__(*args, **kwargs) return cls._instances[cls] class Singleton(metaclass=SingletonMeta): pass a = Singleton() b = Singleton() print(a is b) # 输出 True ``` --- ### 5. **并发编程** - **多线程**(适合 I/O 密集型): ```python import threading def task(): print(f"线程 {threading.current_thread().name} 执行") threads = [threading.Thread(target=task) for _ in range(3)] for t in threads: t.start() ``` - **多进程**(适合 CPU 密集型): ```python from multiprocessing import Process def task(): print(f"进程 {os.getpid()} 执行") processes = [Process(target=task) for _ in range(3)] for p in processes: p.start() ``` - **异步编程**(asyncio): ```python import asyncio async def async_task(): print("开始任务") await asyncio.sleep(1) print("任务完成") async def main(): await asyncio.gather(async_task(), async_task()) asyncio.run(main()) ``` --- ### 6. **类型注解与类型检查** ```python from typing import List, Tuple def process_data(data: List[int]) -> Tuple[int, float]: total = sum(data) avg = total / len(data) return total, avg result = process_data([1, 2, 3]) print(result) # (6, 2.0) ``` --- ### 7. **魔术方法(Magic Methods)** 自定义类的行为。 ```python class Vector: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): return Vector(self.x + other.x, self.y + other.y) def __repr__(self): return f"Vector({self.x}, {self.y})" v1 = Vector(2, 3) v2 = Vector(4, 5) print(v1 + v2) # Vector(6, 8) ``` --- ### 8. **函数式编程** ```python from functools import reduce numbers = [1, 2, 3, 4, 5] squared = list(map(lambda x: x**2, numbers)) # [1, 4, 9, 16, 25] even = list(filter(lambda x: x % 2 == 0, numbers)) # [2, 4] sum_all = reduce(lambda a, b: a + b, numbers) # 15 ``` --- ### 9. **描述符(Descriptors)** 控制属性访问。 ```python class PositiveNumber: def __set__(self, instance, value): if value <= 0: raise ValueError("必须为正数") instance.__dict__[self.name] = value def __set_name__(self, owner, name): self.name = name class Order: quantity = PositiveNumber() order = Order() order.quantity = 5 # 正常 order.quantity = -3 # 抛出 ValueError ``` --- ### 10. **协程与异步IO** ```python import aiohttp import asyncio async def fetch(url): async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.text() async def main(): html = await fetch("https://example.com") print(html[:100]) # 输出网页前100个字符 asyncio.run(main()) ``` --- ### 进阶学习建议: - **深入源**:阅读标准库(如 `collections`、`itertools`)源。 - **性能优化**:使用 `cProfile` 分析性能,尝试 `Cython` 或 `Numba` 加速。 - **设计模式**:实现工厂模式、观察者模式等。 - **测试驱动开发**:使用 `pytest` 或 `unittest` 编写测试用例。 通过实践项目(如 Web 框架、爬虫、数据分析工具)巩固这些知识
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值