当前位置: 首页 > news >正文

《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 快速上手&#xff1a;基础知识2 列表和元组3 字符串4 字典5 条件、循环及其他6 抽象7 再谈抽象8 异常9 魔法方法、特性和迭代器10 开箱即用 本文参考自《Beginning Python: from novice to professional》&#xff0c;中文版为《Python基础教程&#xff08;第三版&#…...

坦克400 Hi4-T预售价28.5万元起,越野新能源好理解

8月25日&#xff0c;在以“智享蓉城&#xff0c;驭见未来”为主题的成都国际车展上&#xff0c;坦克品牌越野新能源再启新程&#xff0c;首次以全Hi4-T新能源阵容亮相展台&#xff0c;释放坦克品牌加速布局越野新能源的强烈信号。 Hi4-T架构首款落地车型坦克500 Hi4-T上市至今斩…...

我的Vim学习笔记(不定期更新)

2023年9月3日&#xff0c;周日上午 学到了啥就写啥&#xff0c;不定期更新 目录 字体 文件 标签页 分屏 调用系统命令 字体 设置字体大小 :set guifont字体:h字体大小 例如&#xff0c;:set guifontMonospace:h20 查询当前使用的字体和字体大小 :set guifont? 查看…...

spring boot项目生成容器并运行

一个安静的周末&#xff0c;shigen又睡懒觉了&#xff0c;上次说的拖延症的惩罚来了&#xff1a;早晚各100个健腹轮练习&#xff0c;早上的已经完成了。今天的文章来的有点晚&#xff0c;但是依旧保持质量。 springboot项目生成容器并运行 背景 将springboot项目打包成jar包&…...

Vue之html中特殊符号的展示

Vue之html中特殊符号的展示 在html中使用特殊字符时直接展示会报错&#xff0c;需要使用实体名称或者实体编号才能展示。 最常用的字符实体 显示结果 描述 实体名称 实体编号空格 < 小于号 < &…...

数据结构1 -- leetcode练习

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

Java设计模式:四、行为型模式-05:备忘录模式

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

MongoDB实验——MongoDB配置用户的访问控制

MongoDB 配置用户的访问控制 一、 实验原理 理解admin数据库&#xff1a;安装MongoDB时&#xff0c;会自动创建admin数据库&#xff0c;这是一个特殊数据库&#xff0c;提供了普通数据库没有的功能&#xff0c;例如&#xff0c;有些账户角色赋予用户操作多个数据库的权限&…...

golang逃逸技术分析

“ 申请到栈内存好处&#xff1a;函数返回直接释放&#xff0c;不会引起垃圾回收&#xff0c;对性能没有影响。 申请到堆上面的内存才会引起垃圾回收。 func F() { a : make([]int, 0, 20) b : make([]int, 0, 20000) l : 20 c : make([]int, 0, l)} “ a和b代码一样&#xff0…...

说说你了解的 Nginx

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

SpringWeb(SpringMVC)

目录 SpringWeb介绍 搭建 SpringWeb SpringWeb介绍 Spring Web是一个基于 Servlet API 构建的原始 web 框架&#xff0c;用于构建基于MVC模式的Web应用程序。在 web 层框架历经 Strust1&#xff0c;WebWork&#xff0c;Strust2 等诸多产品的历代更选 之后&#xff0c;目前业界普…...

Mysql 语句

数据库管理 SQL语言分类 DDL 数据定义语言&#xff0c;用于创建数据库对象&#xff0c;如库、表、索引等 create 创建 create database/table; 数据库/表 create table 表名 &#xff08;括号内添加类型和字段&#xff09;;drop 删除 drop database/table; 数据库/表…...

软考高级架构师——6、软件架构设计

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

虚拟内存相关笔记

虚拟内存是计算机系统内存管理的一个功能&#xff0c;它允许程序认为它们有比实际物理内存更多的可用内存。它使用硬盘来模拟额外的RAM。当物理内存不足时&#xff0c;操作系统将利用磁盘空间作为虚拟内存来存储数据。这种机制提高了资源的利用率并允许更大、更复杂的应用程序的…...

【linux】定时任务讲解

文章目录 一. 在某时刻只执行一次&#xff1a;at1. 设置定时任务2. 查看和删除定时任务 二. 周期性执行任务&#xff1a;cron1. 启动crond进程2. 编辑定时任务3. 查看和删除4. 用户权限4.1. 黑名单4.2指定用户 三. /etc/crontab的管理 一. 在某时刻只执行一次&#xff1a;at 1…...

安卓10创建文件夹失败

最近在做拍照录像功能&#xff0c;已经有了文件读写权限&#xff0c;却发现在9.0手机上正常使用&#xff0c;但是在安卓12系统上根本没有创建文件夹。经过研究发现&#xff0c;创建名称为“DCIM”的文件夹可以&#xff0c;别的又都不行。而且是getExternalStorageDirectory和ge…...

文件操作(c/c++)

文件操作可以概括为几步&#xff1a; 打开文件&#xff0c;写入文件&#xff0c;读取文件&#xff0c;关闭文件 FILE FILE 是一个在C语言中用于文件操作的库函数&#xff0c;它提供了一系列函数来实现文件的创建、打开、读取、写入、关闭等操作。FILE 库函数可以帮助开发者处理…...

设计模式-适配器

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

C. Queries for the Array - 思维

分析&#xff1a; 分析出现矛盾的地方&#xff0c;也就是可能遇到0&#xff0c;并且已有字符串的长度小于等于1&#xff0c;另一种情况就是&#xff0c;遇到了1并且已有字符串不是排好序的&#xff0c;或者遇到了0已有字符串是排好序的&#xff0c;那么可以遍历字符串&#xff…...

音频——硬件拓扑

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

Oracle表索引查看方法总结(查看oracle表索引)

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

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字节的一级缓存&#xff0c;那么按照64B的缓存单位大小来算&#xff0c;这个一级缓存所能存放的缓存个数就是512/64 8个。具体参见下…...

又一关键系统上线,理想车云和自动驾驶系统登陆OceanBase

8 月 1 日&#xff0c;理想汽车公布 7 月交付数据&#xff0c;理想汽车 2023 年 7 月共交付新车 34,134 辆&#xff0c;同比增长 227.5%&#xff0c;并已连续两个月交付量突破三万。至此&#xff0c;理想汽车 2023 年累计交付量已经达到 173,251 辆&#xff0c;远超 2022 年全年…...

SIEM(安全信息和事件管理)解决方案

什么是SIEM 安全信息和事件管理&#xff08;SIEM&#xff09;是一种可帮助组织在安全威胁危害到业务运营之前检测、分析和响应安全威胁的解决方案&#xff0c;将安全信息管理 (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)的使用

方法重写&#xff08;override&#xff09;:多态&#xff0c;通过父类类型对象&#xff0c;调用子类当中对应方法的实现。 细节&#xff1a;子类当中的override方法会“抹杀”父类当中对应virtual方法 不使用多态时&#xff0c;父类调用子类方法时&#xff0c;会调用父类的方法…...

kafka 动态扩容现有 topic 的分区数和副本数

文章目录 [toc]创建一个演示 topic生产一些数据使用消费者组消费数据增加分区无新数据产生&#xff0c;有旧数据未消费有新数据产生&#xff0c;有旧数据未消费 增加副本创建 json 文件使用指定的 json 文件增加 topic 的副本数使用指定的 json 文件查看 topic 的副本数增加的进…...

【数据结构】Golang 实现单链表

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

云服务器利用Docker搭建sqli-labs靶场环境

一、安装宝塔面板 使用xshell、electerm、SecureCRT等远程终端连接登陆上云服务器&#xff0c;在Linux宝塔面板使用脚本安装 安装后&#xff0c;如下图&#xff1a;按照提示&#xff0c;在云服务器防火墙/安全组放行Linux宝塔面板的端口 在浏览器打开上述网址&#xff0c;登…...