《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 用…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...
