数据类型
数字,字符串,列表,元组,字典,集合
数字(Numbers):整型(Integer),浮点数(Float),布尔值(Boolean),复数(Complex)
字符串(String):
- 使用成对的单引号或者双引号括起来
- 使用三重引号指定一个多行字符串(文档字符串)
- 多行注释
标识符(Identifier):变量、函数、数组、文件、对象等的名字 - _xxx # 类中的保护变量名
- __xxx # 类中的私有变量名
- __xxx __ # 系统定义的标识符
常量
- 数字、字符串、布尔值、空值等
- python中没有命名常量
变量
- python变量不需要声明
- 其数据类型由所赋的值来决定
- 不同类型的数字型数据运算时,会自动的进行类型转换bool<int<float<complex
- 数据类型转换函数,用help函数查看用法
运算符:完成不同类型的常量、变量之间的运算
算术运算符;赋值运算符;连续赋值,多元赋值;逻辑运算符;比较运算符;位运算符;字符串运算符;成员运算符
x = (y = z + 1)
# 这句话错在(y=z+1)是一个整体,不能整体赋值给x
# 可以改为x=(y==z+1)
表达式:由常量变量和运算符组成
程序控制语句
- 条件分支语句:if-else语句;if-elif-else语句;if条件表达式
- 循环语句:while语句;for语句;range函数;终止循环
内置数据结构
- 内置数据结构(sequence):字符串、列表、元组
列表(list): 索引,切片,打印,获取序列的长度——len,更新列表——向列表中添加元素(append,insert),合并列表(extend,+运算符),删除列表中的元素(del),排序(sort:对列表中的元素排序;reverse:对列表中的元素倒排序)
元组(tuple): 一经定于,不允许更改
字典(Dictionary): 键值对;创建字典;打印字典、访问字典中的元素;判断字典是否存在元素——in运算符;遍历字典元素(keys():返回字典中所有的关键字;values():返回字典中所有的值;items():返回字典中所有的键值对);更新字典(添加元素、修改指定元素的取值);合并字典(update():将一个字典中的元素追加到字典中);删除字典中的元素(pop,clear,del语句);
集合(set): 可变集合(set);不可变集合(frozenset)
函数和模块
函数(function)
- 实现某种特定功能的代码块
- 程序简洁,可重复调用、封装性好、便于共享
- 系统函数和用户自定义函数
Python内置函数:
- 数学运算函数
函数 | 原型 | 具体说明 |
---|---|---|
abs() |
abs(x) |
返回x的绝对值 |
pow() |
pow(x,y) |
返回x的y次幂 |
round() |
round(x[,n]) |
返回浮点数x的四舍五入值,参数n指定保留的小数位数,默认为0 |
divmod() |
divmod(a,b) |
返回a除以b的商和余数,返回一个元组;divmod(a,b)返回(a/b,a%b) |
- 输入输出函数
- 类型转换函数
- 逻辑判断函数
- 序列操作函数
- 对象操作函数
用户自定义函数:
- 定义函数:函数名、参数和返回值
def 函数名(参数列表):
函数体
# 参数列表是形式参数/形参,在定义时并没有确定的值,只是用来说明函数的功能
- 调用函数
函数名(参数列表)
# 参数列表是实际参数/实参,实参的个数、类型应该与形参一一对应,并且要有确定的值
- 通过多元赋值语句,同时获取多个返回值
- 无形式参数时小括号不能省略
变量的作用域
- 局部变量(Local Variable):在函数中定义的变量,仅在定义它的函数内部有效;
- 全局变量(Global Variable):在函数体之外定义的变量,在定义后的代码中都有效,包括在它之后定义的函数体内;
函数的参数
参数的传递:
- 按值传递:形参和实参分别存储,相互独立
- 在内部函数改变形参的值时,实参的值不会随之改变
参数的默认值:
def 函数名(参数1=默认值,参数2=默认值...)
函数体
# 当函数中有多个默认值时,只能从右开始依次设置
向函数内部批量传递数据:
- 可以使用列表、字典变量作为参数,向函数内部批量传递数据
- 当使用列表或字典作为函数参数时,在函数内部对列表或字典的元素所做的修改,会改变实参的值。
模块、包和库
模块(Module):
- 模块是一个python文件,拥有多个功能相近的函数或类。
- 便于代码复用,提高编程效率,提高代码的可维护性。
- 避免函数名和变量名冲突
包(Package):
- 为了避免模块冲突,Python引入按目录来组织模块的方法
- 一个包对应一个文件夹,将功能相近的模块,放在同一个文件夹下
- 在作为包的文件夹下有一个
__init__.py
文件 - 子包:子目录中也有
__init__.py
文件
库(Liberay):具有相关功能的模块或包的集合
导入模块/包/库
- 导入整个包
import 名称 as 别名
- 导入包中指定的模块或子包
from 模块/包名称 import 函数名 as 函数别名
语句的作用域
- 在程序顶部导入模块,作用域是全局的
- 在函数的内部导入语句,作用域就是局部的
- 建议导入的顺序:
python 标准库/模块
python 第三方库/模块
自定义模块
使用模块/包/库中的函数和变量
模块/包/库名.函数名(参数列表)
模块/包/库名.变量名
- 创建自定义模块:将常用函数的定义放在一个.py文件中
- 调用自定义模块
- 当函数较多时,可以按照功能将它们放在不同的模块
- 一个应用程序中可以定义多个模块
Python标准库中的模块:(常见)
sys模块:提供有关Python运行环境的变量和函数
变量 | 功能 |
---|---|
sys.platform |
获取当前操作系统 |
sys.path |
获取指定模块搜索路径 |
sys.argv |
获取当前正在执行的命令行参数的参数列表 |
函数 | 功能 |
---|---|
sys.exit(n) |
退出应用程序 |
sys.getdefaultencoding() |
获取系统当前编码 |
sys.setdefaultencoding() |
设置系统默认编码 |
sys.getfilesystemencoding() |
获取文件系统使用编码方式 |
platform模块:
函数 | 功能 |
---|---|
platform.platform() |
获取操作系统名称及版本号信息 |
platform.system() |
获取操作系统类型 |
platform.version() |
获取操作系统的版本信息 |
platform.processor |
获取计算机的处理器信息 |
platform.python_build() |
获取python的版本信息,包括python的主版本、编译版本号和编译时间等信息 |
random模块:
函数 | 功能 |
---|---|
random.random() |
生成0到1的随机浮点数 |
random.uniform(a,b) |
生成一个指定范围内的随机浮点数。a是下限,b是上限 |
random.randint(a,b) |
生成一个指定范围内的随机整数。a是下限,b是上限 |
random.choice(seq) |
从序列中随机获取一个元素。参数seq表示一个有序类型,可以是一个列表、元组或者字符串 |
random.shuffle(x) |
将一个列表x中的元素打乱 |
小数和分数处理模块:
- decimal模块:表示和处理小数
- fractions模块:表示和处理分数
时间处理模块:
- time
- datetime
- calendar
python面向对象编程
- 面向对象的程序设计(Object-oriented programming,OOP)
- 面向过程的程序设计(Process-oriented programming,POP)
对象(object):将属性和方法封装在一起
类(class):具有相同的属性和方法的对象集合
- 对象是类的示例
- 字类继承了父类的全部属性和方法,并且也有自己特有的属性和方法。
- 继承也描述了类之间的层次关系
类和对象并非仅限于具体的事物,它也可以是一种抽象的概念或者规则
声明类
class 类名:
类属性=初值
方法(参数列表)
- 类属性是类中所有对象共同拥有的属性
- 它在内存中只存在一个副本
- 它可以通过类名访问,也可以被类的所有对象访问
- 在类定义之后,可以通过类名添加类属性,新增的类属性也被类和所有对象共有
类属性 | 含义 |
---|---|
__name__ |
类的名字 |
__doc__ |
类的文档字符串 |
__bases__ |
类的所有父类组成的元组 |
__dict__ |
类的属性组成的字典/。 |
__module__ |
类所属的模块 |
__class__ |
类对象的类型 |
创建对象
对象名 = 类名()
添加对象属性
可以动态地添加实例属性,添加的对象属性只属于这个实例自己;
删除对象
del 对象名
构造函数和析构函数:
- 构造函数:在创建对象时,用来完成初始化操作
__init__(self, 参数2, 参数3, ...)
- 析构函数:在清除对象时,回收和释放对象所占用的资源
__del__()
使用构造函数可以更加灵活的为成员变量赋初值;
在类的声明中,构造函数和析构函数也可以省略;
静态方法和类方法
- 类方法
class 类名:
@classmethod
def 类方法名(cls,...):
方法体
# @classsmethod 是装饰器
# 类方法使用装饰器修饰
# 第一个参数必须是当前类对象class,代表定义这个类方法的类,通过它来传递类的属性和方法
类方法可以通过类名或者对象名调用;
不能访问实例属性,但可以访问类属性。
类方法就是将类本身作为对象进行操作的方法
- 静态方法
class 类名:
@staticmethod
def 类方法名():
方法体
静态方法可以通过类名或对象名调用;
不能访问实例属性,也不能之间访问类属性,但是可以通过类名引用类属性。
公有变量和私有变量
- 公有变量:可以在类的外部访问
- 保护变量:智能允许其本身和字类进行访问
- 私有变量:不允许在类的外部访问
__xxx:私有变量
_xxx:保护变量
__xxx__:专有变量,方法
继承(inheritance)
字类能够继承父类中的所有非私有的成员变量和成员函数。
class 子类名(父类名)
类属性=初值
方法(参数列表)
文件
打开文件
文件对象 = open(文件名, 访问模式)
获取当前路径
import os
print(os.getcwd())
参数“访问模式”的可取值
访问模式 | 执行操作 |
---|---|
‘r’ | 以只读方式打开文件 |
‘w’ | 以写入方式打开文件,会覆盖已经存在的文件 |
‘a’ | 以写入方式打开文件,在末尾追加写入 |
‘+’ | 以可读写的方式打开文件 |
‘b’ | 以二进制模式打开文件 |
‘t’ | 以文本模式打开文件(默认) |
关闭文件
文件对象.close()
读取文件的内容
文件对象.read()
文件对象.readline()
向文件中写入数据
write(写入内容)
- 在写入write()函数之前,要确保open()函数的访问模式,是支持写入的
- 写入成功之后,会返回写入的字符数,是一个整数