《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 用…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
