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):移除字符串首尾指定字符序列
      • 创建新字符串,不属于改

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文件

  • 搜索路径:

    1. 当前目录
    2. 系统目录
    3. _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
      
  • 类成员:

    • image-20221102233733011
    • 属性:本质上是两个方法,加上装饰器使方法成为属性,使用起来类似于公有变量
    • 实例变量:即实例个体特有的数据
    • 类变量:所有实例共有的变量,即全局变量
    • 实例方法:实例特有的方法,第一个参数是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:时间
  • 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,中间对齐