Python笔记

作者: QinChu | 来源:发表于2020-09-20 22:17 被阅读0次

    PART 1 基本定义

    变量

    • 定义:用来储存值的元素
    • 命名时只能包括字母、数字、下划线
    • 变量对应的值以最近一次更新为主

    变量类型

    使用type(变量)函数查询类型

    - 非数字型

    1. 字符串 str

    • 一系列字符,用引号括起来,是编程语言中表示文本的数据类型

    • 用+号拼接字符串,如果有数字,需要对数字使用str()函数
      //格式化输出
      通过使用 格式化操作符% 来实现信息的整体输出
      1)% 和不同的 字符 连用构成不同类型的格式化操作符,%起一个占位的作用,常见类型如下:
      %s → 字符串
      %d → 十进制整数
      //(%06d表示表示输出的整数显示位数,不足的地方使用 0 补全)
      //(%16d表示d左边会有空白,数字表示长度,但好像不是16个空格)
      //(%-6d 是左对齐,这个测试出来也看不出来?)
      %f → 浮点数,%.2f 表示小数点后只显示两位
      %% → 输出 %
      注意:如果不知道使用什么占位符接收变量,可以都用 %s

      2)语法:
      print("XX格式化字符串XX" % 变量1)
      print("XX格式化字符串XX" % (变量1, 变量2...))

    • 字符串的格式修改:
      1)修改大小写
      变量.title() → 首字母大写
      变量.upper() → 全部大写
      变量.lower() → 全部小写
      2)增加空白行
      ‘\t字符串' →缩进(制表符)
      '\n字符串' → 换行
      那条杠别搞反了,而且是在字符串内部使用

      1. 删除空白
        变量.strip() → 删除两端空白
        变量.rstip() → 删除尾部/右边空白
        变量.lstrip() → 删除头部/左边空白
    • 字符串的判断
      1)字符串.isalpha():如果 string 至少有一个字符并且所有字符都是字母则返回 True
      2)字符串.isdecimal():如果 string 只包含数字则返回 True
      3)字符串.string.islower():如果 string 至少有一个字符并且所有字符都是小写字母则返回 True
      4)字符串.isupper():如果 string 至少有一个字符并且所有字符都是大写字母则返回 True
      5)字符串.startswith(str):检查字符串是否是以 str 开头,是则返回 True
      6)字符串.endswith(str):检查字符串是否是以 str 结束,是则返回 True

    • 字符串的查找和替换
      1)字符串.find(str, x, y):检查str是否包含在字符串[x,y)范围内,如果是返回出现的的第一索引值,否则返回-1,其中x,y表示索引值,y<=len(字符串)
      2)字符串.rfind(str, x,y):类似于 find(),不过是从右边开始查找
      3)字符串.index(str, x, y):跟 find() 方法类似,不过如果 str 不在 string 会报错
      4)字符串.rindex(str, x, y):类似于 index(),不过是从右边开始
      5)字符串.replace(old_str, new_str, num):把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次,num<=字符串.count(old_str)

    • 字符串的拆分和连接
      1)字符串.partition(str,num):返回元组,把字符串 string 分成3个元素的元组 (str前面, str, str后面)
      2)字符串.rpartition(str):类似于 partition() 方法,不过是从右边开始查找
      3)字符串.split(str, num):返回列表,以 str 为分隔符拆分 string,如果str为空,则以空格为分隔符拆分·
      · 如果 num 有指定值,则仅分隔 num + 1 个子字符串
      · num不写默认为str重复出现的次数
      · str 默认包含 '\r', '\t', '\n' 和空格
      · 如果连续两个str,则显示元素 ‘’

    a='1233436'
    b = a.split('3')
    print(b)
    
    b = a.split('3',1)
    print(b)
    
    b = a.split('3',2)
    print(b)
    
    输出:
    ['12', '', '4', '6']
    ['12', '3436']
    ['12', '', '436']
    

    4)字符串.splitlines():返回列表,按照行('\r', '\n', '\r\n')分隔
    5)字符串1+字符串2:拼接两个字符串
    6)字符串.join(seq):返回字符串,以 字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

    a='1233436'
    b = a.join('abc')
    print(b)
    
    b = a.join('ab')
    print(b)
    
    #输出:
    a1233436b1233436c
    a1233436b
    
    • 字符串的文本对齐
      1)字符串.ljust(width):返回新字符串,基于原字符串左对齐,并使用空格填充至长度 width
    a = 'hello'
    b = 'he'
    print(a.ljust(10)+'x'+'\n'+b.ljust(10)+'y')
    
    #输出:
    hello     x
    he        y
    
    

    2)字符串.rjust(width):返回新字符串,基于原字符串右对齐,并使用空格填充至长度 width
    3)字符串.center(width) :返回新字符串,基于原字符串居中,并使用空格填充至长度 width

    - 数字型

    1. 整数 int、浮点数 float
    • 算数运算符:+ 、 - 、*、/、
      **(乘方)
      // (返回除法的整数部分(商) 9 // 2 输出结果 4)
      %(返回除法的余数 9 % 2 = 1)
      *还可以作用于字符串,表示重复实现次数
    1. 布尔 bool
    • 真 True 数学运算时表示 1
    • 假 False 数学运算时表示 0

    列表

    由一系列按照特定顺序排列的元素组成,用 [ ] 来表示,并用 , 来分隔其中的元素。
    //索引,元素在列表的位置,从0开始,-1表示倒数第一个

    1. 操作
    · 查询
    1)根据位置查询元素:变量 = 列表名[索引]
    2)根据元素查询位置:列表名.index(值)
    如果查询元素有多个相同值只会返回第一个值出现的记录
    3)查询值出现的次数:列表名.count(值)

    · 修改元素
    列表名[索引] = 新值

    · 增加元素
    1)在末尾增加元素: 列表名.append(值)
    2)在列表中插入元素:列表名.insert(索引,值)
    3)在列表中插入另一个表的元素:列表1.exten(列表2)

    · 删除元素
    1)del 列表名[索引]
    2)列表名.pop(索引),若不写索引,则默认从末尾删除
    可用变量来接收被删的元素,变量 = 列表名.pop(X)
    3)列表名.remove(值),只删除出现的第一个值,如有多个,结合while循环语句
    4)清空列表:列表.clear

    · 列表永久排序:列表名.sort(),默认按照字母顺序,若指定相反顺序,可使用列表名.sort(reverse=Ture)
    · 列表非永久排序:sorted(列表名),若指定相反顺序,sorted(列表名,reverse=True)
    · 倒着输出:列表名.reverse()
    · 确定列表长度:len(列表名)

    2.切片
    列表的部分元素称之为切片,切片 = 列表[X:Y:步长],// X、Y为索引位置,左闭右开,步长不写默认为1
    · 没有指定X,默认从头开始;没有指定Y,默认到尾结束。列表[ : ] 表示整个列表,故复制表 = 原表[ : ]
    · 负数索引返回离列表相应距离的元素,-1表示倒数第一个
    · 列表[::-1] 表示逆序输出
    · 支持字符串、列表、元组

    元组 tuple

    不能修改的列表,用()括起来
    · 元组只具有查询功能,操作同列表
    · 元组不可修改,但元组内的元素是列表、字典,则可通过修改列表、字典来实现修改元组
    · 元组中 只包含一个元素 时,需要 在元素后面添加逗号,不加就不是元组了
    元组名 = (a,)
    · 组包,赋值的右侧有多个数据时,会自动组包成元组,如果赋值的左侧接收的变量和右侧的变量的个数一致,就会自动解包,一一对应赋值

    (a,b)=(x,y)
    c = (x,y)
    print (a)
    print (b)
    print (c)
    
    //输出:
    x
    y
    (x,y)
    

    · 元组和列表之间的转换
    1)元组 → 列表:list(元组)
    2)列表 → 元组:tuple(列表)

    字典

    储存多对元素,是一系列键-值对,键和值之间用冒号隔开,而键-值对之间用逗号分隔,整体用{}括起来

    1.操作
    · 查询
    字典[键],如果不存在会报错
    字典.get(key,默认值),如果不存在,返回None 默认值

    · 添加
    字典[新键] = 新值
    字典.setdefault(key,value):如果key存在,不修改,如果key不存在,新增
    字典1.update(字典2):将字典2的数据合并到字典1 ,如果键值对存在就修改,不存在就增加

    · 修改
    字典[键] = 新值

    · 删除
    del 字典[键]
    字典.pop(key),key不存在会报错
    字典.popitem(),随机删除一个键值对
    字典.clear(),清空

    · 遍历
    1)遍历键-值对

    for X,Y in 字典.items():
          执行语句
    

    2)遍历键

    for X in 字典.keys():
          执行语句
    

    · keys()返回的其实是一个列表
    · 按顺序遍历字典中的所有键

    for X in 字典.sorted(keys()):
          执行语句
    

    2.嵌套

    3)遍历值

    for X in 字典.values():
          执行语句
    

    PART 2 函数

    - 内置函数

    1.print()
    · 在默认情况下,print 函数输出内容之后,会自动在内容末尾增加换行
    · 如果不希望末尾增加换行,可以在 print 函数输出内容的后面增加 , end=""
    · 其中 "" 中间可以指定 print 函数输出内容之后,继续希望显示的内容

    2.input() 输入函数

    • 获取用户输入的函数,并将信息转化成字符串类型,如果输入数字,需使用类型转换函数进行转换
    • 类型转换函数:
      1)int(X) → 将X转换成一个整数 //不能转换浮点数形式的字符串
      2)float(X) → 将X转换成一个浮点数

    3.range()
    生产范围内的系列数字
    · range(X,Y,步长),左闭右开 X <= <Y;步长不写,默认为1
    · 与list()函数嵌套使用可生成数字列表:list(range(X,步长,Y))
    · 与for循环一起使用,可生成表达式列表

    列表名 = []
    for a in range(X,Y):
            b = 针对a的表达式
            列表名.append(b)
    print(列表名)
    

    // 列表解析/列表推导式
    ·基本for循环操作

    列表名 = [ 表达式 for a in range(X,Y)]
    

    · 在循环的过程中使用if

    列表名 = [ 表达式 for a in range(X,Y) if a的判断式]
    

    · 两个for

    列表名 = [ (a的表达式,b的表达式) for a in range(X1,Y1)  b in range(X2,Y2) ]
    

    - 自定义函数

    函数是带名字的代码块,用于完成具体的工作,主要是为了在开发程序时,使用函数可以提高编写的效率以及代码的重用

    • 语法
    def 函数名(
            形参1,形参2,形参2,
            形参3,形参4):
        ```注释定义函数```
          执行语句
    
    #调用定义函数
    函数名()
    

    // 编写指南
    1)应给函数指定性描述名称,且只在其中使用小写字母和下划线
    2)每个函数都应该包含其功能注释,并紧跟在函数定义后面,用文档字符串格式
    3)如果形参很多,可在函数定义中输入左括号后按回车键,并在下一行按两次Tab键,从而将形参列表和只缩进一层的函数体区分开

    • 形参与实参
      · 形参,定义函数的变量,是给真实数据占位用的;实参,调用函数的变量,是传递到 函数内部 的 真实数据;形参、实参一一对应
      // def 函数名(形参):
      // 函数名(实参)

    · 实参类型
    1)位置实参:实参根据形参的顺序一一输入
    2)关键词实参:传递给函数的形参名字-值对,无需考虑定义函数里的形参顺序

    3)默认值:在定义函数中,给予形参默认值,如果调用函数时,没有指定对应实参,则使用默认值;默认值只能存在于形参列表末尾
    def 函数名(形参1,形参2=默认值):
    // 调用函数
    函数名(实参1) 表示 形参1=实参1,形参2=默认值
    函数名(实参1,实参2)表示 形参1=实参1,形参2=实参2
    调用函数时,未指定默认值的形参,可以采用位置实参、关键词实参调用

    4)传递任意数量的实参
    def 函数名(形参1,*形参2) // *形参需放在形参列表末尾,类似创建了一个空元组形参2 = [ 形参2-1,形参2-2 ]
    // 调用函数
    函数名(实参1,实参2-1,实参2-2)

    5)传递任意数量的关键词实参
    def 函数名(形参1,**形参2) // **形参类似创建了一个空字典(形参2 = { '形参2-1' : 待指定,'形参2-2' : '待指定' }
    // 调用函数
    函数名(实参1,形参2-1=实参2-1,形参2-2=实参2-2)

    • 局部变量和全局变量
      · 局部变量,函数内部定义的变量,目的是临时保存数据,仅影响函数内部
      · 全局变量,函数外边定义的变量,能在所有函数里进行访问
      · 函数内修改全局变量,使用global进行声明
    a =1
    print(a)
    
    def f():
        global a
        a=2
        print(a)
    
    f()
    print(a)
    
    #输出:
    1
    2
    2
    
    
    • 函数除了可返回print输出外,还可通过return返回值
    def 函数名():
          执行代码
          变量名 = 返回值表达式
          return 变量名
    
    #调用函数
    接收值的变量 = 函数名()
    print(接收值的变量)
    

    · 当return后没跟值/变量名时,调用函数后,接收值的变量输出为 None

    · return 表示返回,后续的代码都不会被执行

    · 一个函数中可以有多个return语句,但是只要有一个return语句被执行,那么这个函数就会结束

    · return 可返回多个值,当返回多个数据时,python会自动将数据 组包 成元组;如果使用多个变量接收返回值,python会自动将元组 拆包 成单个数据

    def f():
          return 1,2,3
    
    a = f()
    print(a)
    
    (a,b,c) = f()
    print(a)
    print(b)
    print(c)
    
    #输出:
    (1, 2, 3)
    1
    2
    3
    
    
    • 匿名函数:省略了用def声明函数的标准步骤的函数定义
      语法:
      1)采用函数名来接受函数定义
      // 定义函数
      函数名 = lambda 参数1,参数2 :表达式
      // 调用函数
      函数名(实参1,实参2)
      2)函数定义后直接调用,无函数名
      (lambda 参数1,参数2 :表达式)(实参1,实参2)

    用处:
    作为函数的参数
    // 示例:通过关键词的字典列表里的排序

    stus = [
        {"name": "zhangsan", "age": 18}, 
        {"name": "lisi", "age": 19}, 
        {"name": "wangwu", "age": 17}
    ]
    stus.sort(key = lambda x: x['name'])
    print(stus)
    
    #输出:
    [{'age': 19, 'name': 'lisi'}, {'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}]
    

    // 示例:自己定义函数

    def fun(a, b, opt):
         print("a = %s" % a)
         print("b = %s" % b)
         print("result =%s" % opt(a, b)
    
    # 调用函数
    fun(1, 2, lambda x,y:x+y)
    
    #输出:
    a = 1 
    b = 2 
    result = 3
    

    - 模块

    储存函数等的文件,通过import导入到主程序

    • 语法
      1)import 模块名 as 模块别名👉 导入整个模块,如果要使用模块里的函数,则需要限定模块名,如 模块名.函数名() 或者 模块别名.函数名()
      2)from 模块名 import 函数名 as 函数别名 👉 导入模块中的指定函数,使用时无需限定模块名,直接使用函数名/函数别名,如 函数名() 或者 函数别名()
      3)from 模块名 import * 👉 导入模块里所有函数,使用时无需限定模块名
      // 并不建议采用,因为可能会跟主程序里其它函数名重复

    PART 3 Python 语句

    for 循环 语句

    遍历列表中的元素,并执行相同代码
    · 语法

    for 变量 in 列表:
          执行语句
    

    1)for 变量 in 列表后要加冒号,下一行要缩进,所有循环执行语句都需要缩进

    if 语句

    进行条件判断的语句,每条if语句的核心都是一个值为 Ture 或 False 的表达式,Python根据值来决定是否执行相应代码

    • 常见检查条件
      1)是否相等 ==
      2)不考虑大小写时的是否相等 通过大小写转换函数来比较
      3)是否不相等 !=
      4)比较数字
      5)比较多个条件:and、or
      6)是否包含在特定列表中:in
      7)是否不包含在特定列表中:not in

    • 语法
      1)if/else/elif + 判断式 后跟冒号,下一行要缩进
      2)else 表示不满足上面条件时,需要执行的代码,但一般会省略,因为包罗万象,可能会产生很多恶意数据
      3)elif 在不止两个条件时使用,可使用多个elif,通常if、elif后的条件都互斥
      4)if后直接接列表名:,则表示,如果列表不为空,判断为Ture,为空,判断为False
      5)if将数字型数据直接作为判断条件时,非0数即为True, 0为False

    1. 布尔表达式,定义布尔型变量,然后直接跟在if后加冒号判断
    test = True
    if test:
      执行语句
    

    while 语句

    满足特定条件时,不断循环指定代码,直至条件不被满足时
    · 语法

    赋值变量
    while 判断式:
            执行代码
    

    1)while + 判断式 后跟冒号,下一行要缩进
    2)判断式里的变量要先赋值,如果没有,可为空字符串‘’,这样才便于第一次循环开启
    3)当无明确判断式时,可建立标志,用于判断程序是否进行

    标志名 = Ture
    while 标志名:
          执行代码
          if 判断式:
                  标志名 = False
          else:
                  执行代码
    

    4)while + break,在while循环里,满足某个条件就跳出循环,结束
    5)while + Ture,可直接运行,但要确保退出机制,比如增加 break
    6)while + continue,在while循环里,满足某个条件就忽略余下代码,并返回到循坏开头
    需要注意:使用 continue 时,条件处理部分的代码,需要特别注意,不小心会出现 死循环

    7)避免无线循环,当while判断式是基于变量时,执行代码后需要重新赋值该变量
    // 赋值运算符:+= → a += b 等于 a = a+b;-= 、=、/=、//=、%=、*=同理

    · 作用 p110
    1)在列表之间移动元素
    2)删除包含特定值的所有列表元素
    3)使用用户输入来填充字典

    PART 4 文件与异常

    - 文件

    • 文件的打开与关闭
      1)语法1:
    变量 = open(文件名,访问模式)
    执行语句
    变量.close()
    

    · open 和 close 必须同时出现,最好写完open就写close
    · 缺陷,如果程序存在bug,导致close()语句未执行,文件将不会关闭,可能会导致错误

    2)语法2:

    with open(文件名,访问模式) as 变量名:
        执行语句
    

    · 无需写close语句,让python负责妥善地打开和关闭文件

    • 文件访问模式
      ~ r 👉 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
      ~ w 👉 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
      ~ a 👉 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
      ~ r+ 👉 打开一个文件用于读写。文件指针将会放在文件的开头
      ~ w+ 👉 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
      ~ a+ 👉 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
      ~ rb 👉 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式
      ~ wb 👉 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
      ~ ab 👉 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
      ~ rb+ 👉 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头
      ~ wb+ 👉 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
      ~ ab+ 👉 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写

    • 文件的写入 'w'

    with open(文件名,'w') as 变量名:
        变量名.write('字符串1\n')
        变量名.write('字符串2\n')
    
    # 文件打开出现:
    字符串1
    字符串2
    

    · write()语句后要加冒号,下一行要缩进
    · write()不会在写入的文本末尾添加换行符,所以需要手动增加 \n

    • 附加到文件 'a'
    with open(文件名,'a') as 变量名:
        变量名.write('字符串1\n')
    
    # 文件打开出现:
    这里是文件原内容
    字符串1
    
    • 文件的读取 'r'
    1. 整个读取
    with open(文件名,'r') as 变量名:
        变量名2 = 变量名.read()
        print(变量名2)
    

    · read(num),num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据
    · 如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的

    # test.txt 内容为 'hello world, i am here!'
    
    with open(test.txt) as t:
            a = t.read(5)
            print(a)
    
            b = t.read()
            print(b)
    
    # 输出:
    hello
     world, i am here!
    

    2)逐行读取

    with open(文件名,'r') as 变量名:
        for line in 变量名:
        print(line)
    

    3)readlines()按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素

    with open(文件名,'r') as 变量名:
            a = 变量名.readlines()
        
    for line in a:
        print(line)
    

    4)readline()每次只阅读一行,如果多次使用,那么后面读取的数据是从上次读完后的位置开始的

    • 文件的定位读写
      1)获取当前读写的位置:文件名/变量名.tell()

    2)定位到某个位置:文件名/变量名.seek(偏移量,方向),
    · 0:表示文件开头
    ·1:表示当前位置
    ·2:表示文件末尾
    // 只有方向为0时,才设置偏移量

    • 文件和文件夹的操作
      导入os模块可进行重命名、删除等一些操作
      import os
      1)重命名
    import os
    os.rname('原文件名','新文件名')
    

    2)删除

    import os
    os.remove('文件名')
    

    3)创建文件夹

    import os
    os.mkdir('文件夹名')
    

    4)获取当前目录

    import os
    os.getcwd()
    

    5)改变默认目录

    import os
    os.chdir("test")  # 跳转到当前路径的test子目录中
    

    6)获取目录列表

    import os
    os.listdir()
    

    7)删除文件夹

    import os
    os.rmdir("张三")
    

    · 目录非空不能使用,可以使用递归的方式进行删除

    相关文章

      网友评论

        本文标题:Python笔记

        本文链接:https://www.haomeiwen.com/subject/mrjryktx.html