Python
- 区分大小写
- 均采用unicode编码
- python中采用严格的缩进格式,而不是用{}
1基础语法
1.1标识符&关键字
- 标识符命名规则:
- 开头:_/字母
- 组成:_/字母/数字
- 关键字:31个
1.2变量&常量
- 变量
- 动态类型语言,不会检查数据类型,变量声明时不需要指定数据类型
- 形参也是变量
- 常量
- 很多情况下代码安全需要程序员自查,python不能从语法层面定义常量,没有关键字
- 原定俗成用全大写
- 局部变量和全局变量的作用域
- 使用global关键字对变量进行修饰后,变量就会变成全局变量
- 在使用 global 关键字修饰变量名时,不能直接给变量赋初值,否则会引发语法错误
- 如果全局变量是列表、字典或者函数类型,可以通过list、dict或函数调用的方法去对列表和字典进行修改,对函数进行调用,并且可以不用global来声明
1.3数据类型
- python有6种标准数据类型,没有基本数据类型的概念,所有数据类型都是类
- 数字类型的占用空间取决于机器
1.3.1数字
-
整数:int
- python3都是长整数
- 0b二进制/0o八进制/0x十六进制
-
浮点数:float
- 只支持双精度浮点数
-
复数:complex
-
1+2j # 表示实部为1,虚部为2
-
-
布尔类型:bool
- bool是int的子类,只有True和False
任何数据都能转换为bool类型
bool():
True:1,[1],{1:1}
False:0,None,False,0.0,0j,[],(),{}
1.3.2字符串
-
特点:
- 有序,索引从0开始
- 用单引号/双引号/三引号括起
- 不可改
-
转义符:字符串包含的一些特殊字符,如:换行符、制表符在普通字符串中需要转义,在前面加反斜杠“\”,称为转义字符
-
字符 说明 \t 水平制表符 \n 换行符 \r 回车 \' 单引号 \" 双引号 \\ 反斜杠
-
-
原始字符串raw string:在普通字符串前面加r,表示字符串中特殊字符不需要转义
-
切片[start🔚step]:左闭右开
-
操作:
-
查
查: 1、查索引:index() 2、查内容:strname[index] 3、遍历
-
+和*:+可以连接两个列表,*可以将序列重复多次,
- 产生新列表,不属于增
-
-
字符串常用方法
- split(str="", num=stringcount(str)):切片
- str:分隔符;num:分割次数(num有值,则分割成num+1个子字符串)
- replace(old, new):替换
- 创建一个新字符串,所以不属于改
- strip(chars):移除字符串首尾指定字符序列
- 创建新字符串,不属于改
- split(str="", num=stringcount(str)):切片
1.3.3列表list
-
特点:
- 和array不一样,array要求数据类型一致
- 实际工作一般存储相同类型数据
- 有序,可增删改查
-
正索引&负索引:0?&-1?
-
切片[start🔚step]:左闭右开
-
操作:/方法
-
增、删、改、查
增: 1、末尾添加元素:append() 2、末尾添加至少一个元素:extend() 3、指定索引添加元素:insert(index,value) 删: 1、指定内容删除元素,一次删除一个,优先删除第一个:remove() 2、指定索引删除元素,默认最后一个:pop() 3、清空列表:clear() 4、删除列表:del listname 改: 1、listname[index] = value 查: 1、查索引:index() 2、查内容:listname[index] 3、遍历
-
+和*:产生新列表
-
排序、统计等
统计: 列表长度:len() 列表数据出现次数:count() 排序: 升序:sort() 降序:sort(reverse=True) 产生新列表:sorted()
-
1.3.4元组tuple
-
特点:
- 有序
- 不可改
- 实际工作一般存储不同数据类型,所以遍历不常用
注意:var=(a,),只包含一个元素“,”不可省,因为元组与“,”联系而不是小括号,小括号可省,python解释器无视小括号
-
切片
-
操作:
-
查
查: 1、查索引:index() 2、查内容:listname[index] 3、遍历
-
+和*:产生新元组,不属于增
-
统计
统计: 元组长度:len() 元组数据出现次数:count()
-
1.3.5字典dict(hash表)
-
特点:
- 无序,键值对
- 可增删改查
-
操作:
-
增,删,改,查
增: 1、dictname[key] = value 2、合并字典/增加至少一个元素,相同key会覆盖原有value:update() 删: 1、指定key删除元素:pop() 2、清空列表:clear() 改: 1、dictname[key] = value 查: 1、查内容:dictname[key] 2、遍历 3、查键值对:items 4、查键:keys 5、查值:values
-
统计
统计: 字典长度:len()
-
1.3.6集合set/frozenset
-
set:可变集合
-
特点:
- 无序
- 可增、删、不可改
- 定义:{}
-
操作:
-
增、删、查
增: 1、增加一个元素:add() 2、增加至少一个元素:update() 删: 1、元素不存在,抛出错误:remove() 2、元素存在,不抛出错误:discard() 3、删除任意元素,返回删除的元素:pop() 4、清楚集合:clear() 查: 1、遍历
-
-
frozenset:不可变集合
-
特点:
- 不可增,删,改,可遍历
- 定义:{}
1.3.7数据类型的转换
- 数字相互转化隐式转换:在数学计算时转换
操作数1类型 | 操作数2类型 | 转换后的类型 |
---|---|---|
布尔 | 整数 | 整数 |
布尔/整数 | 浮点 | 浮点 |
- 显示转换
类型 | 转换函数 |
---|---|
int | int()(可以指定进制数) |
float | float() |
bool | bool() |
str | str() |
- 列表字符串的转换
类型 | 转换函数 |
---|---|
列表→字符串 | 'char'.join(var_name) |
字符串→列表 | var_name.split('char') |
字符串→列表 | list() |
1.4运算符
-
算数运算符
-
幂:** 取余:% 地板除:// # a//b求比a除b的商小的最大整数 除:/ # int/int执行地板除,float/float执行精确除法
-
-
逻辑运算符
-
not and or
-
-
关系运算符
-
== != < > >= <= <>
-
-
位运算符
-
位反:~ 位与:& 位或:| 位异或:^ 左移:<< 低位补0 右移:>> 高位补符号位
-
-
赋值运算符
-
+=:加赋值 *=:幂赋值 ...
-
-
其他运算符
-
同一性运算符:用于判断是否为同一对象
-
is 和 is not,id比较 ==:判断两个对象是否相等,value比较
-
-
成员测试运算符:
-
in 和 not in
-
-
-
运算符的优先级:
- 从高到低:算数运算符、位运算符、关系运算符、逻辑运算符、赋值运算符
1.5注释
# 单行注释
"""
多行注释
"""
1.6控制语句
-
程序设计中,控制语句有三种,条件,循环和跳转;程序三大流程:顺序、循环、分支
-
条件
- if...elif....else
- 没有三元运算符,而采用条件表达式:表达式1 if 条件 else 表达式2
-
循环
-
while :...[else:...]
-
四步:1、初始化变量2、条件判断3、条件执行体4、改变变量
-
-
for...in...:...[else:...]只用于序列的遍历(字符串、列表、元组、字典等)
-
else:不同于if中的,在循环体正常结束才运行的代码,break和continue都不执行
-
-
跳转:
- break:跳出循环体
- continue:结束本次循环
- return:可返回多个结果,类型为元组
注意:二重循环中的break和continue用于控制本层循环结构
1.7模块
-
模块:一个py文件
-
搜索路径:
- 当前目录
- 系统目录
- _file_:内置函数,用于查看模块完整路径
-
导入模块:
-
所有无缩进的代码都会执行一遍
-
# 解决方案 def main(): # 测试代码 pass if __name__ == "__main__": main()
-
-
1.8包
-
为了解决两个模块重名的问题,提出了包
-
包可以有多层次
-
每个包内需要有一个__init__.py文件 com # 包com pkg1 # com.pkg1包 __init__.py hello.py pkg2 # com.pkg2包 __init__.py hello.py __init__.py
-
1.9函数&闭包&装饰器
-
定义:
def functionname: pass return
-
参数:
- 形参:每个形参的名称均可作为过程内的局部变量。形参名称的使用方法与其他任何变量的使用方法相同
- 缺省参数:
- 设置默认值
- 注意:不是最后一个参数或者有多个缺省参数时,其后的参数要用标识符参数形式传递
- 可变参数:*或者**
- *args可变参数在函数中被组装成一个元组
- **kwargs可变参数在函数中被组装成一个字典
- 注意:可变参数不是最后一个参数时,其后的参数要用标识符参数形式传递
- 拆包:在调用函数时,希望将一个元组变量直接传递给args,在元组前面加*;同理,在字典变量前加**
-
返回值:
- 单返回值
- 无返回值
- 多返回值:
- 被组装成元组
-
函数可嵌套
-
常用内置函数:
range():生成一个整数序列,优点,只需要存储start,stop,step,所有range对象占用的内存空间一样。 format():格式化
-
装饰器:一种设计模式,在不修改函数代码的情况下,为函数增加一些新功能。本质上是一个函数
- 返回值也是一个函数
-
闭包:定义在函数内部的函数,闭包可以访问父函数的局部变量,但是不能修改,父函数返回一个函数。
1.10面向对象
-
对象三要素:id(地址)、type、value
-
面向对象思想基本特征:
-
封装性:
- python没有严格意义的封装,所谓私有的限制,在外部写:“_classname__attributename”同样可以访问
- 私有变量:
- 类变量或者实例变量在外部可以被访问
- 在变量前加“__”可定义为私有变量
- 私有方法:
- 同私有变量
-
继承性:父类的方法和变量可以完全被子类继承,可以重写覆盖,多态的前提
-
super()
# super()会使子类从父继承所有方法和属性,不必再使用父元素的名称 class Student(Person): def __init__(self,fname,lname): super().__init__(fname,lname) def test(self): super().Person_test()
-
python支持多继承
-
-
多态性:父类成员被子类继承后可以有不同的状态或表现行为(同一个接口,使用不同的实例而执行不同操作),对python意义不大
- 前提:继承,重写
-
-
类和对象
-
python一切皆对象
-
定义:
# 类定义 class object(su_object): # 类变量,就是公有变量 attribute1 = 0.001 # 实例变量定义 def __init__(self,attr1): self.attribute = attr1 # 实例方法定义 def function(self): pass pass #######静态方法######### # 静态方法值能在类中被调用,不与类绑定,不指定self @ staticmethod def function(arg): pass #######类方法########## # 类方法 @ classmethod def function(cls, arg): pass
-
-
类成员:
- 属性:本质上是两个方法,加上装饰器使方法成为属性,使用起来类似于公有变量
- 实例变量:即实例个体特有的数据
- 类变量:所有实例共有的变量,即全局变量
- 实例方法:实例特有的方法,第一个参数是self
- 类方法:与类绑定,而不是与实例绑定;第一个参数不是self,而是cls(是type类型的一个实例),要加上装饰器@classmethod;可以访问类变量和其他类方法,不能访问实例方法和实例变量
- 静态方法:不与类和实例绑定,系统会为静态方法分配一个固定的内存空间,可以直接使用类名调用,不需要实例化对象,因为他有固定空间,随类的加载而加载。
- 不同于js,js的静态方法不能再实例上调用
-
根类——object:
-
所有类直接或者间接得继承自object类,有许多常用方法:
-
# 定义类的返回值,默认的是返回地址 __str__(self): return 'string' # 定义类的初始值 __init__(self,att1,att2): self.attribute1 = att1 self.attribute2 = att2 # 对象比较方法 ==,内部使用的是__eq__()方法 __eq__():
-
1.11异常
- 代码不会中断
try:
content
except[errortype1]:
content
except[errortype2] as e:
print(e)
else:
print('打开文件成功')
finally:
# 释放资源
file.close()
异常传递
1.12常用模块
-
可查看python官方API文档
-
math:整数和浮点数;cmath:复数
- 指数,对数,平方根和三角函数等
-
random:生成随机数,常用方法:
- random.random():0.0~1.0随机浮点数
- random.randrange(start,stop,step):start~stop,左闭右开,指定step的随机整数
- random.randint(a,b):a~b的随机整数,左闭右闭
-
datetime:常用类:
- datetime:日期+时间
- today()
- date:日期
- time:时间
- datetime:日期+时间
-
re
-
os:文件和目录管理
-
os.rename(src,dst)
-
os.remove(path)
-
os.mkdir(path)
-
os.path.abspath(path):返回path的绝对路径
print(os.path.abspath("1.py"))
-
1.13其他
-
更改编码方式:
在文件最上方写: # coding = gbk,默认utf-8
2Python文件操作
2.1打开、读写、关闭
-
打开:file = open(path, mode = 'r', encoding='utf-8')
- 'r':只读
- 'w':只写
- 'a':追加
- 'b':二进制模式
- '+':读/写
-
读写:
- file.write(‘content’)
- file.read()
-
关闭:file.close()
3格式化
-
print()函数使用%开头的转换符对各种类型数据进行格式化输出
转换符 描述 %10d 十进制整数,最小宽度为10 %-o 八进制整数,左对齐 %+x 十六进制帧数,右对齐 %-010e 科学记数法小数,左对齐,不足补0 %8.3f 浮点数小数,最小宽度8,三位小数 -
format():用{}和:代替%
{}.format(number/char)
格式 描述 浮点数小数,两位小数 十进制帧数,宽度为2,左补0 十进制,宽度为10,中间对齐