python基础|青训营笔记

54 阅读19分钟

Python-语言基础入门

  1. 常用类型 :

    1. number

      1. 整数 int
      2. 浮点数 float
      3. 布尔 bool
      4. 负数 complex:比如4+3j,j表示复数
    2. String

    3. List

    4. Tuple

    5. Set

    6. Dictionary

  2. 注释的分类

    1. 单行注释是 #
    2. 多行注释是 """ 多行注释是三个双引号 """ ,主要是对于文件和类进行注释,支持换行
  3. 和其他语言不同,python的使用十分的简单,不用在声明变量了,只需要直接将变量名等于变量值。image-20230508104609215

  4. Python中的数据类型

    1. 应用type() ,JS是应用typeof;可以直接image-20230508105526332
  5. 数据类型转化

    1. 常见的数据转化语句

      1. int(x) : 转化为int
      2. float(x):转化为float
      3. str(x):转换为string
    2. 万物都可以转换字符串,但是字符串中只有是数字的时候才能转化为数字;浮点数可以转化为数字,但是转化后会丢失精度。

      注意的是,PY中转化之后不会改变原来变量的数据类型,只有当转化语句出现的时候才进行了转化

      image-20230508110847986

      1. 标识符

        1. 用户在编程时候使用的一系列名字,比如变量、类、方法之类

        2. 限制:

          1. 内容限定:只能是中英文、下划线(_)和数字:数字不可以用作开头
          2. 大小写敏感:字母的大小写是完全区分的
          3. 不可以使用关键字,比如class
        3. 命名法:

          1. 下划线命名法:first_name
          2. 全部小写
      2. 运算符

        1. 算数运算符:+-*/(加减乘除),需要注意的是 //是取整数(例如9//2 最终是4)、 %是取余(10%2 结果是0)、是指数(10**2 是10的2次方)
        2. 赋值运算符 : 就是变量 = 变量值,还有+=、-=
        3. 比较运算符 : ><= <= >= != ==(和js不同)
      3. 字符串拓展

        1. 定义方式:

          1. 单引号
          2. 双引号
          3. 三引号: name = """三引号字符串""" ,如果前面有变量就是字符串、没有变量就是注释;换行也可以
          4. 以上主要是解决字符串的嵌套 “''”
        2. 引号的嵌套:可以使用:\来进行转义,也就是加上\之后引号没有了作用,相当于一个普通字符串image-20230508113339029

        3. 字符串的拼接:

          1. 用于字面量和字符串之间的拼接,就是不用原来的逗号了
          2. 在拼接的时候只能用于字符串拼接,不能把数字和字符串进行拼接
        4. 字符串格式化:

          1. 主要是解决上述问题,解决字符串和其他类型的拼接

          2. 用%进行占位,多个变量有几个就有几个%百分号,而且能够把数字转化为字符串进行拼接image-20230508114248719

          3. 注意一下多个变量占位,多个变量需要有多个%,并且最后要把变量括号括起来,中间用逗号隔开,而且要按照顺序书写。

          4. 数据类型占位

            1. %s : 把内容转化为字符串,放入占入位置
            2. %f : 把内容转化为浮点型,放入占入位置
            3. %d : 把内容转化为数字型,放入占入位置image-20230508114944112
        5. 格式化的精度控制

          1. 数字精度控制:使用辅助符号m.n来控制数据的宽度和精确度

            1. m,控制宽度,要求是数字,设计的宽度小于数字本身

            2. .n控制小数点精度,要求是数字,会进行小数的四舍五入

              1. 例如 %5d,表示将证书宽度控制在5位,设置成5d,变成空格空格空格11,用三个空格补齐
              2. %5.2f就是将整数部分宽度为5,小数部分精度设置为2,
              3. 也可以设置%.2f,只是控制小数image-20230508120017760
          2. 快速写法,通过%的好处就是能够进行占位了,还能进行精度控制,但是还有一种更快捷的写法,就是直接在字符串模板中加入{变量名}写法,前面要加f。但是不关心精度控制image-20230508120709317

          3. 表达式语句:一条有具体结果的就叫表达式,能够通过上述方法去格式化表达式image-20230508121528385

        6. input输入输出

          1. 获取键盘的输入,可以吧内容输出在屏幕上,使用变量接受input语句获取键盘输入数据image-20230508134001644
          2. 除了用 name = input() 还可以使用 name = input(“请告诉我你的名字”),效果是一样的
          3. 也就是用input(提示问题),input里面的变量可以是提示作用
          4. 键盘中无论输入什么类型的数据,获取到的数据就是字符串类型
        7. 判断语句

          1. true就是1,false就是0;表示布尔类型

          2. if判断语句: if 要判断的条件: (空格缩进)条件成立时,要做的事情

          3. image-20230508135857706

          4. if else条件语句判断:注意if和else同级,else不需要缩进

          5. image-20230508140418488

          6. if elif以及else的语句:用于多条件判断;

            1. 如果满足if条件,elif不会进行执行;如果满足elif第一个条件,那么elif以后的条件也不会执行
          7. while的循环操作:

            1. while条件: 条件满足时,做的事情image-20230508162029749
            2. 案例:求1-100的累加
            3. image-20230508162927087
          8. 补充:print语句不换行:使用end = '',记得与变量之间加上逗号。image-20230508164317308

          9. 制表符\t,中间用\t可以进行单词对齐,注意反斜杠是\t,不是/timage-20230508164645467

          10. for循环语句:

            1. 字符串中,定义相关字符串,然后for in打印出字符串中每一个单位

            2. 举例:for x in name: ,与js不同,PY不用加各种括号,用冒号代替

            3. 案例,数一下字符串有多少英文字母s,注意判断相等 是两个等号image-20230508171330057

            4. range语句:

              1. for循环中的in后面就是所谓的待处理数据集,准确的说就是序列类型

              2. 序列类型就是他的内容可以一个个依次取出来的一种类型,包括:字符串、列表、元祖等

              3. range语句,必须要在for语句当中,不能单独拎出来

                1. range(num):获取一个从0开始到num结束的数字序列
                2. range(num1,num2):就是从num1开始,到num2结束的序列,不含num2本身
                3. range(num1,num2,step):step表示步长,比如步长是2,那么就是输出[1,3,5,7]
            5. for循环的临时变量域:在for循环外边可以输出,只是不符合规范

          11. break和continue:

            1. continue:主要用于中断本次循环,直接进入下一循环,用于for和while循环

              1. 主要应用就是。因为某些原因,临时结束本次循环,放在语句之间,只是结束所在循环。
            2. break就是直接结束了,整个循环结束,如果有嵌套循环,那么只对自己的循环有影响

        8. 函数初体验

          1. 函数就是组织好的,可重复使用的实现特定功能的代码块
          2. 主要使用def来定义函数,格式 def 函数名(变量):
          3. 执行函数千万别忘记调用!!
          4. 当然函数体是冒号之后,然后还有返回值returnimage-20230508195317400
          5. 遇到return就是把值返回给函数作为结果,当然遇到return函数肯定就已经终止了。
          6. return返回值为NONE的类型,没有return返回的话,函数的语句最终输出结果是NONE
          7. image-20230508195902315
          8. NONE主要是用于if判断,可以作为false使用;可以声明一些无意义的变量
          9. 函数的说明文档:在函数里三个引号之后按回车就可以
          10. 函数嵌套:一个函数里面嵌套了另外一个函数image-20230508200756720
        9. Python的数据容器

          1. 可以容纳多份数据,可以容纳多个数据类型,一个数据就是一个元素

          2. 列表

            1. 定义就是和数组一样 [] 或者是list() ,每个元素用逗号隔开:注意,字符串要加引号,还有就是print可以打印多个变量image-20230508211637103

            2. 当然也可以定义嵌套列表,里面的数据类型也可以是不同的

            3. 列表的下标索引:和数组一样,从0开始的索引:list[0]

              1. 但是要取嵌套列表的时候,需要取多次:不是在里面取而是在外面取,如图image-20230508212158865
            4. 列表的方法:将函数定义成class(类)的成员,那么函数就叫方法

              1. 函数的调用方法不一样
              2. 查找某元素的下标:语法:列表.index(元素),注意的是:index里面的元素类型
              3. image-20230508212701731
              4. 修改下标索引的值:列表[下标] = 值
              5. 对列表元素插入的操作:insert,参数是插入的位置还有新元素
              6. 对列表的追加,使用append
              7. extend就是将一个列表追加到另外一个列表后面 直接就是list0.extend(list1),事后返回新的列表
              8. 删除方式就是del[指定下标]:del list[0],还有就是list0.pop(下标)
              9. remove方法就是能够一处第一个匹配项,他的参数是一个元素,不是下标,只能删掉一个元素,还是第一次搜索的元素
              10. 可以用count来统计出现的次数,参数是元素。
        10. 元组(TUPLE):

          1. 和列表最大的不同就是不能进行修改,需要程序内封装数据,但是不希望篡改就是元组

          2. 定义:就是直接用()来定义

          3. 如果定义空的元组是 a= tuple()

          4. 如果只有一个元素,需要在元素之后加上逗号

          5. 和列表一样都支持下标索引

          6. 方法:

            1. 用index,还有len
            2. 元组内的内容不可以修改,但是对于元组里面的列表可以进行修改
        11. 字符串的修改

          1. 不支持修改
          2. 可以使用index方法
          3. 字符串的替换,也就是replace:字符串.replace(字符串1,字符串2),将1修改为2,必须是字符串
          4. 字符串的分割。split,需要传入一个参数,按照什么进行切分,但是切割的字符是不存在的
          5. 字符串的strip:去除前后的空格,如果有参数就把头和尾的空格去掉,然后去掉字符串中所存在参数,去除参数,但是注意,参数是没有顺序的
        12. 数据容器的切片

          1. 序列就是内容连续,有序,可以使用下标索引的容器
          2. 切片就是从一个序列里面取出来一个小序列
          3. 语法:序列[开始:结束:步长],注意是冒号,步长还可以是冒号,可以直接省略开始和结尾下标,但是注意冒号不可以省略,步长也可以省略,默认值为1
          4. 不会影响序列,只会得到一个新的序列
        13. Set* 集合*

          1. 列表和元组都可以支持元素重复和有序,但是元组不可修改

          2. 集合使用{}大括号,不存在重复的元素,可以进行去重;内容也是无序的,所以无法访问下标索引

            1. 如果有重复元素,那么不会显示
          3. 方法:

            1. 通过add添加新元素
            2. 通过.remove移除新元素
            3. 从集合中随机取出一个元素 .pop,但是在列表上就是取出最后一个
            4. .clear,就是集合被清空
            5. difference 集合1.difference(集合2),取集合中的差集,也就是集合1中在集合2没有的
            6. 消除差集 difference_update(集合2)
            7. union,使用联合; 集合1.union(集合2)
        14. 字典

          1. 通过字典可以使用key来取出value的操作

          2. 和集合一样,使用{}和逗号进行分割,但是存储键值对

          3. 类型名字是dict,直接用{}来定义空字典,也可以用dict()来定义

          4. 字典的key不可以重复,只会覆盖掉

          5. 取得话直接使用[key]来取元素

          6. key不可以是字典,value都可以

          7. 字典的常用操作:

            1. 修改操作:字典[key] = value,key不存在就是新增,key存在就是替换
            2. pop就是移除字典中的key和value
            3. clear清空元素,全部被清空
            4. 获取全部key 就是 .keys方法,得到的结果key的字典
        15. 对于数据容器的总结:

          1. 下标索引

          2. 是否支持修改

          3. 是否存在重复元素

          4. 通过max和min找到最大最小的元素:

            1. 使用方法是max(容器)
          5. 可以使用容器转换,和转化float什么的差不多

            1. set()转化为集合,数据会无序,字典value丢失
            2. 没有转化为字典的函数,有,但是会报错,缺乏value
          6. 容器的通用排序:sorted(,reverse=True)

        16. 函数

          1. 函数的多个返回值,也就是定义多个变量image-20230509110957068

          2. 参数的使用形式

          3. func(name = '小明',age= 18)用关键字传参,就是指定参数

          4. (*args)位置传参,args传入后会传到一个元组内部(**kwargs)传入后会作为字典进行存在(需要key-value进行传递)

          5. 函数作为参数进行传递

          6. lambda匿名函数:

            1. def就是有名称,可以循环使用无数次
            2. lambda关键字就是无名称,只可以使用一次,函数体只能写一行,有点像js的箭头函数image-20230509113334768
        17. 关于文件的读取操作:

          1. open打开已经存在的文件,或者创建新文件 open(路径文件名,选择模式,编码方式)

            1. 示例:f = open('file.txt',"r",encoding = 'UTF-8'),此时f就会是一个文件对象
            2. 模式:r是只读;w是只用于写入;a是追加
          2. 读操作相关的方法

            1. .read(num),num是可以读取的区域,没有传入num就可以全读
            2. .readlines()方法,按照行方式把整个文件的内容进行一次性读取,返回的是一个列表,每行数据是一个元素,就是只读取一行
            3. for循环也是可以一行一行的读取image-20230509114531562
            4. 停止是f.close(),也可以用with open(open方法中的参数)as f来替代close操作
          3. 文件的写出操作:

            1. f.write(‘写入的内容’),之后用f.flush()刷新文件
        18. 异常的捕获

          1. try: 可能出错的代码 except:如果出现异常的代码image-20230509115352935
          2. 捕获指定的异常:就是把出错的原因放到except后面,总结说就是针对这个问题来捕获异常
          3. 顶级的捕获方式:except Exception as e:
          4. 如果没有异常,可以用else进行处理
          5. finally:就是无论是否出现异常,我都会执行操作任务,一般都会用在文件的关闭上
          6. else和finally都是可选的image-20230509115939325
          7. 异常具有传递性
        19. Python 的模块

          1. 是一个python文件,里面有类、函数、变量等

          2. 导入形式:

            1. import 模块名 例如:import time ------time.sleep
            2. from 模块名 import功能名 功能名()例如:from time from sleep ---------sleep
            3. from 模块名 import 功能名 as 别名 -----也就是给sleep设置别名
          3. 可以自己制作一个,设置一个py文件,py文件里面定义一个函数,import改文件,然后用.使用该功能调用

          4. ——main——:主要是解决import的文件在调用过程中自己自动执行输出,可以使用main变量阻止自动输出image-20230509150647708

          5. all :如果模块里面有all变量:主要作用就是控制导入的来控制是否能够进行导入,因为不是要导入所有功能嘛,如果写了*但是只想用其中一个就可以通过all来控制

            1. 例子: ——alll—— ==['要使用的函数']
          6. 不同模块,也是分先后导入,后导入的会覆盖掉以前导入的

        20. 自定义Python包

          1. 包就是个文件,如果有——init——.py文件的话就是Py包image-20230509151323911
          2. 关于第三方包,使用pip进行安装
        21. 关于JSON

          1. 使用json.dumps方法能够将py数据转化为json数据
          2. 用json.loads能够将json转化为python数据
        22. 对象

          1. 生活中数据的组织

          2. 程序中数据容器使用混乱,列表,字典,字符串什么都有

          3. 使用对象对数据进行组织:

            1. 设计类 : class Student:

            2. 创建对象 stu_1 = Student

            3. 对象属性复制 stu_1.name = '周杰伦'

            4. image-20230509161113014

            5. Class定义类:

              1. 类的属性: 直接给属性赋值(成员变量)

              2. 类的行为:对象 = 类名称() (成员方法)

                1. 类的方法和函数有区别 def 方法名(self,形参)
                2. 定义方法时候参数必须带上self,但是调用的时候不用带上self
                3. 还需要注意的是要调用成员变量的时候需要用上self.变量
                4. 注意,用对象等于类的时候,需要在类中带上(),比如image-20230509162305344
          4. 类和对象:

            1. 类相当于图纸,对象相当于具体根据图纸设计出来的实物。
        23. 构造方法

          1. 可以使用--init--方法进行构造,就是构造方法
          2. 创建类对象的时候,会自动执行
          3. 创建类对象的时候,将传入参数自动传递给--init--方法使用image-20230510092147000

Python高阶

  1. 闭包:全局变量有修改的风险,出现了闭包

    1. 做两个嵌套的函数,内部函数使用外部函数变量,和JSreturn不同
    2. image-20230510160109504
    3. 如果要修改外部变量的值,在内部加入nonlocal关键字来修饰外部函数的变量,才可以在内部函数修改它
  1. 装饰器:

    1. 其实也是一种闭包,功能就是不破坏目标函数原有的代码和功能的前提下,为目标函数增加新功能
    2. 其中的一种示例就是在外部函数的参数中加入函数,然后再内部函数进行相关调用
    3. 装饰器的语法糖:@outer,使用outer(outer是外部函数名),定义在目标函数(内部函数)之上image-20230510162925942
    4. 装饰器就是使用创建一个闭包函数,然后再闭包函数中调用目标函数
    5. 可以达到不改变目标函数,实现新增功能的要求
  2. 设计模式和单例模式

    1. 常见的设计模式:面向对象、单例模式和工厂模式

    2. 单例模式

      1. 创建类的示例后,可以得到类对象,当然这两个类对象是完全不同的独立的两个对象,但是,有时候我们仅仅只需要一个类对象,节省内存开销
      2. 总结为:单例模式就是确保一个类只有一个实例存在,提供一个访问他的全局访问点image-20230510163715907
      3. 可以import解决这个一个类创建多个内存地址不同的对象的问题 ,新建一个py文件,然后通过s1来创建新的对象,就可以得到指向统一内存地址的对象了
    3. 工厂模式

      1. 需要大量创建一个类的实例的时候,可以选择工厂模式

      2. 优点:

        1. 大批量创建对象的时候有同意的入口, 易于代码的维护
        2. 发生修改的时候,修改工厂类的创建方法即可
        3. 符合现实世界的模式