基础语法

  • 使用缩进来组织代码块
  • 大小写敏感
  • 基本数据类型:空值None、布尔值、整数、浮点数、字符串
  • 程序运行过程中,变量存储在内存中
  • 变量本身类型不固定 - 动态语言
  • 常量通常用全大写表示
  • 1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节
  • encode()编码,decode()解码
  • 列表list,有序集合,[]
  • 元组tuple,类似list,(),一旦定义内容不可变
  • 字典dict,无序键值对,{}
  • Set,无序无重复元素的集合,只存储key,以set()方法构建,参数为一个list
  • 函数返回多个值其实是返回一个tuple(省略了括号)
  • 函数参数类型:必选参数、默认参数、可变参数、*关键字参数、命名关键字参数
  • 关键字参数在函数内部自动组装成为一个dict
  • 命名关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值
  • 参数组合顺序:必选参数、默认参数、可变参数、命名关键字参数和关键字参数
  • *args是可变参数,接收一个tuple
  • **kw是关键字参数,接收一个dict
  • 对于任意函数,都可以通过func(*args, **kw)的形式调用
  • 如果函数中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
  • 可以直接作用于for循环的对象统称为迭代对象Iterable,包括str list tuple dict set generator
  • 可以被next()函数调用并不断返回下一个值的对象称为迭代器Iterator
  • 可以使用iter()函数把Iterable变成Iterator
  • Iterator对象表示一个数据流,一个惰性计算的序列,只有在需要时才返回下一个值

函数式编程

  • 函数是面向过程的程序设计的基本单元
  • 函数本身可以赋值给变量,即变量可以指向函数,指向函数的变量其实就是函数名
  • 把函数作为参数传入,这样的函数称为高阶函数,这种高度抽象的编程范式称为函数式编程
  • 典型高阶函数:map() reduce() filter() sorted()
  • map()把参数函数作用在参数list的每一个元素上,并返回一个新的Iterator
  • reduce()把参数函数作用于参数list,并把返回结果参与到下一个元素的运算
  • filter()过滤序列
  • sorted()将key指定的函数作用于list的每一个元素上,并根据函数返回的结果进行排序
  • lambda匿名函数,只能有一个表达式,返回值就是该表达式的结果
  • 匿名函数可以赋值给变量,也可以作为函数返回值
  • 使用list(Iterator)获取惰性序列的所有值
  • 高阶函数除了可以将函数作为参数外,还可以将函数作为结果值返回
  • 闭包 - 在外部函数中定义内部函数,内部函数可以引用外部函数的参数和局部变量,
  • 当外部函数将内部函数作为结果值返回时,相关参数和变量都保存在内部函数中
  • 返回函数不要引用任何循环变量,或者后续会发生变化的变量
  • 函数也是一个对象,而且可以被赋值给变量,通过变量也能调用该函数
  • 在函数运行期间动态增加功能的方式,称之为装饰器Decorator
  • 装饰器的本质是返回函数的高阶函数
  • 使用@functools.wraps()把原始函数的name属性复制到装饰器中的函数
  • 偏函数functools.partial()的作用就是把一个函数的某些参数固定住,即设置默认值,然后返回一个新的函数

面向对象编程

  • 在类中定义的函数,第一个参数永远是实例变量self,调用时不用传递该参数
  • 在类属性前加两个下划线,则变成了一个私有变量,外部不可直接访问
  • 特殊变量xxx是可以直接访问的
  • 多态 - 子类中的方法覆盖父类中的同名方法
  • 常用的对象分析方法:dir() hasattr() getattr() setattr()
  • 实例属性将屏蔽掉同名的类属性
  • 定义一个类,创建一个实例后,可以给该实例绑定任意属性和方法(仅属于当前实例)
  • 使用slots限制类实例可以添加的属性和方法,对继承的子类不起作用
  • 内置的@property装饰器负责把一个方法变成属性调用,简化对属性的getter/setter操作
  • Python支持多重继承,一个子类可以同时获得多个父类的所有功能
  • 在设计类的继承关系时,通常主线都是单一继承下来的,然后”混入”额外的功能,称之为MixIn
  • 常用的定制类方法:str repr iter next getitem getattr call
  • Enum可以把一组相关常量定义在一个枚举类中,且该类不可变,成员可以直接比较
  • 动态语言,函数和类的定义,不是编译时定义的,而是运行时动态创建的
  • type()既可以返回一个对象的类型,又可以创建出新的类型
  • 元类metaclass,先定义metaclass,就可以创建类,然后创建实例,即可以把类看作是metaclass创建的”实例”
  • 元类的常用使用场景:ORM框架

错误和异常处理

  • 错误和异常是class,捕获一个错误就是捕获到该class的一个实例
  • 捕获异常try…except(else)…finally,抛出异常raise
  • 所有错误和异常都继承自BaseException
  • 程序调试:打印print(),断言assert(),日志logging,单步执行pdb,断点pdb.set_trace()
  • 日志级别logging.basicConfig(level=logging.INFO) debug info warning error
  • TDD Test-Driven Development 测试驱动开发
  • 内置单元测试模块unittest,方法setUp、tearDown
  • 文档测试doctest,不但可以用来测试,还可以直接作为示例代码 ”’ this is doctest ”’

网络编程

  • 网络通信本质是两台计算机上的两个进程之间的通信
  • TCP协议是建立在IP协议之上的,更高级的协议(HTTP协议、SMTP协议等)是建立在TCP协议之上的
  • 小于1024的是Internet标准服务的端口,大于1024的可以任意使用
  • 基于TCP协议进行Socket编程,客户端要主动连接服务器的IP和指定端口
  • 对于服务器,要首先监听指定端口,然后对每一个新的连接,创建一个线程或进程来处理,通常服务器会无限运行下去
  • 用户数据报协议UDP(User Datagram Protocol),是面向无连接的协议
  • 与TCP相比,UDP不需要连接,速度更快,但数据传输的可靠性较差,不能保证数据一定发送成功
  • 服务器绑定TCP端口和UDP端口互不冲突,也就是说,TCP的9999端口与UDP的9999端口可以各自绑定

电子邮件

  • 电子邮件基本路径:发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人
  • MUA: Mail User Agent 邮件用户代理,如Foxmail
  • MTA: Mail Transfer Agent 邮件传输代理,如网易163
  • MDA: Mail Delivery Agent 邮件投递代理
  • MUA和MTA使用的协议SMTP: Simple Mail Transfer Protocol
  • MUA和MDA使用的协议POP: Post Office Protocol和IMAP: Internet Message Access Protocol
  • Python内置对SMTP的支持,模块email负责构造邮件,smtplib负责发送邮件,可以发送纯文本、HTML邮件及带附件的邮件
  • poplib用来接收邮件,email用来解析邮件

数据库操作

  • SQLite是一种嵌入式数据库,它的数据库就是一个文件
  • SQLite由C语言写成,体积很小,所以经常被集成到各种应用程序中,甚至移动APP中
  • Python内置了SQLite及相关驱动
  • 操作数据库的基本步骤:创建连接 -> 获取游标 -> 执行SQL -> 关闭游标 -> 提交事务(非查询操作) -> 关闭连接
  • 使用游标Cursor对象执行insert update delete语句时,执行结果由rowcount返回影响的行数
  • 使用游标Cursor对象执行select语句时,通过fetchall()可以获取结果集
  • 结果集是一个list,每个元素都是一个tuple,对应一行记录
  • Python的DB-API定义对不同的数据库是通用的
  • 执行INSERT等操作后要调用commit()提交事务
  • MySQL的SQL占位符是%s
  • ORM(Object-Relational Mapping)对象关系映射
  • ORM就是把数据库表的行与相应的对象建立关联,把对表的操作转换为对对象的操作
  • 常用ORM框架:SQLAlchemy

Web开发

  • Web开发阶段:静态HTML -> CGI -> PHP/ASP/JSP -> MVC -> MVVM
  • CGI: Common Gateway Interface, 由C/C++编写
  • HTTP 1.1版本允许多个HTTP请求复用一个TCP连接,以加快传输速度
  • 一个HTTP请求只处理一个资源
  • HTTP响应的数据格式由Content-Type决定的
  • Content-Encoding: gzip是指以gzip方式对Body数据进行压缩
  • Apache Nginx Lighttpd是静态服务器
  • Python是解释性的脚本语言,适合Web开发,有上百种Web开发框架
  • WSGI: Web Service Gateway Interface
  • Python内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器的参考实现
  • Flask通过Python的装饰器在内部自动地把URL和函数给关联起来,默认支持模板jinja2
  • 常用Web开发框架:Flask Django web.py Bottle Tornado
  • 常用模板:jinja2 Mako Cheetah Django

IO编程

  • 流Stream, Input Stream是数据从磁盘、网络流入内存,Output Stream是从内存流出
  • 同步IO和异步IO的主要区别在于是否等待IO执行的结果
  • 异步IO的执行效率更高,但编程模型也更复杂
  • 读写文件是最常见的IO操作,该功能是调用操作系统提供的接口实现的
  • 操作系统在同一时间能打开的文件数量是有限的
  • 使用with语句操作文件IO,可以确保文件被关闭
  • 打开文件open(‘file’, ‘r/w’, encoding=’utf-8’, errors=’ignore’) -> 读read()/写write() -> 关闭文件close()
  • StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口,getvalue()
  • os模块封装了操作系统的目录和文件操作,要注意这些函数有的在os模块中,有的在os.path和shutil模块中
  • 把变量从内存中变成可存储或传输的过程称作序列化pickling, 反序列化unpickling
  • 通过pickle json模块来实现序列化,dumps() loads()

进程和线程

  • 单核CPU以时间片轮转的方式来执行多任务,真正的并行执行多任务需要在多核CPU上实现
  • 一个进程Process至少有一个线程Thread,线程是最小的执行单元
  • 多任务实现:多进程模式 多线程模式 多进程+多线程模式
  • 调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间
  • 在Unix/Linux下,可以使用os.fork()调用实现多进程,跨平台可以使用multiprocessing模块
  • 使用进程池的方式批量创建子进程
  • 进程间通信通过Queue Pipes等实现
  • 任何进程默认都会启动一个线程,称为主线程MainThread,主线程又可以启动新的线程
  • 在多进程中,同一个变量在每个进程中有一份拷贝,互不影响;在多线程中,变量在线程间共享
  • 使用线程锁threading.Lock()来对线程进行隔离,避免冲突
  • Python进程有各自独立的GIL锁,互不影响,因此可以使用多进程来实现多核任务,但无法使用多线程来实现
  • ThreadLocal变量虽然是全局变量,但每个线程都只能读写自己线程的独立副本,互不干扰
  • 采用多任务需要考虑的因素:任务数量(线程切换)和任务类型(计算密集型 vs IO密集型)

异步IO

  • 进程更稳定,而且可以分布到多台机器上,而线程最多只能分布在同一台机器的多个CPU上
  • 使用QueueManager模块实现分布式进程
  • Nginx是支持异步IO的Web服务器,使用单进程单线程模型来执行多任务,称为事件驱动模型
  • 在Python中,单线程的异步编程模型称为协程Coroutine
  • 使用asyncio模块来实现异步IO
  • asyncio实现了TCP UDP SSL等协议,aiohttp是基于asyncio实现的HTTP框架

其他

  • 正则模块re.match()返回match对象或None
  • Python支持多种图形界面的第三方库:Tk wxWidgets Qt GTK,内置支持Tk的Tkinter

Python 3.x 学习笔记相关推荐

  1. python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)

    [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...

  2. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  3. python基础入门学习笔记 (2)

    python基础入门学习笔记 2021年2月8日 1 编译器和解释器的区别 编译器/解释器:高级语言与机器之间的翻译官 2 值传递: print "a = ",a print &q ...

  4. 关于Python的一些学习笔记(小白式笔记,持续更新)

    关于Python的一些学习笔记 瞎bb: 作为一个计算机专业的学生,Python应该是一门很有必要掌握的语言,但是由于鄙人太懒,一直对Python没有太多了解,但是随着知识的积累以及学业难度的增加,我 ...

  5. Python 基础知识学习笔记——NumPy

    Python基础知识学习笔记--NumPy 与 matlab 优秀的矩阵运算类似,python 提供了 numpy 库,这对熟悉 matlab 的用户来说非常友好.向量.矩阵和多维数组是数值计算中必不 ...

  6. Python 基础知识学习笔记——OpenCV(1)

    Python 基础知识学习笔记--OpenCV(1) OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,它轻量而且高效,被广泛的使用. 整理一下OpenCV学习笔记,以防忘记. 文章目录 Py ...

  7. Python基础知识学习笔记——Matplotlib绘图

    Python基础知识学习笔记--Matplotlib绘图 整理python笔记,以防忘记 文章目录 Python基础知识学习笔记--Matplotlib绘图 一.绘图和可视化 1.导入模块 2.一个简 ...

  8. python基础知识学习笔记(2)

    python基础知识学习笔记(2) 整理一下python基础知识,以防忘记 文章目录 python基础知识学习笔记(2) python简洁的一行代码 python简洁的一行代码 1.交换两个变量 # ...

  9. python基础知识学习笔记(1)

    python 基础知识学习笔记(1) 总结一下Python基础知识,以防忘记. 文章目录 python 基础知识学习笔记(1) 一.起步 1.python安装与编译环境 二.变量和简单数据类型 三.列 ...

  10. python标准库学习笔记

    原创:python标准库学习笔记 数据结构 bisect 模块里实现了一个向列表插入元素时也会顺便排序的算法. struct - 二进制数据结构:用途:在 Python 基本数据类型和二进制数据之间进 ...

最新文章

  1. MyBatis的插入后获得主键的方式
  2. nanodet训练voc数据集
  3. mysql删除数据库恢复_详解MySQL数据库恢复误删除数据
  4. SpringBoot之前端文件管理
  5. Java 虚拟机总结给面试的你(中)
  6. 【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )
  7. 艾宾浩斯记忆表格excel_好的记忆方法是一切学习的关键(艾宾浩斯记忆法)
  8. 专访 Christian Posta:Istio 1.7 将成为生产可用的最稳定版本
  9. 使用webpack配置react并添加到flask应用
  10. NEL发布NEO Key-Value数据库LightDB
  11. matlab取矩阵实部和虚部,MATLAB中容易忽略却经常遇到的小技巧总结
  12. python中初始化方法_Python中类的初始化特殊方法
  13. Y2011_M12_TranslateEnglish
  14. 数据血缘关系图 工具_MCGS组态软件实现数据报表
  15. C语言程序书写中 每行必须有分号,C语言课后习题答案
  16. java实现数据库同步
  17. MySQL 8.0.29安装版安装教程
  18. Google地图 Google Places API中附近搜索,文本搜索,地址搜索,地点详情的简单介绍
  19. matlab 从字符串里面提取出数字
  20. 计算机等级考试第一次报什么,计算机等级考试一年是考两次,3月和9月各一次 如果第一次没有考过第二次考要再报名缴费吗?...

热门文章

  1. pymysql模块安装后,import pymysql找不到?
  2. js插件-压缩文件夹zip-dir
  3. Android Studio常用快捷键
  4. EditPlus 5.0 激活+汉化
  5. 如何进行网站seo优化推广?
  6. 5G工业路由器PLC无线组网远程控制
  7. 一维信号小波阈值去噪
  8. STM32F4+DP83848以太网通信指南系列知识储备
  9. Python学习之旅-15
  10. SVM(一):SVM入门