《Python基础教程(第三版)》阅读笔记 1
目录
- 1 快速上手:基础知识
- 2 列表和元组
- 3 字符串
- 4 字典
- 5 条件、循环及其他
- 6 抽象
- 7 再谈抽象
- 8 异常
- 9 魔法方法、特性和迭代器
- 10 开箱即用
本文参考自《Beginning Python: from novice to professional》,中文版为《Python基础教程(第三版)》。
1 快速上手:基础知识
-
from __future__import xxx
:从python2.1开始,当一个新的语言特性首次出现在发行版中时,如果该新特性与旧版本的python不兼容,则该新特性默认会被禁用。要想启用这个新特性,必须使用该语句进行导入。 -
/
:除法 ;//
:整除,向下圆整;%
:求余;**
:乘方 -
round 圆整到最接近的整数,并在两个整数一样近时圆整到偶数。
-
nan 具有特殊含义,指的是“非数值”(not a number)。
-
#!/usr/bin/env python
:无需显式地使用Python解释器$ hello.py
-
str() 的输出追求可读性,输出格式要便于理解,适合用于输出内容到用户终端。
repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用。
>>> print(repr("Hello,\nworld!")) 'Hello,\nworld!' >>> print(str("Hello,\nworld!")) Hello, world
-
要表示很长的字符串(跨越多行的字符串),可使用三引号(而不是普通引号)。
-
原始字符串用前缀 r 表示,不能以单个反斜杠结尾。
>>> print(r'Let\'s go!') Let\'s go! >>> print(r'C:\Program Files\foo\bar' '\\') C:\Program Files\foo\bar\
2 列表和元组
- 元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组。
- 只包含一个值的元组,在它后面加上逗号。
3 字符串
- 字符串是不可变的
4 字典
- 在字典中,键的排列顺序是不固定的,因此打印字典时,每次的顺序都可能不同。
5 条件、循环及其他
-
print
# 自定义分隔符,默认的是空格 >>> print("I", "wish", "to", "register", "a", "complaint", sep="_") I_wish_to_register_a_complaint# 自定义结束字符串,以替换默认的换行符。例如,如果将结束字符串指定为空字符串,以后就可继续打印到当前行。 print('Hello,', end='') print('world!')
-
赋值魔法
-
序列解包/赋值魔法:
# 星号运算符( * )来收集多余的值,这样无需确保值和变量的个数相同 >>> name = "Albus Percival Wulfric Brian Dumbledore" >>> first, *middle, last = name.split() >>> middle ['Percival', 'Wulfric', 'Brian']# 带星号的变量最终包含的总是一个列表。
-
链式赋值:将多个变量关联到同一个值。
x = y = somefunction()
-
增强赋值:
x += 1
-
-
布尔值:
False None 0 "" () [] {}
为假,其他为真; True 和 False 不过是0和1的别名 -
支持链式比较:可同时使用多个比较运算符,如 0 < age < 100
-
== 用来检查两个对象是否相等,而 is 用来检查两个对象是否相同(是同一个对象)。
-
添加 assert 语句充当检查点
>>> age = -1 >>> assert 0 < age < 100, 'The age must be realistic'
-
并行迭代:zip
for name, age in zip(names, ages):print(name, 'is', age, 'years old')
-
迭代时获取索引:enumerate
-
判断循环是否是提前结束:
from math import sqrt for n in range(99, 81, -1):root = sqrt(n)if root == int(root):print(n)break else:print("Didn't find it!")
无论是在 for 循环还是 while 循环中,都可使用 continue 、 break 和 else 子句。
-
列表推导:使用多个 for 部分时,也可添加 if 子句。
>>> girls = ['alice', 'bernice', 'clarice'] >>> boys = ['chris', 'arnold', 'bob'] >>> [b+'+'+g for b in boys for g in girls if b[0] == g[0]] ['chris+clarice', 'arnold+alice', 'bob+bernice']
-
字典推导:for 前面有两个用冒号分隔的表达式。这两个表达式分别为键及其对应的值。
>>> squares = {i:"{} squared is {}".format(i, i**2) for i in range(10)} >>> squares[8] '8 squared is 64'
-
exec 执行一系列Python语句,而 eval 计算用字符串表示
的Python表达式的值,并返回结果( exec 什么都不返回,因为它本身是条语句)。 -
添加第二个参数——字典,用作代码字符串的命名空间,避免污染原来的命名空间。
>>> from math import sqrt >>> scope = {} >>> exec('sqrt = 1', scope) >>> sqrt(4) 2.0 >>> scope['sqrt'] 1
6 抽象
-
放在函数开头的字符串称为文档字符串(docstring),将作为函数的一部分存储起来。
square.__doc__
help(square)
-
前面使用的参数都是位置参数,使用名称指定的参数称为关键字参数,主要优点是有助于澄清各个参数的作用。
hello_3(name='Gumby')
-
收集参数:
def print_params_2(title, *params):print(title)print(params)def in_the_middle(x, *y, z):print(x, y, z)>>> in_the_middle(1, 2, 3, 4, 5, z=7)
星号意味着收集余下的位置参数。带星号的参数也可放在其他位置(而不是最后),此时使用名称来指定后续参数。
收集关键字参数,可使用两个星号。这样得到的是一个字典而不是元组。
>>> def print_params_3(**params): ... print(params) ... >>> print_params_3(x=1, y=2, z=3) {'z': 3, 'x': 1, 'y': 2}
-
分配参数
def add(x, y):return x + yparams = (1, 2) >>> add(*params)
通过使用运算符 ** ,可将字典中的值分配给关键字参数。
-
可使用函数 globals 来访问全局变量。这个函数类似于 vars ,返回一个包含全局变量的字典。( locals 返回一个包含局部变量的字典。)
-
重新关联全局变量,
global x
-
递归:基线条件(针对最小的问题):满足这种条件时函数将直接返回一个值。递归条件:包含一个或多个调用,这些调用旨在解决问题的一部分。
-
函数式编程
>>> list(map(str, range(10))) # 与[str(i) for i in range(10)]等价 ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']lambda x, y: x+y # 匿名函数
7 再谈抽象
- 多态(polymorphism) 方法 鸭子类型
- 多态让你无需知道对象所属的类(对象的类型)就能调用其方法,而封装让你无需知道对象的构造就能使用它。
- 封装 属性
- 多重继承,是一个功能强大的工具。然而,除非万不得已,否则应避免使用多重继承
- 抽象类是不能(至少是不应该)实例化的类,其职责是定义子类应实现的一组抽象方法。
8 异常
-
在没有出现异常时执行一个代码块,不管 try 子句中发生什么异常,都将执行 finally 子句。
try:1 / 0 except NameError:print("Unknown variable") else:print("That went well!") finally:print("Cleaning up.")
-
闭眼就跳,直接去做,有问题再处理,而不是预先做大量的检查。
9 魔法方法、特性和迭代器
-
构造函数(constructor)
-
super(SongBird, self)
;super().__init__()
-
基本的序列和映射协议
__len__(self) :
__getitem__(self, key) :
__setitem__(self, key, value):
__delitem__(self, key) :
-
size = property(get_size, set_size)
调用函数 property 并将存取方法作为参数(获取方法在前,
设置方法在后)创建了一个特性,然后将名称 size 关联到这个特性。 -
迭代器
class TestIterator:value = 0def __next__(self):self.value += 1if self.value > 10: raise StopIterationreturn self.valuedef __iter__(self):return self
当你调用方法
__next__
时,迭代器应返回其下一个值。如果迭代器没有可供返回的值,应引发 StopIteration 异常。next(it) 与
it.__next__()
等效。 -
生成器:包含 yield 语句的函数都被称为生成器
每次使用 yield 生成一个值后,函数都将冻结,即在此停
止执行,等待被重新唤醒。被重新唤醒后,函数将从停止的地方开始继续执行。 -
生成器推导:不立即执行循环,而是返回一个生成器,让你能够逐步执行计算。
>>> g = ((i + 2) ** 2 for i in range(2, 27)) >>> next(g) 16sum(i ** 2 for i in range(10))
-
递归式生成器
-
生成器由两个单独的部分组成:生成器的函数和生成器的迭代器。生成器的函数是由 def 语句定义的,其中包含 yield 。生成器的迭代器是这个函数返回的结果。用不太准确的话
说,这两个实体通常被视为一个,通称为生成器。
10 开箱即用
-
导入模块多次和导入一次的效果相同
>>> import sys >>> sys.path.append('C:/python')
-
if __name__ == '__main__': test()
-
模块存储在扩展名为.py的文件中,而包则是一个目录。
-
探索模块
[n for n in dir(copy) if not n.startswith('_')]
列出所有的函数、类、变量等__all__ = ["Error", "copy", "deepcopy"]
旨在定义模块的公有接口,如果不设置__all__
,则会在以 import * 方式导入时,导入所有不以下划线打头的全局名称。
-
常用模块
- 在较新的版本中,集合是由内置类 set 实现
- 堆(heap),它是一种优先队列。优先队列让你能够以任意顺序添加对象,并随时(可能是在两次添加对象之间)找出(并删除)最小的元素。
相关文章:
《Python基础教程(第三版)》阅读笔记 1
目录 1 快速上手:基础知识2 列表和元组3 字符串4 字典5 条件、循环及其他6 抽象7 再谈抽象8 异常9 魔法方法、特性和迭代器10 开箱即用 本文参考自《Beginning Python: from novice to professional》,中文版为《Python基础教程(第三版&#…...

坦克400 Hi4-T预售价28.5万元起,越野新能源好理解
8月25日,在以“智享蓉城,驭见未来”为主题的成都国际车展上,坦克品牌越野新能源再启新程,首次以全Hi4-T新能源阵容亮相展台,释放坦克品牌加速布局越野新能源的强烈信号。 Hi4-T架构首款落地车型坦克500 Hi4-T上市至今斩…...
我的Vim学习笔记(不定期更新)
2023年9月3日,周日上午 学到了啥就写啥,不定期更新 目录 字体 文件 标签页 分屏 调用系统命令 字体 设置字体大小 :set guifont字体:h字体大小 例如,:set guifontMonospace:h20 查询当前使用的字体和字体大小 :set guifont? 查看…...

spring boot项目生成容器并运行
一个安静的周末,shigen又睡懒觉了,上次说的拖延症的惩罚来了:早晚各100个健腹轮练习,早上的已经完成了。今天的文章来的有点晚,但是依旧保持质量。 springboot项目生成容器并运行 背景 将springboot项目打包成jar包&…...
Vue之html中特殊符号的展示
Vue之html中特殊符号的展示 在html中使用特殊字符时直接展示会报错,需要使用实体名称或者实体编号才能展示。 最常用的字符实体 显示结果 描述 实体名称 实体编号空格 < 小于号 < &…...

数据结构1 -- leetcode练习
三. 练习 3.1 时间复杂度 用函数 f ( n ) f(n) f(n) 表示算法效率与数据规模的关系,假设每次解决问题需要 1 微秒( 1 0 − 6 10^{-6} 10−6 秒),进行估算: 如果 f ( n ) n 2 f(n) n^2 f(n)n2 那么 1 秒能解决多…...

Java设计模式:四、行为型模式-05:备忘录模式
文章目录 一、定义:备忘录模式二、模拟场景:备忘录模式三、改善代码:备忘录模式3.1 工程结构3.2 备忘录模式模型结构图3.3 备忘录模式定义3.3.1 配置信息类3.3.2 备忘录类3.3.3 记录者类3.3.4 管理员类 3.4 单元测试 四、总结:备忘…...

MongoDB实验——MongoDB配置用户的访问控制
MongoDB 配置用户的访问控制 一、 实验原理 理解admin数据库:安装MongoDB时,会自动创建admin数据库,这是一个特殊数据库,提供了普通数据库没有的功能,例如,有些账户角色赋予用户操作多个数据库的权限&…...
golang逃逸技术分析
“ 申请到栈内存好处:函数返回直接释放,不会引起垃圾回收,对性能没有影响。 申请到堆上面的内存才会引起垃圾回收。 func F() { a : make([]int, 0, 20) b : make([]int, 0, 20000) l : 20 c : make([]int, 0, l)} “ a和b代码一样࿰…...

说说你了解的 Nginx
分析&回答 nginx性能数据 高并发连接: 官方称单节点支持5万并发连接数,实际生产环境能够承受2-3万并发。内存消耗少: 在3万并发连接下,开启10个nginx进程仅消耗150M内存 (15M10150M) 1. 正向、反向代理 所谓“代理”,是指在内网边缘 …...

SpringWeb(SpringMVC)
目录 SpringWeb介绍 搭建 SpringWeb SpringWeb介绍 Spring Web是一个基于 Servlet API 构建的原始 web 框架,用于构建基于MVC模式的Web应用程序。在 web 层框架历经 Strust1,WebWork,Strust2 等诸多产品的历代更选 之后,目前业界普…...
Mysql 语句
数据库管理 SQL语言分类 DDL 数据定义语言,用于创建数据库对象,如库、表、索引等 create 创建 create database/table; 数据库/表 create table 表名 (括号内添加类型和字段);drop 删除 drop database/table; 数据库/表…...

软考高级架构师——6、软件架构设计
像学写文章一样,在学会字、词、句之后,就应上升到段落,就应追求文章的“布局谋 篇”,这就是架构。通俗地讲,软件架构设计就是软件系统的“布局谋篇”。 人们在软件工程实践中,逐步认识到了软件架构的重要性…...

虚拟内存相关笔记
虚拟内存是计算机系统内存管理的一个功能,它允许程序认为它们有比实际物理内存更多的可用内存。它使用硬盘来模拟额外的RAM。当物理内存不足时,操作系统将利用磁盘空间作为虚拟内存来存储数据。这种机制提高了资源的利用率并允许更大、更复杂的应用程序的…...
【linux】定时任务讲解
文章目录 一. 在某时刻只执行一次:at1. 设置定时任务2. 查看和删除定时任务 二. 周期性执行任务:cron1. 启动crond进程2. 编辑定时任务3. 查看和删除4. 用户权限4.1. 黑名单4.2指定用户 三. /etc/crontab的管理 一. 在某时刻只执行一次:at 1…...

安卓10创建文件夹失败
最近在做拍照录像功能,已经有了文件读写权限,却发现在9.0手机上正常使用,但是在安卓12系统上根本没有创建文件夹。经过研究发现,创建名称为“DCIM”的文件夹可以,别的又都不行。而且是getExternalStorageDirectory和ge…...
文件操作(c/c++)
文件操作可以概括为几步: 打开文件,写入文件,读取文件,关闭文件 FILE FILE 是一个在C语言中用于文件操作的库函数,它提供了一系列函数来实现文件的创建、打开、读取、写入、关闭等操作。FILE 库函数可以帮助开发者处理…...

设计模式-适配器
文章目录 一、简介二、适配器模式基础1. 适配器模式定义与分类2. 适配器模式的作用与优势3.UML图 三、适配器模式实现方式1. 类适配器模式2. 对象适配器模式3.类适配器模式和对象适配器模式对比 四、适配器模式应用场景1. 继承与接口的适配2. 跨平台适配 五、适配器模式与其他设…...

C. Queries for the Array - 思维
分析: 分析出现矛盾的地方,也就是可能遇到0,并且已有字符串的长度小于等于1,另一种情况就是,遇到了1并且已有字符串不是排好序的,或者遇到了0已有字符串是排好序的,那么可以遍历字符串ÿ…...

音频——硬件拓扑
文章目录 硬件拓扑I2S 数据通路五线模式四线模式两线 TX两线 RX 典型应用硬件连接数据流 硬件拓扑 控制路径:UART/I2C/SPI数据路径:I2S 简略图如下 I2S 数据通路 五线模式 四线模式 两线 TX 两线 RX 典型应用 硬件连接 控制信号:SPI 用…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...