《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 用…...

Oracle表索引查看方法总结(查看oracle表索引)
Oracle表索引查看方法总结 Oracle是当前应用最广泛的关系数据库,也是多数大型企业使用的数据库。Oracle表索引在提高查询效率方面起着至关重要的作用,掌握该方法也是技术人员必备技能之一。本文总结了几种常见的查看Oracle表索引信息的方法,…...

react css 污染解决方法
上代码 .m-nav-bar {background: #171a21;.content {height: 104px;margin: 0px auto;} }import React from "react"; import styles from ./css.module.scssexport default class NavBar extends React.Component<any, any> {constructor (props: any) {supe…...

volatile 关键字 与 CPU cache line 的效率问题
分析&回答 Cache Line可以简单的理解为CPU Cache中的最小缓存单位。目前主流的CPU Cache的Cache Line大小都是64Bytes。假设我们有一个512字节的一级缓存,那么按照64B的缓存单位大小来算,这个一级缓存所能存放的缓存个数就是512/64 8个。具体参见下…...

又一关键系统上线,理想车云和自动驾驶系统登陆OceanBase
8 月 1 日,理想汽车公布 7 月交付数据,理想汽车 2023 年 7 月共交付新车 34,134 辆,同比增长 227.5%,并已连续两个月交付量突破三万。至此,理想汽车 2023 年累计交付量已经达到 173,251 辆,远超 2022 年全年…...

SIEM(安全信息和事件管理)解决方案
什么是SIEM 安全信息和事件管理(SIEM)是一种可帮助组织在安全威胁危害到业务运营之前检测、分析和响应安全威胁的解决方案,将安全信息管理 (SIM) 和安全事件管理 (SEM) 结合到一个安全管理系统中。SIEM 技术从广泛来源收集事件日志数据&…...

Go 自学:map关联数组
以下代码展示了如何建立一个map。 我们可以使用delete删除map中的元素。 我们还可以使用loop遍历map中的所有元素。 package mainimport ("fmt" )func main() {languages : make(map[string]string)languages["JS"] "Javascript"languages[&qu…...

c#多态(override)的使用
方法重写(override):多态,通过父类类型对象,调用子类当中对应方法的实现。 细节:子类当中的override方法会“抹杀”父类当中对应virtual方法 不使用多态时,父类调用子类方法时,会调用父类的方法…...

kafka 动态扩容现有 topic 的分区数和副本数
文章目录 [toc]创建一个演示 topic生产一些数据使用消费者组消费数据增加分区无新数据产生,有旧数据未消费有新数据产生,有旧数据未消费 增加副本创建 json 文件使用指定的 json 文件增加 topic 的副本数使用指定的 json 文件查看 topic 的副本数增加的进…...

【数据结构】Golang 实现单链表
概念 通过指针将一组零散的内存块串联在一起 , 把内存块称为链表的“结点”。 记录下个结点地址的指针叫作后继指针 next ,第一个结点叫作头结点,把最后一个结点叫作尾结点 。 代码实现 定义单链表 在 golang 中可以通过结构体定义单链表…...

云服务器利用Docker搭建sqli-labs靶场环境
一、安装宝塔面板 使用xshell、electerm、SecureCRT等远程终端连接登陆上云服务器,在Linux宝塔面板使用脚本安装 安装后,如下图:按照提示,在云服务器防火墙/安全组放行Linux宝塔面板的端口 在浏览器打开上述网址,登…...