运算
算数运算
加+,减-,乘*,除/,取商//,取指数**,取余%
比较运算
等于==,不等于!=,大于>,小于<,大于等于>=,小于等于<=
赋值运算
等于x = 3,加等于+=(x += 3相当于x = x + 3),减等于-=(同+=)乘等于*=,除等于/=,取商赋值//=,取指数赋值**=,取余数赋值%=
函数
定义函数:def 如:def info ():
位置参数:调用时按定义顺序依次传入,如 info('张三', 18)。
默认参数:在定义时为参数指定默认值。调用时如果没传该参数,则使用默认值;传了则覆盖。
可变位置参数:使用 *args 可以接收任意多个位置参数,它们会被打包成一个元组 (tuple)。
可变关键字参数:使用**kwargs可以接收任意多个关键字参数,它们会被打包成一个字典
全局变量与局部变量:默认函数读取全局变量,不能修改,用global声明该变量,即可修改全局变量
lambda表达式
就是一个极简的匿名函数 一行代码实现简单的逻辑
add = lambda a,b:a + b<br>等价的def写法<br>def add (a,b)<br> return a + b
面向对象
python的主流的编程思想就是将数据(属性)和功能(方法)封装成类,通过类创建对象,对象可以调用类<br>的方法。可以更好的开发大型项目
封装
概念:将数据(属性)和操作数据的方法(函数)捆绑在一起,形成一个整体(类)
通俗来说:就像一台电视机,你只需要用遥控器(对外接口)就能操作它
继承
一个类(子类)可以继承另一个类(父类)的属性和方法,并可以在此基础上扩展或修改自己的特有功能。
通俗来说:就像"动物"是父类,"狗"和"猫"是子类。狗和猫都继承了动物的共同特征(如吃饭、睡觉),同时又有自己的独特行为(狗会看家,猫会抓老鼠)。
多态
同一个方法名,在不同对象上可以表现出不同的行为。即"一个接口,多种实现"。
比如"播放"这个动作,在音乐播放器上放的是歌,在视频播放器上放的是电影,在游戏机上放的是游戏。同样的"播放"命令,不同设备做不同的事。
装饰器
开闭原则,不修改原本代码的前提下,不修改调用方式的前提下,动态的给函数新增功能。装饰器的本质就是一个函数,它接收一个函数作为参数,并返回一个新的函数
最简单的装饰器:<br>def my_decorator(func):<br> def wrapper():<br> print("函数开始执行") 新增功能<br> func() 调用原函数<br> print("函数执行结束") 新增功能<br> return wrapper<br>使用装饰器,@符号<br>@my_decorator<br>def say_hello():<br> print("你好!")<br>@my_decorator 等价于:say_hello =my_decorator(say_hello)
推导式
允许你用一行代码从一个可迭代对象(如列表、字典、集合)快速生成另一个新的可迭代对象。推导式的本质是对循环和条件判断的语法封装,让你用声明式的方式描述"我想要什么样的数据",而不是用命令式的方式描述"怎么一步步得到数据"。一行代码可以代替多行循环
list1 = [i**2 for i in range(1,11) if i % 2==0 ] # 列表<br>等同于<br>list1 = []<br>for i in range(1, 11):<br> if i % 2 == 0:<br> list1.append(i ** 2)<br>
tuple1 = tuple((i for i in range(1,11) if i % 2==0 ))<br>等同于<br>temp = []<br>for i in range(1, 11):<br> if i % 2 == 0:<br> temp.append(i)<br>tuple1 = tuple(temp)
dict1 = {i:i**2 for i in range(1,11)}<br>等同于<br>dict1 = {}<br>for i in range(1, 11):<br> dict1[i] = i ** 2
set1 = {i for i in range(1,11) if i % 2==0 }<br>等同于<br>set1 = set()<br>for i in range(1, 11):<br> if i % 2 == 0:<br> set1.add(i)
dict2 = {l:s for l,s in zip(list1,set1)}<br>等同于<br>dict2 = {}<br>for l, s in zip(list1, set1):<br> dict2[l] = s
dicti3 = {index:value for index,value in enumerate(list1)}<br>等同于<br>dicti3 = {}<br>for index, value in enumerate(list1):<br> dicti3[index] = value
迭代器
迭代器是 Python 中一种可以逐个返回元素的对象,它记住遍历的位置,每次调用 next() 就返回下一个元素,直到没有元素时抛出 StopIteration 异常。<br>简单理解:迭代器就像一个"书签",记录你读到哪一页了,每次调用 next() 就翻到下一页。<br>
# 列表是可迭代对象,但不是迭代器<br>my_list = [1, 2, 3, 4, 5]<br><br># 用 iter() 获取迭代器<br>my_iterator = iter(my_list)<br><br># 用 next() 逐个获取元素<br>print(next(my_iterator)) # 1<br>print(next(my_iterator)) # 2<br>print(next(my_iterator)) # 3<br>print(next(my_iterator)) # 4<br>print(next(my_iterator)) # 5<br>print(next(my_iterator)) # 抛出 StopIteration 异常
my_list = [1, 2, 3, 4, 5]<br><br># for 循环内部自动处理了迭代<br>for item in my_list:<br> print(item)<br><br># 等价于:<br>iterator = iter(my_list)<br>while True:<br> try:<br> item = next(iterator)<br> print(item)<br> except StopIteration:<br> break
with上下文管理
with 上下文管理是 Python 中一种资源管理机制,它能够在代码块执行前后自动执行特定操作(如打开/关闭文件、获取/释放锁、建立/断开连接等),确保资源被正确管理,即使发生异常也能安全清理。
子主题
异常
异常是程序在运行过程中发生的错误事件,它会中断程序的正常执行流程。当 Python 遇到无法继续执行的情况时(如除以零、文件不存在、类型错误等),就会抛出(raise)一个异常。
异常类型 说明 示例<br>ZeroDivisionError 除以零 1 / 0<br>TypeError 类型错误 '1' + 1<br>ValueError 值错误 int('abc')<br>IndexError 索引越界 [1,2,3][10]<br>KeyError 键不存在 {'a':1}['b']<br>FileNotFoundError 文件不存在 open('no.txt')<br>AttributeError 属性不存在 'abc'.length()<br>ImportError 导入失败 import non_exist<br>NameError 变量未定义 print(未定义变量)<br>StopIteration 迭代器结束 next(iter([]))
多线程
多线程是指在一个进程中同时运行多个线程,让它们并发地执行不同任务,从而实现并行处理,提高程序的执行效率。
线程池是一种预先创建好一组线程并重复使用的技术。当有任务需要执行时,从池中取出一个空闲线程来执行,任务完成后线程不销毁,而是归还给池等待下一个任务。这样可以避免频繁创建和销毁线程带来的开销。
异步编程
# 异步编程的本质上是单线程,单线程并发<br># 协程: 用户态的微型任务,运行在单线程中,程序主动切换,无需操作系统干预<br>#await 阻塞并挂起当前协程,让出事件循环,事件循环就可以去做其他的就绪协程<br># async def 定义一个协程函数,调用不会直接执行,而是返回协程对象<br># 事件循环 调度所有的写成,IO阻塞的时候自动切换任务,是一个异步的调度器<br># 优势: 单线程超高饼干,无线程的切换开销,没有线程安全的问题