- 博客(57)
- 收藏
- 关注
原创 第10章 面向对象-10.4 继承
继承是面向对象编程中的三大特性之一,它指的是建立一个新类,从一个先前已经创建的类中继承其属性和方法,而且可以重新定义或添加新的属性和方法,进而建立类的层次或等级关系。其中,被继承的类称为父类(也可称为基类、超类),而实现继承的类称为子类。说的更简单一些,继承就是通过子类对已存在的父类进行功能扩展。在软件开发中,类的继承使所建立的软件具有开放性和扩展性,这是信息组织与分类行之有效的方法。它简化了类和对象的创建工作量,提供了类的规范的等级结构,使公共的特性能够共享,进而提高了软件的可重用性。
2026-04-20 22:14:07
726
原创 第10章 面向对象-10.3 封装
封装是面向对象编程中的三大特性之一,即在设计类时,刻意地将一些实例属性和实例方法隐藏在类的内部,这样在使用此类时,将无法直接以“对象.实例属性(或实例方法)”等形式调用,而是只能用未隐藏的类方法间接操作这些隐藏的实例属性或实例方法。类中的实例属性和实例方法如果没有被封装,就可以被外部随意调用,这是一种非常危险的操作。
2026-04-19 19:18:16
691
原创 第10章 面向对象-10.2类和对象
类和对象是面向对象的重要特征。类和对象的关系就如同模具和成品的关系,类的实例化结果就是对象,而对象的抽象就是类。类是一个独立的程序单位,是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述。在客观世界里,所有的事物都是由对象和对象之间的联系组成的。对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象是由一组属性和有权对这些属性进行操作的一组方法构成。下面通过一个实例来深入理解一下类和对象的关系。
2026-04-18 23:49:14
830
原创 第10章 面向对象-10.1 面向对象简介
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其它对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。Python 语言在设计之初,就定位为一门面向对象的编程语言,“Python中一切皆对象”就是对Python这门编程语言的完美诠释。
2026-04-17 09:50:10
22
原创 第9章 函数-9.9 函数式编程
函数式编程是一种抽象程度很高的编程范式,它将一个问题分解成一系列函数。函数式编程语言编写的函数是没有变量的,在理想情况下,函数只接受输入并输出结果,即只要输入是确定的,输出结果就是确定的,在这种情况下就不会产生副作用,此时可以称之为纯函数。而允许使用变量的程序设计语言,由于函数内部变量状态的不确定性,造成同样的输入,可能得到不同的输出结果,因此,这种函数是有副作用的。Python对函数式编程提供部分支持,但由于Python中的函数允许使用变量,因此,Python不是纯函数式编程语言。
2026-04-16 22:58:54
718
原创 第9章 函数-9.8 递归函数
递归函数可以用来解决许多类型的问题,例如计算阶乘、遍历树结构、求解斐波那契数列等。需要注意的是,在使用递归时,重要的是要确保递归有明确的终止条件,以避免无限递归造成栈溢出错误。递归函数的优点就是定义简单,且逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但是循环的逻辑不如递归清晰。下面就通过使用递归函数的方式和普通循环的方式创建起始两项元素为0和1的斐波那契数列。递归函数是一种特殊的函数,其会在函数内部通过调用自身来解决问题。
2026-04-15 09:42:47
91
原创 第9章 函数-9.7 函数嵌套
函数在进行嵌套之后,需要注意4点,一是内层函数可以访问外层函数中的所有变量,但不能修改外层函数中该变量的值;二是外层函数可以访问内层函数中的全局变量,但不能修改内层函数中该变量的值;三是外层函数不能访问内层函数的局部变量;四是不能在外层函数之外直接访问内层函数。Python支持函数嵌套,函数嵌套指的是在当前函数内再创建另外一个函数。
2026-04-14 21:34:20
33
原创 第9章 函数-9.6 变量作用域
一个程序中的所有变量并不是在哪个位置都可以正常访问,其访问权限取决于变量定义的位置,在不同位置定义的变量,它的作用域是不同的。变量作用域指的就是变量的有效范围,即变量可以在哪个范围内使用。有些变量可以在整段代码中的任意位置使用,有些变量却只能在函数内部使用。变量作用域可以分为局部变量和全局变量。
2026-04-13 08:59:59
327
原创 第9章 函数-9.5 函数参数的类型
其次,当需要使用默认参数的值时,则默认参数要放在位置参数、关键字参数和包裹位置参数之后,包裹关键字参数之前,当需要通过使用位置参数的形式修改默认参数的值时,则默认参数要放在包裹位置参数之前,位置参数之后,当需要通过使用关键字置参数的形式修改默认参数的值时,则默认参数只需要放在包裹位置参数之后,包裹关键字参数之前即可,不需要考虑其与关键字参数的位置。其次,无论修改或是使用默认参数,默认参数要放在位置参数和关键字参数之后,包裹关键字参数之前,但在修改默认参数时,其只能通过使用关键字参数的形式进行修改。
2026-04-12 18:59:33
620
原创 第9章 函数-9.4 函数参数的传递
值传递和引用传递的区别是,函数参数进行值传递后,若在函数内改变形参的值,不会影响实参的值;而函数参数进行引用传递后,若在函数内改变形参的值,则实参的值也会一并改变。在Python中,根据实参的数据类型,可以将函数参数的传递模式分为2种,一是值传递,其包括整数、浮点数、字符串和元组;二是引用传递,其包括列表、字典、集合和对象。
2026-04-11 17:28:45
1213
原创 第9章 函数-9.3 函数的文档注释
此外,除了可以通过使用pydoc工具和help()函数来查看文档注释,还可以通过使用__doc__属性来查看文档注释。无论是Python的内置函数,或者是自定义函数,都需要函数的设计者为其编写文档注释,其通常位于函数内部所有代码的最前面。在第4章编码规范中,已经详细介绍了什么是文档注释,本小节将详细介绍函数的文档注释。图9-1 使用__doc__属性的输出结果。上述代码的运行结果如图9-1所示。
2026-04-11 17:27:02
31
原创 第9章 函数-9.2 函数的调用
其中,“函数名”指的是要调用的函数名称;“实际参数”,简称实参,用于给创建函数时的形参传入数据,需要注意的是,即便该函数没有参数,函数名后的小括号也不能省略;“变量”为可选值,如果该函数有return语句,则可以通过一个变量来接收return语句返回的表达式,当然也可以不定义该变量,继而不接收该函数返回的表达式。函数调用的本质就是执行函数。
2026-04-10 18:45:29
42
原创 第9章 函数-9.1 函数的创建
第二,在函数名后小括号中的参数,称为形式参数(简称形参),多个形参之间用逗号分隔,注意,即使函数不需要形参,也必须保留一对空的小括号;第三,return语句主要用于退出函数,并将其后的表达式返回,该表达式可以是任意类型,如果return语句后没有表达式则返回None。此外,Python还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。函数是一段已完成封装且可以重复使用的代码,主要用于实现单一或相关联的功能,其可以使程序更加模块化,且不需要编写大量重复的代码。
2026-04-09 09:28:02
22
原创 第8章 流程控制-8.3 循环结构
循环结构就是让程序不断地重复执行同一段代码。Python中的循环结构有3种,分别是while循环、for循环和循环嵌套。
2026-04-09 09:20:38
700
原创 第8章 流程控制-8.2 选择结构
该选择结构Python会从上至下逐个判断表达式是否成立,一旦遇到某个成立的表达式,就会执行其后面的代码块,此时,不管其它的if或elif语句后的表达式是否成立,其后面的代码块都不再执行,即不管有多少个分支,都只能执行一个分支,或一个分支也不执行,而不能同时执行多个分支,最后按顺序继续执行除if..elif...else语句外的其它代码。选择结构也称为分支结构,就是让程序根据不同的结果有选择性的执行代码,换句话说,选择结构可以跳过无用的代码,只执行有用的代码。上面的代码也可以使用三元表达式的嵌套来完成。
2026-04-08 08:57:05
506
原创 第8章 流程控制-8.1 顺序结构
顺序结构就是让程序按照从头到尾的顺序依次执行每一条Python代码,不重复执行任何代码,也不跳过任何代码,即先执行第1条语句,然后执行第2条语句……以此类推,一直执行到最后一条语句。
2026-04-08 08:40:54
26
原创 第7章 运算符-7.8 运算符的优先级和结合性
当遇到优先级相同的运算符时,再根据结合性决定先执行哪个运算符,如果是左结合性就先执行左边的运算符,如果是右结合性就先执行右边的运算符。例如,对于表达式“100/25*16”,“/”和“*”的优先级相同,这时候就不能只依赖运算符优先级,还要参考运算符的结合性,“/”和“*”都具有左结合性,因此先执行左边的除法,再执行右边的乘法,最终结果为64。运算符的结合性指的是当一个表达式中出现多个优先级相同的运算符时,先执行哪个运算符,先执行左边的叫左结合性,先执行右边的叫右结合性。乘、除、整除、取模。
2026-04-08 08:39:32
34
原创 第7章 运算符-7.7 身份运算符
该数据类型的两个变量的值无论是否相同,都不会指向相同的内存地址引用。但是,如果使用的是直接赋值,则该数据类型的两个变量会指向相同的内存地址引用。如果该数据类型的两个变量的值相同,则指向相同的内存地址引用,反之,则指向不相同的内存地址引用。表7-7中列出了Python中的身份运算符, 在该表中,假设变量a的值为3,变量b的值为3。如果两个变量的内存地址引用不相同,则返回True,否则返回False。如果两个变量的内存地址引用相同,则返回True,否则返回False。2)列表、元组、字典和集合的内存地址引用。
2026-04-07 08:59:55
36
原创 第7章 运算符-7.6 成员运算符
表7-6中列出了Python中的成员运算符,在该表中,假设变量a的值为3,变量lt的值为[1,2,3,4]。如果在字符串、列表、元组、字典和集合中没有查找到指定的元素,则返回True,否则返回False。如果在字符串、列表、元组、字典和集合中查找到指定的元素,则返回True,否则返回False。成员运算符用于检查字符串、列表、元组、字典和集合中是否存在指定的元素。a not in lt,输出结果为False。a in lt,输出结果为True。表7-6 成员运算符。
2026-04-07 08:54:38
22
原创 第7章 运算符-7.5 比较运算符
表7-5中列出了Python中的比较运算符,在该表中,假设变量a的值为3,变量b的值为2。如果>=前面的值大于或者等于后面的值,则返回True,否则返回False。如果<=前面的值小于或者等于后面的值,则返回True,否则返回False。如果>前面的值大于后面的值,则返回True,否则返回False。如果<前面的值小于后面的值,则返回True,否则返回False。=两边的值不相等,则返回True,否则返回False。如果==两边的值相等,则返回True,否则返回False。a > b,输出结果为True。
2026-04-06 19:27:57
34
原创 第7章 运算符-7.4 逻辑运算符
表7-4中列出了Python中的逻辑运算符,在该表中,假设变量a的值为3,变量b的值为0。逻辑非运算,等价于数学中的“非”。当a为真时,则返回假,当a为假时,则返回真。逻辑与运算,等价于数学中的“且”。当a为假时,返回a的值,否则返回b的值。逻辑或运算,等价于数学中的“或”。当a为真时,返回a的值,否则返回b的值。在Python中,逻辑运算符包括与、或、非。not a,输出结果为False。a and b,输出结果为0。a or b,输出结果为3。表7-4 逻辑运算符。
2026-04-06 19:26:19
31
原创 第7章 运算符-7.3 位运算符
当前运算数的各二进位全部左移若干位,左移后的低位补0,左移运算符的右边数字指定了移动的位数。当前运算数的各二进位全部右移若干位,右移后的高位补0,右移运算符的右边数字指定了移动的位数。表7-3中列出了Python中的位运算符,在该表中,假设变量a的值为3,变量b的值为2。参与运算的两个值,如果两个值的相应位为1,则该位计算的结果为1,否则为0。参与运算的两个值,如果对应的二进位相同,则该位计算的结果为0,否则为1。参与运算的两个值,只要对应的二进位有一个为1时,则该位的计算结果就为1。
2026-04-06 19:24:40
46
原创 第7章 运算符-7.2 赋值运算符
表7-2中列出了Python中的赋值运算符,在该表中,假设变量a的值为3,变量b的值为2。c = a + b,将a+b的运算结果赋值给,c的输出结果为5。a /= b等价于a=a/b,a的输出结果为1.5。a **= b等价于a=a**b,a的输出结果为9。a //= b等价于a=a//b,a的输出结果为1。a += b等价于a=a+b,a的输出结果为5。a -= b等价于a=a-b,a的输出结果为1。a *= b等价于a=a*b,a的输出结果为6。a %= b等价于a=a%b,a的输出结果为1。
2026-04-05 19:30:07
150
原创 第7章 运算符-7.1 算术运算符
表7-1中列出了Python中的算术运算符,在该表中,假设变量a的值为3,变量b的值为2。算术运算符用于对数字进行数学运算,比如加、减、乘和除等。整除,返回商的整数部分(向下取整)。a / b,输出结果为1.5。a ** b,输出结果为9。a // b,输出结果为1。a + b,输出结果为5。a - b,输出结果为1。a * b,输出结果为6。a % b,输出结果为1。取模,返回除法的余数。表7-1 算术运算符。幂,返回a的b次幂。
2026-04-05 19:28:44
270
原创 第6章 数据类型转换-6.8 转换为集合
其中,参数x为可选参数,表示字符串、列表或元组,如果省略该参数,则该函数返回空集合。通过使用set()函数可以将字符串、列表或元组转换为可变集合。
2026-04-05 19:27:30
19
原创 第6章 数据类型转换-6.7 转换为字典
其中,参数x为可选参数,表示列表或元组,且该列表或元组必须是键值对形式,如果省略该参数,则该函数返回空字典。通过使用dict()函数可以将列表或元组转换为字典。
2026-04-04 16:40:21
22
原创 第6章 数据类型转换-6.6 转换为元组
其中,参数x为可选参数,表示字符串、列表或集合,如果省略该参数,则该函数返回空元组。通过使用tuple()函数可以将字符串、列表或集合转换为元组。
2026-04-04 16:36:40
19
原创 第6章 数据类型转换-6.5 转换为列表
其中,参数x为可选参数,表示字符串、元组或集合,如果省略该参数,则该函数返回空列表。通过使用list()函数可以将字符串、元组或集合转换为列表。
2026-04-03 17:19:07
108
原创 第6章 数据类型转换-6.4 转换为字符串
其中,参数x为可选参数,表示整数、浮点数、列表、元组、字典或集合,如果省略该参数,则该函数返回空字符串。通过使用str()函数可以将整数、浮点数、列表、元组、字典或集合转换为字符串。
2026-04-03 17:17:03
23
原创 第6章 数据类型转换-6.3 转换为布尔值
该部分内容读者需要重点记忆的是给定的值转换为布尔值为假的情况,包括:整数0、浮点数0.0、空字符串、复数0j、布尔值False、空列表、空元组、空字典、空集合和None,注意,对象(包括空对象)转换布尔值为True。其中,参数x为可选参数,表示Python中数据类型所对应的值,如果省略该参数,则该函数返回False。通过使用bool()函数可以将给定的值转换为布尔值。
2026-04-03 17:15:43
217
原创 第6章 数据类型转换-6.2 转换为浮点数
其中,参数x为可选参数,表示仅含有数字的字符串或浮点数,如果省略该参数,则该函数返回0.0。通过使用float()函数可以将仅含有数字的字符串或整数转换为浮点数。
2026-04-02 14:48:26
22
原创 第6章 数据类型转换-6.1 转换为整数
其中,参数x为可选参数,表示仅含有数字的字符串或浮点数,如果省略该参数,则该函数返回0;参数base为可选参数,表示参数x的进制,如果省略该参数,则默认为十进制,注意,如果设置了该参数,则参数x必须为仅含有数字的字符串。通过使用int()函数可以将仅含有数字的字符串或浮点数转换为十进制整数。
2026-04-02 14:46:32
25
原创 第5章 变量类型-5.10 集合
该方法可以删除可变集合中的指定元素,与remove()方法不同的是,如果删除一个不存在的元素时,该方法不会报错,而是直接输出原可变集合。这里需要注意的是,无论是创建创建空的可变集合或是空的不可变集合,都必须使用set()函数或frozenset()函数,因为{}表示的是空字典。此外,由于不可变集合属于不可变的数据类型,所以其元素是不允许被修改的,即不可变集合不具有添加、删除和修改其内部元素的方法。在集合中,无论是可变集合,还是不可变集合,都无法通过索引访问其元素,只能通过for循环进行获取。
2026-04-01 09:38:29
586
原创 第5章 变量类型-5.9 字典
二是字典中的键必须是不可变的数据类型,所以可以使用整数、浮点数、布尔值、字符串或元组等充当,而列表是不可以作为字典的键,因为列表是可变的数据类型。字典由多个键和其对应的值构成的键值对组成,键和值中间以冒号分隔,每个键值对之间使用逗号分隔,最后,由大括号将每个键值对包裹,即可完成字典的创建。参数default为可选参数,表示当删除的键不存在时返回的值,需要注意的是,如果当删除的键不存在时省略该参数,则报错。该方法可以删除字典中指定的键值对。可以通过使用for循环,获取字典中的键,并通过该键获取其所对应的值。
2026-04-01 09:33:48
288
原创 第5章 变量类型-5.8 元组
元组推导式的结构是在一个小括号里包含一个表达式,之后是一个for语句,然后是0个或多个if语句或for语句,注意,与列表推导式不同的是,在这个以if语句和for语句为上下文的表达式运行完成之后,返回的是一个生成器对象,需要使用tuple()函数来获得新的元组。有一点需要重点强调,即创建的元组中只有一个数据的时候,无论使用上述哪种方式创建,只要该数据之后没有逗号,则创建的不是元组,而是一个整数,所以,读者在创建只包含一个数据的元组时,一定要注意在该数据之后加上逗号。索引访问分为指定索引访问和切片索引访问。
2026-03-31 10:23:36
171
原创 第5章 变量类型-5.7 列表
由于列表本身就是一个对象,经过深复制之后,列表a和列表b,以及其内部元素(包括子对象[1,2,3])都是占有内存空间的独立对象,两个列表属于完全独立的两个对象,所以列表a和列表b的内存地址是不一致的,并且其内部元素(包括子对象[1,2,3])也不会被同时修改,即列表a和列表b完全独立。由于列表本身就是一个对象,所以直接赋值其本质就是对象的引用,即起别名,所以列表a和列表b的内存地址是一致的,并且由于列表a和列表b都指向同一个引用,所以列表a和列表b中的元素(包括子对象[1,2,3])也会被同时修改。
2026-03-31 10:14:47
1228
原创 第5章 变量类型-5.6 字符串
需要注意的是,f-string的占位符表示待格式化字符串的方式不同于format()函数,后者使用映射的方式表示待格式化字符串,而f-string的占位符可以直接为整数、浮点数、字符串或函数,甚至可以是对象中的属性或方法。参数end 为可选参数,表示搜索的结束索引,如果省略该参数,则默认值为需要统计的子字符串的长度,注意,统计范围不包括结束索引对应的值。参数end为可选参数,表示结束索引,如果省略该参数,则默认值为需要查找的字符或子字符串的长度,注意,查找范围不包括结束索引对应的值。
2026-03-30 20:09:20
463
原创 第5章 变量类型-5.5 空值
空值是Python里的一个特殊值,用None来表示。None不能表示为0,也不能表示为空字符串等,因为后者是有意义的,而None表示没有值,也就是空值。
2026-03-30 19:41:41
19
原创 第5章 变量类型-5.4 布尔值
在Python中,可以直接使用True或False来表示布尔值。需要注意的是,布尔值的首字母一定要大写,否则报错。
2026-03-29 12:44:36
17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅