文章摘要: Python是编程语言。
相关信息
外部相关文章
- python官方说明文档,(强烈推荐)很详细且标准,但可以观看其他第三方对python官方文档的二次总结。
- PyPI,众多第三方包的下载网站。
内部相关文章
- 官方API:Language-Python3-API
- 问题总结:Language-Python3-问题总结
- 代码风格:Language-Python3-热门推荐-代码风格
- 使用技巧:Language-Python3-热门推荐-使用技巧
- 公共知识 - 数据结构:DataStructure(数据结构)
- 公共知识 - 设计模式:DesignPattern(设计模式)
- 公共知识 - 算法设计:Algorithm(算法设计)
- 公共知识 - 软件架构:Architecture(软件架构)
介绍
简要说明
- Python是一种面向对象、解释型、跨平台、动态类型、开源的程序语言。
主要功能
- 开源免费:解释器和标准模块是开源的,但在使用第三方开发者的代码时不得违反其开源协议。
- 高级语言:Python 封装较深,屏蔽了很多底层细节,如Python 会自动管理内存。
- 语法简单:实现相同功能,代码量相比其他语言要少很多。
- 开放源码:Python和大部分支持库及工具都是开源的,使用时仍需要根据相关的开源协议。
- 胶水特性(可扩展性):可与其他编程语言集成,如C、C++、Java等。
- 跨平台(可移植性):可用于大部分操作系统、集群、服务器,甚至小设备(如:树莓派)上。
- 多用途:可用于快速、交互式代码开发,也可用于构建大型应用程序,如科学计算、数据处理、人工智能等。
- 第三类库丰富:除了自身提供的几百个内置库,开源社区还贡献了十几万个第三方库,拥有良好的编程生态。
注意事项
- 代码加密困难:不像编译型语言的源代码会被编译成可执行程序,Python 是直接运行源代码,因此对源代码加密比较困难。
- 运行速度较慢:运行速度慢是解释型语言的通病,执行速度比C/C++语言的速度慢很多。
适用场景
- Web和Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫、自动化办公
缩进
python程序语言通过缩进来控制代码的运行流程,因此严格、准确、一致的缩进非常重要。
缩进规范
- Python使用缩进来指示代码块。
- 缩进指的是代码行开头的空格。
- 标准编写代码缩进4个空格,即一个
Tab键。 - 在其他编程语言中,代码缩进仅出于可读性的考虑,而 Python中的缩进非常重要。
- 缩进不建议超过4个,过多的缩进会导致降低代码可读性。
注释
- 程序员在代码中加入的辅助说明,不能被计算机执行,不受语法的限制,可以写任何内容。
单行注释
- 将
#写在当前行开头位置。
多行注释
- 将
'''、"""写在要注释的前一行和后一行,多行注释是成对组成。 - 就是将需要注释的文本包裹在其之间。
标识符
- 标识符在python语言中用于规范命名解释器能识别的可执行代码对象的名称。
- 变量、常量、关键字、运算符、函数、类、模块、包、库都属于标识符。
命名规范
- 变量名:全部小写,单词之间使用下划线连接,开头不能是数字,下划线开头是私有变量。
- 函数名:全部小写,单词之间使用下划线连接,开头不能是数字,下划线开头是私有函数。
- 类名:首字母大写,多个单词之间使用下划线连接,开头不能是数字,下划线开头是私有类。
- 常量名:全部大写,多个单词之间使用下划线连接,开头不能是数字,下划线开头是私有常量。
作用域
- 作用域指标识符的作用范围(作用域),python语言根据变量可供访问的作用范围,分为全局、局部、闭包。
- 全局作用域:从赋值定义开始,后续代码知道结束都可以访问该变量。
- 局部作用域:只能在被定义的函数或者类内部才能被访问该变量。即在同一个文件且在同一个代码块内。
- 闭包作用域:导入某个外部函数在现在程序的某个函数或类之间运行的标识符,外部函数与内部嵌套函数之间。
- 全局 > 闭包 > 局部
- 可使用
global和nonlocal关键字来改变变量的作用域范围。
有关global和nonlocal关键字详细说明请查看该文章:内置函数
关键字
详细总结:Python3关键字
变量
- 变量是存放数据值的容器。
- python没有声明变量的内置函数,在首次赋值时就是创建变量。
- 创建变量使用
=(等号)来给变量赋值,等号左边是变量名,等号右边的存储的值。 - 变量本身没有类型,“类型”指的是变量中存储对象的数据类型。
- 命名规则,在同一个程序中名字必须是唯一的,不能与内置函数重名。
变量赋值
- 单变量单存储对象,
例子:a = 2 - 多变量单存储对象,
例子:a = b = c = 1 - 多变量多存储对象,
例子:a,b,c = 1,2,"abc"
常量
- 常量是赋值之后就不会变化的固定值,变量其实也可以选择不变化数值。
- python的常量和变量一般通过变量名全大写来表示一个常量,但其数值依旧可以更改,因此python提供通过自定义类来实现常量,这要求符合“名称字母全大写”和“值一点被绑定便不可再修改”这两个条件。
- 内置函数中也具有内置常量。
注释
- Python并未提供如C/C++/Java一样的const修饰符,换言之,python中没有常量,python程序一般通过约定俗成的变量名全大写的形式表示这是一个常量。然而这种方式并没有真正实现常量,其对应的值仍然可以被改变。后来,python提供了新的方法实现常量:即通过自定义类实现常量。这要求符合“命名全部为大写”和“值一旦被绑定便不可再修改”这两个条件。
运算符
- 运算符用于对变量和值执行操作。
- 运算符可分为一下7类:算术运算符,赋值运算符,比较运算符,位运算符,逻辑运算符,身份运算符,成员运算符
详细总结:运算符
运算符优先级
- Python运算符优先级,是描述在计算机运算计算表达式时执行运算的先后顺序。
- 先执行具有较高优先级的运算,然后执行较低优先级的运算。
- 例如,我们常说的先执行相乘和除,再执行加减运算。
详细总结:运算符优先级
数据类型
- 在编程中,数据类型是一个重要的概念,变量可以存储不同类型的数据,并且不同类型可以执行不同的操作。
- 在其他编程中或者其他用途中会有不同的数据类型。
详细总结:内置数据类型函数方法
注释
python拥有以下内置数据类型:
- 文本类型:str(字符串)
- 数值类型:int(整数)、float(浮点数)、complex(复数)
- 序列类型:list(列表)、tuple(元组)
- 映射类型:dict(字典)
- 集合类型:set(集合)
- 布尔类型:bool(布尔)
- 二进制类型:bytes(二进制)
- 上下文管理器类型
- 迭代器类型
- 其他内置类型
- 特殊属性
str(字符串)
- 字符串是一个容器,包含若干个字符并按照一定的顺序组织成一个整体。字符串支持索引和切片操作。
- 字符串以“字符”为基本单位。
操作
- 删除、查找(查询)、修改(替换)、提取、合并(拼接、连接)、拆分(切割)
- 其他操作(获取长度、重复输出、字符统计、字符转换、格式转换、比较、获取状态)
案例
# 一对单引号
str1 = '123'
# 一对双引号
str2 = "12345"
# 一对三个单引号
str3 = '''
abc
123
中文
'''
int(整数)
- 整数是由正整数、零、负整数构成。
- 在python语言里整数的长度不受限制,仅受虚拟内存大小的限制。
==待完善==
float(浮点数)
- 浮点数是带小数点的数字。
- 由于计算机对于浮点数存储的只是近似值,不精确的数字。
==待完善==
complex(复数)
- 复数由实部和虚部组成
==待完善==
list(列表)
- 列表(list),是可变序列类型,可以再次更改或替换元素等。
- 列表能够存储各种类型的数据,并且能在列表中嵌套字符串、数字、列表、元组、字典、集合等数据类型。
- 列表每个值称为元素,元素是基本单位。
- 使用一对方括号来表示空列表:
[ ] - 用方括号
[]来表示列表的开始和结束,元素之间用逗号,分割。 - 列表中每个元素都有对应的下标。
- 列表中元素的下标顺序是:从左往右,从0开始计数;而从右往左,从-1开始计数。
==待完善==
tuple(元组)
- 元组(tupel),是不可变序列类型,不允许再次更改或替换元素等。
- 元组能够存储各种类型的数据,并且能在列表中嵌套字符串、数字、列表、元组、字典、集合等数据类型。
- 元组每个值称为元素,元素是基本单位。
- 使用一对圆括号来表示空元组:
( ) - 用圆括号
()来表示列表的开始和结束,元素之间用逗号,分割。 - 建议创建非空元组的时候,在元素后面加一个逗号,用来区分普通括号和元组。
- 元组不能对元素进行增加元素、变换元素位置、修改元素、删除元素操作。
- 元组中每个元素都有对应的下标。
- 元组中元素的下标顺序是:从左往右,从0开始计数;而从右往左,从-1开始计数。
==待完善==
dict(字典)
- 字典(dict),是可变且无序的映射类型,允许再次更改或替换元素,不支持排序。
- 字典内部结构用哈希表构成,通过唯一的访问键对应的值,因此字典没有提供排序功能。
- 目前映射类型只有字典一种类型。
- 字典以键值对为基本元素。
- 键值对,由键(key)和值(value)组成,中间用冒号
:分割。 - 键(key)需要满足唯一性、不可变性。
- 值(value)可以是任何数据类型,没有规定限制。
- 使用一对花括号来表示空字典:
{ } - 用花括号
{}来表示列表的开始和结束,元素之间用逗号,分割。 - 字典属于典型的一对一映射关系的数据类型。
- 字典中每个元素都有对应的下标。
- 字典中元素的下标顺序是:从左往右,从0开始计数;而从右往左,从-1开始计数。
==待完善==
set(集合)
- 集合是可变类型,允许再次更改或替换元素等。
- 集合是具有唯一性、无序性、确定性的多项集。
- 常见的成员检测、去除重复项、交集、并集、差集、对称差集等。
- 集合每个值称为元素,元素是基本单位。
- 使用一对花括号来表示空集合:
{ } - 用花括号
{}来表示列表的开始和结束,元素之间用逗号,分割。 - 集合中每个元素都有对应的下标。
- 集合中元素的下标顺序是:从左往右,从0开始计数;而从右往左,从-1开始计数。
==待完善==
简化语法
索引和切片操作
- 索引和切片主要用于简化“文本类型”、“数值类型”、“序列类型”、“映射类型”、“集合类型”的对象来进行操作。
下标的概念
- 下标是用于定位对象中某个或多个元素的具体位置。
- 下标从左往右查找,从0开始计数。
- 下标从右往左查找,从-1开始计数。
- 下标用整数类型进行计数。
切片操作
| 案例 | 解释 |
|---|---|
| s[i] | 代表对象s元素下标的第i项 |
| s[i:j] | 代表对象s元素下标的从第i项到第j项区间内的切片,且切片是左闭右开区间形式,即包含i但不包含j的区间范围 |
| s[i:j:k] | 代表对象s元素下标的从第i项到第j项区间内且步长为k的切片,步长k代表每隔多少下标后选定一个元素 |
字符串格式化
# 使用 f-string 格式化字符串
name = 'Alice'
age = 25
s = f"My name is {name} and I'm {age} years old."
# 输出内容: My name is Alice and I'm 25 years old.
# 使用 format() 方法格式化字符串
num = 123
s = "The number is {}".format(num)
# 输出内容:The number is 123
# 使用 % 运算符进行字符串格式化
num = 123
s = "The number is %d" % num
# 输出内容:The number is 123
函数
- 函数指把通过专门的代码组织,用来实现特定功能的代码块,具有相对独立性,可供其他代码重复使用。
- 在一个程序中重复的代码太多会导致代码臃肿、阅读麻烦、调试困难,因此需要函数这个功能。
- 函数能使得代码非常简练,代码模块化、提高代码编写效率和质量,使用自定义函数独立打包共享给他人使用。
- 函数可以分为内置函数、第三方函数、自定义函数。
注释
- 在实际独立引用对象名称时,为了区分函数和方法,把带小括号统一认为是方法,不带小括号的为函数。
内置函数
- python官方封装好的函数一起放在Lib目录下的算法模块,又称内置函数。
- 内置函数用于代码重复使用,减少代码量。
- 无需通过“improt”内置函数导入,就能直接使用的函数。
- 使用不是python标准库中自带的函数,使用第三方库中的函数,又称第三方函数。
- 详细总结:内置函数
保留字
- python编程语言的语法规则(特定用途)的函数(标识符),即保留字(关键字)。
- 无需通过“improt”内置函数导入即可使用的内置函数。
- 保留字也属于内置函数。
注释
- 内置函数不能再次作为常规变量名或函数名重新命名(理论上可以再次重新命名,但会覆盖原本的功能)。
- 保留字不能再次作为常规变量名或函数名重新命名。
自定义函数
"""
- 一个标准的函数由“函数名、参数、函数体、返回值”四个部分组成
- 关键字`def`是内置函数,用于定义函数的函数
- 关键字`return`的内置函数,用于返回指定的数据
- 定义函数时可以不指定参数、返回值
"""
def 函数名(参数):
函数体
return 返回值
函数名的命名规范
- 不能与现有的内置函数重名。
- 建议名称要能准确表达函数的功能。
- 全部小写,单词之间使用下划线连接,开头不能是数字,下划线开头则代表是私有函数。
函数的参数
上面案例中展示的参数称为形参(形式参数),在调用函数时赋予的值称为实参(实际参数)。
实际参数:创建实例,就是把一个函数或者类实例化,而实例中或者一个方法中要添加/输入/加入一个或者多个参数,这个参数叫实际参数。
形式参数:在函数中或者类中要添加的参数,这个参数会根据主程序或者实例化中的参数(实际参数)变化,因此叫形式参数。
形参(形式参数)支持的传递形式
- 位置参数:函数的参数可以由多个形式参数,接收实际参数的时候是有前后之分的,因此给出的实际参数要与形式参数的位置依次对应。
- 默认参数:可在函数中先指定参数的值。
- 关键字参数:为了避免参数对应混乱,可以使用 “参数名=值” ,在调用函数时显示表示,而无需考虑参数的位置顺序。这会有默认值,通过覆盖原来的值实现变化。
- 不定长参数:在自定义函数的参数前面加入符号。
- 在形式参数前面写上
*,能接收任意个参数。 - 在形式参数前面写上
**,能接收任意个数的键值对。
- 在形式参数前面写上
函数传递对象总结
- 不可变对象(数字、字符串、元组),在函数里更改值后,会变成新的对象,不影响函数外的对象。
- 可变对象(列表、字典),在函数里更改值后,函数不会变成新的对象,会同步影响函数外的对象。
第三方函数
- 第三方函数是指那些不是Python标准库中的函数,而是来自第三方库或模块的函数。
- 需要通过导入第三方库(包、模块),才能在代码中使用的函数,称为第三方函数。
- 第三方函数就是需要用户自己去下载并安装到python中才能使用的函数。
构造函数
- 构造函数是指当创建类的实例对象时,自动调用的方法(函数)。
__init__()方法是一个特殊的方法,它在创建类的新实例时自动调用。它允许我们为新创建的对象设置初始状态或属性。- 当使用
class关键字创建一个新类时,可以定义__init__()方法来初始化新创建的对象。
私有函数
- 私有函数是指以
__(双下划线)开头的函数。这种命名约定是一种约定俗成的做法,用于表示该函数是私有的,不应该被直接访问或调用。 - 私有函数的目的是为了将某些实现细节隐藏在类内部,而不是暴露给外部代码。这样可以提高代码的可维护性和可读性,并避免命名冲突和意外修改。
- 私有函数可以在类的内部被调用,但不能直接从类的外部访问。要调用私有函数,需要通过类的公有方法进行访问。
匿名函数
- 匿名函数是指没有显式命名的函数,也称为lambda函数。
- 匿名函数主要用于定义简单的、一次性使用的函数.
- 通常在需要一个函数但又不经常使用的情况下使用。
递归函数
- 递归函数是一种特殊的函数,它直接或间接地调用自身来解决问题。
- 递归函数通常用于解决可以分解为更小的子问题的问题。
类
- 类是对现实世界理解和抽象的一种方法,这种方法也被称为 “面向对象编程” 。
- 在现实中,过程是易变的,对象是相对不变的,因此把代码整理成类,更方便别人调用。
- 类可以理解为是对一类事物的归纳。
提示
| 现实世界(事物) | 类(模板) | 对象(实例) |
|---|---|---|
| 特性/状态 | 变量/常量 | 属性 |
| 行为/操作 | 函数 | 方法 |
交流约定
- 这种方法把具有相同特征(属性)和行为(方法)的对象进行抽象整合称为类,我们称之为 “封装”。
- 属性就是一个事物的特征,用于描述一个对象。
- 函数就是一个事物的行为,用于描述一个对象的能力。
- 特征(属性)本质是类里面创建的变量,称之为 “成员变量”。
- 行为(方法)本质是类里面创建的函数,称之为 “成员函数”。
- 面向对象编程的核心方法是封装、继承、多态。
- 类分为动态类、静态类。
- 实例由动态类生成,核心是属性和方法。
- 现实世界对象的特征抽象为动态类的数据变量,数据变量通过实例的属性来做读写操作,并且各个实例属性独立,互不干扰。
- 现实世界对象的行为抽象为动态类的函数,函数通过实例来体现各种操作功能,并且各个实例属性独立,互不干扰。
类名的命名规范
- 首字母大写,多个单词之间使用下划线连接,开头不能是数字,下划线开头是私有类。
类的基本语法
"""
- 类由关键字`class`、类名、参数、代码块四个部分组成。
- 关键字`class`用于定义类的函数。
"""
class Name():
代码块
- 正规的类中会定义一个函数名__init__()和参数self的函数,被称为构造函数,用于初始化类。
魔术方法(特殊的python方法)
==待完善==
模块
- Python模块是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀。模块的本质是一个Python文件。
- 模块的主要目的是为了方便管理代码和实现代码重用。
- 通过将程序分成一个个的文件,程序的结构更清晰,方便管理。
模块可以分为三类:
- 内置模块:Python自带了很多常用的模块,如random、math、datetime等等。这些模块可以帮助我们避免重复编写代码,提高开发效率。
- 第三方模块:除了内置模块外,Python的第三方模块也非常丰富,如numpy、pandas、scipy等等。这些模块提供了各种功能,可以帮助我们更高效地开发程序。
- 自定义模块:除了内置模块和第三方模块外,我们还可以自己编写模块。自定义模块可以包含变量、函数、类等,并可在程序中被引用。
包
- Python包是由一个或多个
.py文件模块组成的集合(文件夹)。 - 包是一个完成特定任务的工具箱,可以包含多个模块、函数、类等。
- 一个包必须含有一个__init__.py文件,它用于标识当前文件夹是一个包。这个文件可以是空的,但必须存在。
- 包可以嵌套,即一个包可以包含其他包。
库
- 库是指一组已经编写好的可重用代码的集合。
- 通常包含有用的功能、数据结构、算法和接口。
- 为了在帮助程序员更快速地实现特定的任务,可以让程序员不必自己重新编写所有代码。这些代码可以在不同的项目中被重复使用,从而提高开发效率和代码质量。
分支语句
==待完善==
循环语句
==待完善==
异常处理语句
- 异常处理是用于捕获和处理程序中可能出现的错误或异常情况的一种机制。
- 通过异常处理,我们可以更好地控制程序的执行流程,提高程序的健壮性和可靠性。
- 异常处理包括了
try、except、finally、raise语句。
执行一段代码
try语句用于尝试执行一段代码。- 在try语句中,我们可以编写要尝试执行的代码块,并在except语句中指定要捕获的异常类型和处理方式。如果在try语句块中出现了与except语句中指定的异常类型匹配的异常,则会执行except语句块中的代码。
try:
# 尝试执行的代码块
except ExceptionType:
# 处理异常的代码块
捕获异常代码
except语句用于捕获try语句块中出现的异常,并执行相应的处理代码。except语句可以指定多个异常类型,也可以使用多个except语句来处理不同的异常类型。
try:
# 尝试执行的代码块
except ExceptionType1:
# 处理异常类型1的代码块
except ExceptionType2:
# 处理异常类型2的代码块
释放资源代码
finally语句用于在try和except语句执行完毕后执行一段代码,无论是否发生异常都会执行。- 通常用于资源的清理和释放操作。
try:
# 尝试执行的代码块
except ExceptionType:
# 处理异常的代码块
finally:
# 无论是否发生异常都会执行的代码块
手动抛出异常
raise语句用于手动抛出一个异常。- 手动触发一个异常,并在except语句中捕获并处理它。
# ExceptionType是异常类型,args是可选的异常参数。
raise ExceptionType(args)
面向对象编程
- 面向对象编程是Python的一种重要特性,它允许你以更直观、更自然的方式组织和编写代码。
继承
- 一个类可以从其他类继承属性和方法。
- 可以创建一个更加特定的类,它继承了父类的所有属性和方法,并可以添加或覆盖它们。
封装
- 封装在面向对象开发里是最基础的一环。
- 可以把业务知识内聚在类里面,对外暴露较少知识的接口,方便调用方调用,同时也提高了代码的维护性、可读性以及扩展性。
多态
- 多态是指一个接口可以有多种实现方式。
- 多态通常通过动态类型来实现。这意味着对象的类型在运行时确定,而不是在编译时确定。
- 这为代码提供了更大的灵活性。
抽象
- 抽象是一种隐藏对象的某些细节,只展示必要信息的方法。
- 若要手动实现将一个类进行抽象化编程,抽象类需要让类继承
abc模块。 - 可以通过继承抽象基类(ABC)来实现抽象。抽象基类是一个包含抽象方法的类,这些方法没有实现。任何从抽象基类派生的非抽象类都必须实现这些抽象方法。