使用 pickle 存储 Python 对象 在 Python 中, 提供的 pickle 模块能够将 Python 对象直接存储到文件中。 在需要使用数据时,直接从文件中读取,并还原为 Python 对象。 注意,pickle 操作的不是文本文件, 而是二进制文件。 因此, 存储的文件如果直接使用文本编辑器,则打开无法查看具体内容。 将 Python 对象存储到 pickle 文件的语法是: 1pickle.dump(obj, file) 从 pickle 文件中将二进制数据读取出来重建为 Python 对象的语法是: 1pickle.load(file) 将列表 ls 使用 pickle 模块存储在二进制文件 test.pkl 中,然后再次从文件中读取数据,重建为列表后打印: 12345678import picklels = ['Python', 'Java', 'C', 'Golang', 'C++', 'C#']file1 = open( ...
学习笔记
未读文件与路径 在计算机中,文件指的是存储在磁盘上的数据序列,它可以包含任何数据内容。 文件名是文件的一个重要属性。文件名通常由文件主名和扩展名构成。一般来说, 主名和扩展名之间用一个圆点“.”隔开。 扩展名由 1 ~ 4 个字符组成,用于表示文件的类型。 例如:report.docx 是主名为report、扩展名为docx 的word文档,searchGoods.py 是主名为searchGoods、扩展名为 py 的 Python 源文件。 计算机中使用文件夹(也常常称为目录)来组织文件。文件夹可以包含文件和其他文件夹。 路径指明了文件在计算机中存储的位置。路径中包含了存储文件的各级文件夹。文件夹之间用斜线隔开。在 Windows 中使用倒斜杠\来分隔,在 Mac OS 和 Linux 中使 用正斜杠/作为路径分隔符。有两种方式表示文件路径。 绝对路径:从根目录开始的路径。 相对路径:从当前工作目录开始的路径。 还有点.和点点..文件夹。它们不是真正的文件夹,而是可以在路径中使用的特殊名称。单个的句点(.)用作文件夹目名称时,是“这个目录”的缩写。两个句点(..)意思是父文件夹。 ...
学习笔记
未读引入 递归是一种广泛应用算法。它能够把一个大型复杂的问题转化为一个与原问题相似的较小规模的问题来求解,用非常简洁的方法来解决重要问题。就像一个人站在装满镜子的房间中,看到的影像就是递归的结果。递归在数学和计算机应用上非常强大,能够非常简洁的解决重要问题。程序设计中,通过函数定义中调用函数自身的方式来实现递归。 数学上有个经典的递归例子叫阶乘,阶乘通常定义为: n!=n∗(n−1)∗(n−2)...∗2∗1n! = n *(n-1)* (n-2)... *2* 1 n!=n∗(n−1)∗(n−2)...∗2∗1 这个关系给出了另一种方式表达阶乘的方式: n!={1n=0n∗(n−1)!n>0n! = \begin{cases} 1 & \text{n=0} \\ n*(n-1)! & \text{n>0} \end{cases} n!={1n∗(n−1)!n=0n>0 阶乘的例子揭示了递归的2个关键特征: 存在一个或多个基例,基例不需要再次递归,它是确定的表达式; 所有递归链要以一个或多个基例结尾。 根据用户输入的整数 n, 计算 ...
学习笔记
未读lambda 函数定义 Python 中提供了一项非常有用的功能:利用 lambda 函数来替代 def, 创建一个临时简单函数。 请注意, 与 def 语句不同,lambda 是一个表达式。 这就使得 lambda 能够出现在函数调用的参数中。而 def 语句则不能作为参数传递给函数。 1lambda <args>: <expression> lambda表达式创建一个函数,它会返回函数本身。 这也是lambda被称为匿名函数的原因,它本身是没有名称的。如果需要在后面代码中使用该匿名函数,也可以将它赋值给一个变量。这个变量的类型就是一个函数。 123getSecondItem = lambda x: x[1]print(type(getSecondItem))print(getSecondItem(['C','1972'])) 下面列举一些 Python 中经常用到匿名函数的场景。 应用一:列表排序 对于列表的sort()方法,可以通过key来传入一个函数,sort()方法将利用这个函数对列表每个元素的返回结果来排序。 ...
学习笔记
未读变量作用域 Python 中规定每个变量都有它的作用域, 即变量只有在作用域范围内才是可见可用的。 作用域能避免程序代码中的名称冲突,在一个函数中定义的变量名称不会干扰另外一个函数内的变量。这有助于使函数更加独立。 根据作用域范围的大小,可以将作用域分为全局作用域和局部作用域。 局部变量 局部变量仅仅在局部作用域内可用。在局部作用域之外,该变量是不可见的。 如果变量是在函数体内被创建(首次赋值)的,这个变量就只能在该函数体内使用,是这个函数体的局部变量。 函数执行结束后, 局部变量被销毁。函数的参数作为一类特殊的变量,是在函数调用时首先被创建并赋值的。参数也是局部变量。 12345def avg(x, y): avg_price = (x + y) / 2 print(avg_price)avg(10.0, 20.0)print(avg_price) 下图中的白色区域即为函数的局部作用域, 在这个局部作用域内创建的局部变量x、y和avg_price仅在白色区域可用。 全局变量 相对于局部变量,在所有函数之外创建的变量,在整个文件范围内都是可见的。也就是说,在所有 def ...
定义和调用函数 Python 中使用def语句创建函数,其一般的格式如下所示: 12def name(arg1, arg2, ...,argN): statements 下面这段代码定义了一个简单函数。 123def repeator(s, n): result = s * n print(result) 这段代码仅仅是对函数的定义,并没有调用执行。这条定义语句运行后会新建一个名为repeator的变量名,其类型为function,即函数。 12345def repeator(s, n): result = s * n print(result)print(type(repeator))# <class 'function'> 与内置函数一样,定义完函数后,可以通过函数名调用执行。 12345def repeator(s, n): result = s * n print(result)repeator('嗷', 3)# 嗷嗷嗷 在很多情况下,函数需要将计算的结果返回到调用处。在这类函数的函 ...
集合及基本操作 集合类型与数学中集合的概念是一致的。它是由 0 个或多个唯一的、不可变的元素构成的无序组合。和字典一样,集合也是通过一对花括号{}来标识的。 集合中的元素是不可重复的, 常常用于检查某个元素是否存在。 集合的元素不能是可变类型,例如列表、字典或者集合本身。 虽然集合中的元素必须是不可变类型,但是集合本身是可变的,可以添加、删除和清空集合元素。 创建集合 可以使用set()函数创建一个集合, 或者用花括号将一系列以逗号隔开的元素包裹起来创建。 12language = set(['C', 'C++', 'Java', 'Python'])print(language) 在 Python 中使用{}创建的是空字典, 而不是空集合。 创建空集合应该使用set()函数。 1print(type({})) 利用集合去重 集合的重要特征之一就是元素不重复。 因此, 当使用set()函数将其他可迭代对象转换为集合时,该函数会自动过滤掉重复元素。 ...
字典及基本操作 在 Python 中, 字典通过特定的键(key),查找对应的值(value)。键和值之间是一一对应的映射关系。字典是 Python 中唯一内置的、核心的映射类型。 字典通过一对花括号 {}来 标识。 字典与列表、元组不同, 其每个元素由键和值两个部分构成, 键和值之间用冒号 :隔开。不同键值对使用逗号隔开。 1{<键1>:<值1>, <键2>:<值2>, … , <键n>:<值n>} 相对于列表和元组,字典有以下一些属性: 字典是无序的。 字典是可变的。 字典的键必须是不可变类型。 字典的键不能重复。 通过键而不是索引序号来获取值。 创建字典 字典可以通过一对花括号{}或者dict函数来创建。 12dic = {'C':'1972', 'C++':'1979', 'Java':'1995', 'P ...
学习笔记
未读while 循环语句 Python 中有 while 和 for 两种循环结构,利用循环语句,可以让一个代码块一遍又一遍的执行。 对于while循环,只要while语句的条件为True,while子句中的代码就会执行。Python当中,while实现循环的方法如下: 12while condition: statements while语句看起来和if语句类似。不同之处是它们的行为。if子句结束时,程序继续执行if语句之后的语句。但在while子句结束时,程序执行跳回到while语句开始处。while子句常被称为“while 循环”,或就是“循环”。 代码实例: 123count = 0while count < 10: print(f'{count}的平方为{count ** 2}') for 循环语句 通常,for循环用于遍历序列(字符 串、列表和元组等)或任何可迭代对象内的元素,是一个通用的迭代器。for循环的一般形式是: 12for item in iterable_obj: statem ...
学习笔记
未读语句和代码块 程序是由语句和表达式构成的。 还有一些语句不仅仅由一行代码构成,例如分支和循环语句,在选择不同的分支或者 循环条件满足的情况下,有时需要执行多行代码。这样的语句称为复合语句。 缩进的作用 在 Python 中, 要求使用缩进来标识代码块。 相同层级的代码必须以垂直对齐的方式来组织, 即相同的缩进。 一些代码行可以作为一组,放在“代码块”中可以根据代码行的缩进,知道代码块的开始和结束。代码块有3 条规则。 缩进增加时,代码块开始。 代码块可以包含其他代码块。 缩进减少为零,或减少为外面包围代码块的缩进,代码块就结束了。 Python语言采用严格的“缩进”来表明程序的格式框架。缩进指每一行代码开始前的空白区域,用来表示代码之间的包含和层次关系。 Python 对于缩进的数量没有严格规定,比较常见的是使用 4 个空格或者 1 个制表符。但最好不要在同一段代码中混合使用空格和制表符,这样可能会引起语法错误。 Python 的复合语句首行总是使用冒号:结尾。输入冒号后回车,新的代码行将自动缩进,以便于输入代码块中的语句。 12首行语句: 内嵌代码块 条件表达式 控制语 ...