自学Python

Chapter 2

第2章Python基础

章节主张

第2章Python基础这一章真正要建立的,不是孤立知识点,而是围绕“基础语法是后续一切抽象的地基、函数与模块是从会写到会组织的分水岭、环境与工具链先于语法细节”形成一套能反复练习、能迁移到真实任务里的 Python 学习路径。

中文释读

读 第2章Python基础 时,不要只把它当作语法或模块说明书。更有价值的读法,是问自己:这一章解决了我在编程、科学计算或数据分析流程中的哪个瓶颈?

这本书的强项在于把工具、基础语法、科学计算库和案例工作流连成一条线。章节页因此会把原书内容翻译成“知识点 -> 操作动作 -> 易错边界 -> 迁移练习”的学习结构。

本章知识路线

关键论据

  • 本节将对Python的各种基础用法进行简单的演示和介绍,具体的细节与原理将在之后的章节中逐步展开介绍。
  • 1.简单的数学运算 Python支持简单的数学运算,例如,数字间的加减乘除: 2.变量的赋值 变量 (Variable)是一个有名字的对象,可以利用变量名对变量进行操作。
  • 在Python中,可以直接使用“=”对变量进行赋值。
  • 例如,将值0.2赋给变量a: IPython解释器没有显示“Out []”的结果,原因是赋值表达式的返回值为None。
  • None是Python中一种特殊的数据类型,表示空类型,即什么都没有。

行动清单

  • 先用最小代码样例跑通本章核心知识点。
  • 把本章知识点接到一个真实小任务上,而不只停留在示例。
  • 记录本章最容易报错的边界条件和调试方式。
  • 复盘:这一章内容如何进入自己的长期 Python 学习系统。

本章图版学习路径

图版按知识点分组,适合拿来做复现、迁移和复盘练习,不只是“看一眼效果”。

源章节深读

2.1 基础语法简介

这节解决什么问题:这节要解决的不是背下“2.1 基础语法简介”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“2.1 基础语法简介”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 2.1 基础语法简介 背后的对象模型、输入输出和适用边界。

本节将对Python的各种基础用法进行简单的演示和介绍,具体的细节与原理将在之后的章节中逐步展开介绍。 1.简单的数学运算 Python支持简单的数学运算,例如,数字间的加减乘除: 2.变量的赋值 变量 (Variable)是一个有名字的对象,可以利用变量名对变量进行操作。在Python中,可以直接使用“=”对变量进行赋值。例如,将值0.2赋给变量a: IPython解释器没有显示“Out []”的结果,原因是赋值表达式的返回值为None。None是Python中一种特殊的数据类型,表示空类型,即什么都没有。 Python对变量的值和类型没有任何限制,可以随时修改变量a的值和类型,如“a=100”或者“a='abc'”。除了值,也可以将一个完整的表达式赋给变量。Python会先计算表达式,然后将表达式计算得到的结果赋给变量。例如,将表达式“4*3”赋值给a后,a的值为12: Python还支持一次给多个变量赋值的方式: 赋值后,a的值为0.2,b的值为2。 3.函数的调用 Python中的函数可以通过“函数名(参数)”的方式调用,完成不同的功能。例如,用abs()函数计算绝对值: 用max()函数计算一组数的最大值: 4.基础类型数据的生成 在Python中,基础类型的数据可以使用不同的语法来生成。 (1)数字 在Python中,数字可以直接输入。例如,负数: 科学计数法: 复数:

2.2 数据类型

这节解决什么问题:这节要解决的不是背下“2.2 数据类型”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“2.2 数据类型”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 2.2 数据类型 背后的对象模型、输入输出和适用边界。

数据类型 (Data Type)是一个编程语言的基础,它决定了数据在计算机内存中的存储方式,每一个变量都有一种对应的数据类型。基于不同的数据类型,可以实现很多复杂的功能。在Python中,常用的数据类型见表2-1。 表2-1 Python中的常用数据类型 其中,整型、浮点型、布尔型和字符串是Python中最基本的类型;列表、元组、字典、集合是Python中的内置容器类型。 容器 (Container)是用来存放基本对象或者其他容器对象的一种类型。 Python 3中的数字类型主要包括四种,分别是整型、浮点型、复数型、布尔型: 1.整型 整型 (Integer)是最基本的数字类型,表示一个整数。整型支持基本的加(+)、减(-)、乘(*)、除(/)四则运算,例如: 除了除法外,两个整型的运算结果返回的是整型。两个整数的除法在Python 3中返回的是一个浮点数,这一点与Python 2不同。 Python 2与Python 3的区别之整数除法: 在Python 2中,两个整数的运算结果只能是整数,除不尽时将结果向下取整,返回小于该结果的最大整数,如12/5的值为2;在Python 3中,整数之间的除法一律返回浮点数,12/5的结果为2.4: 不过,Python 3继承了Python 2中整数除法“//”的用法,返回向下取整后的值: 除了加、减、乘、除操作,整型还支持取余(%)和幂指数(**)运算: Python 3中的整型只有一种,不像Python 2将整型分成了整型和长整型两种类型。 Python 2与Python 3的区别之整型与长整型 :在Python 2中,当整数类型的值大于系统规定的范围时,Python会自动将整数的类型由整型转换为长整型(long)。在Python 3中,长整型被取消,任

2.3 判断与循环

这节解决什么问题:这节要解决的不是背下“2.3 判断与循环”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“2.3 判断与循环”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 2.3 判断与循环 背后的对象模型、输入输出和适用边界。

判断和循环是程序的重要组成部分,Python可以通过它们实现很多复杂的功能。 判断语句 (If-Statement)基于某种条件触发,当条件满足时,执行特定的操作。 1.if语句 Python使用关键字if语句实现判断,最简单的用法为: 它包含这样几个部分: ●if关键字,表示这是一条判断语句。 ●<condition>表示判断的条件,当这个条件被满足(即条件为真)时,执行<statements>中的代码,若条件不满足,<statements>中的代码不会被执行。 ●冒号“:”表示判断代码块的开始。 ●<statements>表示条件满足时,执行的代码块。 例如: 因为x满足大于0的条件,所以程序会打印出相关文字。条件不满足时,程序不会执行if代码块中的部分,例如: 若判断语句执行的代码块结束,之后的代码需要回到判断语句开始时的缩进状态才能继续执行: x<0的情况: 在这些例子中,最后一句不属于if语句,不管条件满不满足,它都会被执行。 2.elif和else语句 更一般地,一个完整的if结构通常如下: 其中,关键字elif表示的是else if的意思。其执行过程为: ●条件<condition 1>满足,执行if后的代码块,跳过elif和else的部分。

2.4 函数与模块

这节解决什么问题:这节要解决的不是背下“2.4 函数与模块”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“2.4 函数与模块”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 2.4 函数与模块 背后的对象模型、输入输出和适用边界。

函数和模块是Python可扩展性的一个重要组成部分。函数可以帮助复用代码,减少代码量;模块使人们可以使用现成代码,避免重复工作。 计算机科学中, 函数 (Function)是程序负责完成某项特定任务的代码单元,具有一定的独立性。函数通过名称进行调用,用一个小括号接受参数,并得到返回值,例如: 1.函数的定义 在Python中,函数在定义时需要满足这样的规则: ●使用关键字def引导。 ●def后面是函数的名称,括号中是函数的参数,不同的参数用逗号“,”隔开,参数可以为空,但括号不能省略。 ●函数的代码块要缩进。 ●可以用一对"""包含的字符串作为函数的说明,来解释函数的用途,可省略,在查看函数帮助时会显示。 ●使用关键字return返回一个特定的值,如果省略,返回None。 例如,定义一个接受两个变量x和y的函数add(),计算x与y的和,并返回该值: 2.函数的调用 定义好函数后,函数并不会自动执行,需要调用它才能执行相关的内容。函数的调用使用函数名加括号的形式,参数放在括号中: Python不限定函数参数的输入类型,因此,使用不同类型的对象作为参数并不会报错,只要这些传入的参数支持相关的操作即可。对于add()函数而言,由于数字和字符串都支持加法操作,因此上面的调用都是合法的。当传入的两个参数不支持加法时,Python会将抛出异常: 当传入的参数数目与实际不符时,也会抛出异常: 传入参数时,Python提供了两种模式,第一种是按照参数的顺序传入,另一种是使用键值模式,按照参数名称传入参数。例如,使用键值模式,上面的例子可以写成: 两种模式可以混用,此时,Python会先按照顺序模式给参数赋值,然后使用键值对模式赋值: 在混用时,需要注意不能给同一个值赋值多次,类似于add(2,x=3)的形式

2.5 异常与警告

这节解决什么问题:这节要解决的不是背下“2.5 异常与警告”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“2.5 异常与警告”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 2.5 异常与警告 背后的对象模型、输入输出和适用边界。

异常和警告是编写程序过程中经常遇到的问题。了解异常和警告的相关知识,可以更好地处理编程中遇到的问题。 1.捕捉异常 在运行代码时,不可避免地会遇到程序出错的情况,在Python中,这些错误通常叫作 异常 (Exception)。例如,编写一个用于计算以10为底的对数的程序,该程序利用input()函数从命令行读取输入,计算它的对数并输出结果,直到输入为“q”为止: 程序似乎看起来没什么问题,然而,输入负数-1时,程序抛出了一个ValueError异常,原因是对数函数不能接受一个非正值输入: 正常情况下,Python程序在抛出异常后就会停止执行。如果不希望程序停止运行,可以使用一对关键字try和except来处理异常,其基本形式如下: 当try块中的代码遇到异常时,这个异常会首先由except块的代码进行处理。如果except块能处理这个异常,则执行except块相应的内容,然后程序继续执行;如果不能,该异常将被继续抛出。 在上面的例子中,代码抛出的异常类型是ValueError。为了让程序接受异常输入,首先将可能出错的部分放入try块,再用关键字except处理ValueError类型的异常: 再执行时,输入负数或者0都不会中断程序,而是打印expect块输出的信息: 2.处理不同类型的错误信息 对上面的代码进行修改,将y的值改为1/math.log10(x): 如果输入1: 由于1的对数为0,数学上1除以0是一个非法操作,所以Python抛出了一个类型为ZeroDivisionError的异常。这个异常首先传到except块中,但except块并不能处理这种类型的异常,因此,该异常被继续传递,程序停止运行。 这个问题有以下几种解决方式。 1)可以使用Exception替换ValueError,

2.6 文件读写

这节解决什么问题:这节要解决的不是背下“2.6 文件读写”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“2.6 文件读写”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 2.6 文件读写 背后的对象模型、输入输出和适用边界。

使用Python读写文件是一个经常会遇到的问题。Python提供了一些方便的文件处理模式来完成读写文件的功能。 假设有一个文件“test.txt”,内容为: Python提供了open()函数,使用文件名作为参数来打开一个文件: open()函数返回一个打开的文件对象: 其中,“r”表示只读模式,encoding表示文件打开的编码方式。open()函数默认以只读的方式打开文件,如果文件不存在,程序会抛出异常。 只读模式 (Read-Only Mode)指的是只能读取文件的内容而不能修改它。 可以调用.read()方法来一次读取文件中的所有内容: 读取完一个文件时,需要使用.close()方法将这个文件关闭: 刚才的.close()方法已经将文件关闭,再次读取需要重新打开该文件: 也可以使用.readlines()方法对文件内容按行读取,该方法会返回一个列表,每个元素为文件中每一行的内容: .readlines()方法返回的列表中,每一行行末的回车符“\n”会被保留。 可以使用for循环对文件对象进行遍历,每次读取一行,直到不能读取为止: 还可以使用.readline()函数只读取文件的一行: 在这种情况下,由于文件并没有被读取完整,可以继续读取后续的内容。如果此时调用.read()方法,会得到除第一行之外的所有内容: Python写文件同样使用open()函数,只不过需要改变它的文件打开方式。open()函数默认的打开方式为只读,即“mode='r'”: 写文件的时候,可以通过传入一个参数将模式转换为写: 这里,模式“w”表示文件使用 只写模式 (Write-Only Mode)打开。在该模式下,如果文件不存在,这个文件会被创建出来;如果文件存在,文件中的内容将被清空。 在写文件模式下,可以使用

2.8 本章学习笔记

这节解决什么问题:这节要解决的不是背下“2.8 本章学习笔记”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“2.8 本章学习笔记”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 2.8 本章学习笔记 背后的对象模型、输入输出和适用边界。

本章详细介绍了Python的基本使用方法,主要包括两部分,一是基础语法结构,二是主要数据类型。熟练掌握这两部分的内容,才能使用Python编程解决实际问题。 学完本章,读者应该做到: ●熟悉Python的基础语法。 ●知道Python中的主要数据类型。 ●掌握数字、字符串等基本类型的使用。 ●掌握列表、元组、集合、字典等容器类型的使用。 ●了解Python的赋值机制。 ●掌握Python中的判断和循环语句。 ●知道列表推导式的使用。 ●了解并掌握函数的定义和调用。 ●了解并掌握导入模块和包的方式。 ●了解异常处理和警告。 ●了解Python中的常用内置函数。 1.本章新术语 本章涉及的新术语见表2-10。 表2-10 本章涉及的新术语 (续) 2.本章新函数

辨析题:如果你只会照抄 第2章Python基础 里的例子,却无法换一个输入自己写出来,真正缺的是什么?

多数时候缺的不是记忆,而是对象模型、输入输出边界和操作顺序的理解。把知识点换到新输入上依然能运行,才算真的进入了自己的系统。