Python-notes

Python

这个是社长写的b站黑马程序员的python课的笔记,小白们一枚,欢迎大佬指错

字面量

  • 字面量
    • 数字
    • 字符串
    • 列表
    • 元组
    • 集合
    • 字典

注释

  • 注释在代码中不会被执行

    • # 单行注释(# 和注释内容一般以一个空格隔开)

    • “”" “”"(前后分别用三个引号表示注释)

变量

  • 定义格式(变量名 = 变量值)

数据类型

  • 字符串
  • 整型
  • 浮点型
  • type()用来得到数据类型,变量没有类型,但是存储的数据有

数据类型转换

  • 从文件中读取的数字,默认是字符串,需要转换成数字类型

  • input()语句,默认结果是字符串,需要数字结果是也需要转换

  • 格式:目标数据类型(待转换数据) 如:int(x)

  • 数据类型都可以转换为字符串,但只有是数字的字符串才能转换为整型和浮点型

标识符

  • 类,方法,变量的名字

  • 只允许出现中,英文,数字,下划线(不推荐使用中文,但是Python支持,数字不允许用在开头)

  • 大小写Python可以进行区分

  • 大小写不一样不算占用关键字

运算符

  • 算术运算符

    • 加减乘除(+,-,*,/)

    • 取整除(//)

    • 取余(%)

    • 指数(**)

  • 赋值运算符(把等号右边的结果赋给左边的变量)

    • 在算术运算符后面加上等号(在同一行语句内运算并进行赋值)

字符串扩展

  • 单引号,双引号,三引号定义的都是字符串(三引号内容在赋值给变量时变为字符串)

  • 单引号定义法可以内含双引号

  • 双引号定义法可以包含单引号

  • 使用转义字符“\”:如:n ="“66"”

  • 字符串拼接(+号在变量数量较多时使用麻烦,局限性高)

    • 加法拼接,如:

      print("xxx" + "xxx" + a)

    • 使用+拼接,只适用于字符串本身进行拼接,无法和其他数据类型进行拼接

  • 字符串格式化

    • %s(将内容转换成字符串,放入占位位置)

      • % 占位符
      • s 将变量变成字符串放入占位符所占位置img
      • 例:
      message = "Python大数据学科,毕业%s人,平均工资%s" % (class_name, avg_salary)
      
      • 多个占位符,引用变量需要用括号包起来
    • %d(将内容转换成整数,放入占位位置)

    • %f(将内容转换成浮点型,放入占位位置)

    • 格式化的精度控制

      • 示例:%5.2f表示将宽度设置为5位,将小数点精度设置为2,对11.345设置%7.2f后,输出为:[][]11.35。2歌空格不足宽度,小数部分限制2位精度,四舍五入为.35
    • 格式化方式2

      • 通过语法:f"内容{变量}"的格式;来快速格式化

      • 例如:

      print(f"I am {name}, i born in {set_up_year})
      
      • 不会理会类型

      • 不做精度控制

    • 对表达式进行格式化

      • 表达式:一条具有明确执行结果的代码语句

        print("11的结果是:%d" % (11))

数据输入

  • input语句(获取键盘输入)

    • 使用一个变量接收input获取的数据

      input("请告诉我你是谁")

    • input本身就可以输出提示语句

    • input获取的都是字符串类型的数据,键盘输入的都会变成字符串型

布尔类型和比较运算符

  • 布尔类型用来表达现实生活中的逻辑真假

    • True表示真,记作1

    • False表示假,记作0

  • 例如:

    result = 10 > 5 结果为True

  • 比较运算符

    • == 相等

    • != 不等

    • > 大于

    • < 小于

    • >= 大于或等于

    • <= 小于或等于

判断语句

  • if语句的基本格式

    • if

      if 判断表达式:
      	条件成立时的语句
      
    • if——else

      if  判断表达式:
          条件成立时的语句
      else:
          不成立时的语句
      
    • if——elif——else

      if  判断表达式:
      	条件成立时的语句
      elif  判断表达式:
      	条件成立时的雨具
      else:
      	条件都不成立时的语句
      
    • 判断语句的嵌套

      • 相同缩进为同一级判断

随机数字

  • 随机数字

    import random
    num = random.randint(最小值,最大值)
    

循环语句

while

while  条件表达式:
     条件满足时,执行的语句1
     条件满足时,执行的语句2
     条件满足时,执行的语句3
  • 循环需要设置终止条件,否则会陷入死循环

  • 循环需要得到布尔类型数据来判断是否执行循环

  • while的嵌套循环

  • print输出不换行的写法:

    print("hello world", end = ' ')

  • \t

    • 缩进符

    • 效果等同于在键盘上按下Tab

for循环

  • for 临时变量 in 待处理数据

  • 例如:

    name  =  "itheima"
    for  x  in  name:   //把name中的字符挨个取出给x
        print(x)     //打印
    
  • 序列类型

    • 待处理数据严格称为序列类型

    • 字符串

    • 列表

    • 元祖

    • 等等

  • range语句

    • 语法1

      range (num) //不包含num本身

      • 例如:

        range(5) //取出数据{0,1,2,3,4}

    • 语法2

      range(num1,num2)    //获得一个从num1开始,到num2结束的数字序列,不包含num2本身
      
      
    • 语法3

      range(num1,num2,step)    //获得一个从num1开始,到num2结束的数字序列,不包含num2本身
      
      • 该语法数字序列存在步长,以step为准,step默认为1

      • 例如:

        range(5,20,2)

        • 获取的数据为{5,7,9}
    • 变量作用域

      • for循环外访问临时变量,实际上可以访问到,但是在编程规范上,不符合规定
  • for循环嵌套

continue和break

  • continue

    • 终端本次循环,直接进入下一次循环

    • continue之后的循环语句,在本次循环内不再执行

  • break

    • 直接结束循环,不再执行本循环的所有语句

函数

  • 函数介绍

    • 组织好的,可重复使用的,用来实现特定功能的代码段

    • 函数能减少重复代码,提高开发效率

  • 函数的定义

    def  函数名(传入参数):
    	函数体
    	return    返回值
    
  • 函数调用

    函数名(参数)

    • 参数不需要时可以省略

    • 返回值不需要时可以省略

    • 函数必须先定义后使用

  • 函数的参数

    • 传入参数

      • 在函数进行计算的时候,接受外部调用提供的数据

      • 例如:

        def  add(x,y):
        
        	result = x + y
        
        	print(f"{x} + {y} = {result}")
        
      • 函数定义中,提供的x和y称为形式参数

      • 函数调用中传入的数据称为实际参数

      • 传入参数数量不受控制,可以没有,也可以有N个

  • 函数的返回值

    • 函数在完成调用之后,传回的值
    def  函数(传入参数)
    	函数体
    	return  返回值
    
    • return之后的代码不执行

    • None类型

      • 无返回值的函数,实际上就是反悔了:None这个字面量

      • 没有实际意义,就是返回了一个空值

      • 可以通过return None主动返回,和不写return效果相同

  • 函数说明文档

    • 用多行注释的形式,对函数进行说明解释

    • 写在函数体之前

    • :param //解释参数

    • :return//解释返回值

    • img

  • 函数的嵌套调用

    • 定义:一个函数里面调用另一个函数
  • 变量的作用域

    • 局部变量

      • 定义在函数体内部的变量,只在函数体内生效
    • 全局变量

      • 定义在函数体外的变量,全部函数都可以生效
    • global关键字

      • 让函数内定义的变量也可以定义为全局变量
      def fun():
      	global num
      	num = 100
      
  • 函数的多返回值

    def  test_return():
    	return 1,2
    	x,y = test_return()  //x = 1,y = 2
    
  • 函数的多种传参方式

    • 位置参数

      • 调用函数时根据函数定义的参数位置来传递参数
    • 关键字参数

      • user_info(age, name)

      • user_info(name = 小明,age = 20) //调用函数时可以不按照固定顺序

      • 函数调用时,可以和位置参数混用,但是位置参数必须在关键字参数的前面

    • 缺省参数

      • 缺省参数也叫默认参数,用于定义函数,为函数提供默认值

      • 当调用函数时,如果没有传递参数,就会默认使用缺省参数对应的值

      • 函数调用时,如果为缺省参数传递值,则在函数内使用传递值,否则使用默认值

      • 例如:

        • def fun(name, age, gender = '男')
    • 不定长参数

      • 位置不定长

        • def fun(*args) //传递进函数的参数不受限
          • 穿进的所有参数都会被args变量收集,会根据参数的位置合并成为一个元组,args是元组类型
      • 关键字不定长

        • def fun (**kwargs): //传入函数的数量同样不受限
          • 参数是键值对的情况下,所有的键值对都会被kwargs接受,同时根据键值对组成字典
  • 匿名函数

    • 函数作为参数传递

      • 这是一种计算逻辑的传递,而不是数据的传递

      • 例如:

        def fun(compute):  //若不传入compute,则fun无法调用compute
        	result = compute(1,2)
        	print(result)
        def compute(x, y):
        	return x + y
         	fun(compute)
        
    • lambda匿名函数

      • def关键字,定义带名称的函数

      • lambda关键字,定义无名称的函数

        def  fun(compute):
        	result = compute(1,2)
        	print(f"{result}")
        	fun(lambda x, y:x + y)
        
      • 无法写多行代码

数据容器

  • 一种可以容纳多分数据的数据类型,容纳的每一份数据称之为1个元素,没一个元素,可以存储任意类型的数据

5类数据容器

列表(list)
  • 列表的定义

    • 一次性存储多个数据

    • 以 [] 作为标识

    • 列表内每一个元素之间,都好隔开

    • 定义变量

      • 变量名 = ["小明","小红","小敏","大壮"]
    • 列表支持嵌套

      • my_list = [[1,2,3],[4,5,6]]
    • 同一列表支持不同元素的数据类型不一样

      • my_list = ["小明",666,True]
  • 列表的下标索引

    • 从前向后,从0开始

    • my_list = [1,2,3,4]

    • my_list[0] = 1

    • 支持反向索引(从后向前,从-1开始)

      • my_list[-1] = 4
    • 嵌套的列表同样支持下标索引

      • my_list = [[1,2,3,4],[5,6,7,8]]

      • my_list[1][1] = 6

    • 通过下标索引取数据,一定不能超出范围

  • 列表的常用操作(方法)

    • 方法的定义

      • img

      • img

    • 方法的使用

      student = Student()
      num = student.add(1,2)
      
    • 查询某元素的下标

      • 语法:

        列表.index(元素)

      • 找不到元素就会报错ValueError

    • 插入

      • 语法:

        列表.insert(下标,元素)

      • 在指定的下标位置,插入指定的元素

    • 删除

      • 语法1:

        del 列表[下标]

      • 语法2:

        列表.pop(下标)

        • 将删除元素从列表中取出,并且该元素可以赋值给变量
      • 不依靠下标删除指定元素

        列表.remove(元素)

        • 从前到后移除第一个对应的元素
    • 清空

      • 语法:

        列表.clear()

    • 修改

      列表[下标] = 值

    • 追加

      • 语法:

        列表.append(元素)

        • 将元素插入到列表尾部
      • 语法2:

        列表.extend(其他数据容器)

        • 在列表后追加其他的数据容器
    • 统计个数

      • 语法1:

        列表.count(元素)

        • 统计某元素在列表内的数量
      • 语法2:

        len(列表)

        • 统计容器内有多少元素
  • 列表的遍历

    • 将容器内元素依次取出进行处理

    • 通过控制下标索引来控制循环

    • while循环遍历

      • 可以通过条件控制实现无限循环

      • 适用于任何想要的循环场景

      index = 0
      while index < len(列表) :
      	element = 列表[index]
      	index += 1
      
    • for循环遍历

      • 理论上不可以实现无限循环,因为遍历的容器容量不是无限的

      • 适用于遍历数据容器的场景或简单的固定次数的循环场景

      for element in my_list
      	print(f"列表的元素有:{element}")
      
元组(tuple)
  • 元组一旦定义完成,就不可以修改

  • 定义元组使用小括号,使用逗号隔开各个数据,数据类型可以不同

  • 定义元组变量

    • 方式1

      变量名称 = (元素1,元素2,.......,元素n)

    • 方式2

      变量名称 = tuple()

    • t4 = ("hello") //定义的是字符串

    • t4 = ("hello",) //定义的是元组,用逗号标识出来了

  • 元组的操作方法

    • index() //查找

    • len() //统计元素个数

    • count() //统计某元素在列表内的个数

字符串(str)
  • 字符串可以存放任意数量的字符

  • 字符串同样支持下标

  • 字符串不支持修改操作,为只读数据容器

  • 操作方法

    • 字符串.index() //查找

    • 字符串.replace(字符串1,字符串2) //替换

      • 将字符串内的全部字符串1,替换成字符串2

      • 不是修改字符串本身,而是得到了一个新字符串

    • 字符串.split(分隔符字符串) //分割

      • 按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中

      • 字符串本身不变,而是得到一个列表对象

    • 字符串.strip() //规整

      • 去除前后空格
    • 字符串.strip(字符串) //去除指定字符

      • 去除前后指定字符串

      • 例子:

        • my_list = "12hello world21

        • print(my_list.strip("12)) //结果:“hello world”

        • 传入的是"12",其实就是"1","2"都会去除,按照单个字符

    • 字符串.count() //统计某字符出现的次数

    • len(字符串) //统计字符串长度

  • 支持循环遍历

集合(set)
  • 不支持元素重复

  • 定义格式

    • 变量名称 = {元素,元素,元素}

    • 变量名称 = set() //定义一个空集合

  • 常用操作

    • 集合不支持下表索引访问

    • 集合名称.add(元素) //添加元素

    • 集合名称.remove(元素) //移除元素

    • 集合名称.pop() //从集合中随机取出一个元素

    • 集合名称.clear() //清空集合

    • 集合1.difference(集合2) //取出集合1和集合2的差集

      • 得到一个新的集合,集合1和集合2不变
    • 集合1.difference_update(集合2) //消除2个集合的差集

      • 对比集合1和集合2,在集合1内.删除与集合2相同的元素
    • 集合1.union(集合2) //2个集合合并

      • 将集合1和集合2合并
    • len(集合) //统计集合的元素数量

    • 集合的遍历

      • 集合不支持下标索引,只能使用for循环
        • for x in 集合名称
字典(dict)
  • 通过key找到value

  • 字典的定义,同样使用{},不过存储的元素是一个个键值对

  • 语法:

    • {key:value,key:value,key:value,......,key:value}

    • 字典名称 = {}或者字典名称 = dict{} //定义一个空的字典

  • 字典键值对的key不可以重复

  • 字典可以嵌套

    • my_dict = {1:{1:a,2:b},2:{3:c,4:d}
  • key和value可以是任意数据类型

  • 字典基本操作

    • 变量名称 = 字典名称[key] //字典中数据的获取

    • 字典[key] = value //元素的新增和修改

      • 如果key不存在,就新增元素

      • 如果key存在,则修改该key对应的value

    • 字典.pop[key] //获取key对应的value,并在字典中删除这个键值对

    • 变量.clear() //清空字典

    • 字典.keys() //获取全部的key

    • 遍历

      keys = my_dict.keys()
      for key in keys:  //通过获取全部的key,利用for循环遍历字典,等价于for key in 字典名称
      
      • 不支持while循环
    • len(字典名称) //统计字典的元素数量

数据容器的通用操作

  • len() //求容器长度

  • max() //求容器中最大元素

  • min() //求容器中最小元素

  • 通用类型转换

    • list()

    • str()

    • tuple()

    • ste()

    • 转换后字典丢失value

  • sorted(容器名称,[reverse = True])

    • 给定容器进行排序,reverse默认是False,True是将结果进行反转

    • 排序后存入列表中

    • 排序后字典丢失value

  • 字符串大小比较

    • 基于ASCII码值进行比较

    • 一位位进行比较

    • 长的大于短的

    • img

  • 序列

    • 内容连续,有序,可以使用下标索引的数据容器

    • 列表,元组,字符串均可以视作序列

    • 切片操作

      • 从一个序列中,取出一个子序列

      • 语法:序列[起始下标:结束下标:步长]

      • 起始和结束不写表示从头到尾

      • 结束下标(不含)表示何处结束,可以留空,留空视作到结尾

      • 步长

        • 1:逐个选择,可以省略不写

        • 2:每隔一个取出

        • N:每次跳过N-1个取出

        • 步长为负,反向取出

文件

文件编码

  • 计算机只能识别0和1,通过文件编码技术,将丰富的文件内容转换成0和1存储在硬盘中

  • 编码技术

    • 将内容翻译成二进制,以及将二进制翻译回可识别内容

    • UTF-8全球通用的编码格式

    • GBK

    • Big5

文件的读取操作

  • open(目标文件名(可以包含文件所在的具体路径),mode(打开文件的模式),encoding = "编码格式")

    • mode

      • r以只读方式打开

      • w打开一个文件只用于写入,如果文件存在则打开文件,并从头开始编辑,原有的内容会被删除,如果文件不存在,就创建新文件

      • a如果该文件存在,新的内容将会被写入到已有内容之后,如果文件不存在,创建新的文件进行写入

  • 例如:

    f = open('python.txt','r',encoding = "UTF-8")

    • encoding的位置不是第三位,不能使用位置参数,用关键字参数直接指定

    • f是open函数的文件对象

  • 文件访问后,无论后面如何使用方法,都会续接上一次读取文件的方法

  • read()方法

    • 文件对象.read(num)

    • num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,就表示读取文件中所有的数据

  • readlines()方法

    • 文件对象.readlines()

    • 按照行读取文件,并返回一个列表,列表元素是每一行的数据

  • readline()方法

    • 一次读取一行内容
  • for循环读取文件行

    • for line in open(目标文件,mode)

    • 文件每一行默认就是一个元素,不需要用readline()循环读取

  • close()关闭文件对象

    • 文件变量.close()

    • 释放内存,停止文件占用

  • time.sleep(所需时间) //暂停程序,并设置暂停时间

  • with open() as f: //在对文件完成操作之后,自动close文件,避免遗忘

文件的写入操作

  • f.write()

    • 文件写入
  • f.flush()

    • 内容刷新
  • 调用write时,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区

  • 当调用flush的时候,内容会真正写入文件,这样可以避免频繁调用

文件的追加写入

  • 在打开文件时mode使用"a",其他操作和文件写入相同

异常

定义

  • 程序运行过程中出现了错误

异常的捕获

  • 为什么要捕获异常

    • 遇到异常,一般有两种情况

      • 程序崩

      • 溃对bug进行提醒,程序继续进行

  • 捕获异常

    • 语法 1:捕获所有的异常

      try:
      	可能出现错误的代码
      except:
      	如果出现异常执行的代码
      
      • 或者
      try:
      	可能出现错误的代码
      except Exception as e:
      	如果出现异常执行的代码
      
    • 语法2:捕获指定的异常

      try:
      	可能出现错误的代码
      except NameError as e:  //NameError可以是任意异常,e是存储异常信息的变量
      	如果出现异常执行的代码
      
    • 语法3:捕获多个异常

      try:
      	可能出现错误的代码
      except (NameError,ZeroDivisionError) as e:
      	如果出现异常执行的代码
      
  • 异常else

    try:
    	可能出现错误的代码
    except:
    	如果出现异常执行的代码
    else:
    	如果没有异常,执行else中的代码
    
  • 异常finally

    try:
    	可能出现错误的代码
    except:
    	如果出现异常执行的代码
    else: 
    	如果没有异常,执行else中的代码
    finally:
    	有无异常都会执行,经常用于文件的关闭
    

异常的传递

  • img

模块和包

模块(Module)

  • 模块就是一个Python文件,其中包含类和方法,通过导入可以使用这些

  • 模块的导入

    • [form 模块名] import [模块|类|变量|函数|*][as 别名]

    • 常用组合形式:img

    • 例如

      import time
      print("开始")
      #让程序暂停1秒
      time.sleep(1)
      print("结束")
      
      • 或者
      from time import * //   *号就是导入该模块的全部功能,使用from可以在后面代码中直接使用模块中的方法,而直接使用import需要用.来调用
      print("你好")
      sleep(5)
      print("我好")
      
      • 或者
      import time as t  //给time模块一个别名,后续使用模块用别名代替
      print("开始")
      \#让程序暂停1秒
      t.sleep(1)
      print("结束")
      
  • 自定义模块

    • 定义一个模块

      • 创建一个Python文件,书写函数和方法
    • 通过导入模块语句导入

  • 当导入多个模块的时候,切模块内有同名功能,当调用这个同名功能的时候,调用到的是后面导入的模块的功能

  • 测试模块

    • 在实际开发中,开发人员会自行在Python文件中添加一些测试信息,就会产生一个问题,导入该模块时,这些测试信息会被调用

    • 解决方案:

      if _name_ = '_main_'

  • _all_ = ['方法名称']

    • 在使用*导入所有方法的时候,只有在all里的才能被导入

  • 包就是文件夹,其中包含多个Python模块,并且而外包含一个_int_.py文件

  • 自定义包

    • 创建步骤img
  • 导入包

    • 导入包

      • import 包名称
    • 导入包的模块

      • import 包名称.模块名称

      • form package import moudual

  • 安装第三方包

    • 第三方包img

    • 安装

      • pip install 包名称

      • 通过国内镜像下载

        • 清华大学网站下载:img

        • pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib

JSON数据格式

  • json是一种轻量级的数据交互格式

  • 本质上是一个带有特定格式的字符串

  • 主要功能

    • 在各个编程语言中流通的数据格式,负责不同的编程语言中的数据传递和交互
  • python数据和JSON数据的相互转换

    • python转json

      import json
      data = {"a":1,"b":2,"c":3,"d":4}
      json_str = json.dumps(data)  如果有中文的话-->  json_str = json.dumps(data, ensure_ascii=False)
      print(type(json_str))
      print(json_str)
      
    • json转python

      data = '{"a":1,"b":2,"c":3,"d":4}'
      l = json.loads(data)
      print(type(l))
      print(l)
      

pyecharts模块

  • [画廊]

  • 基础折线图

    from pyecharts.chart import Line
    line.Line()
    line.add_xaxis(["x","y","z"])
    line.add_yaxis("GDP",[a, b, c])
    line.render()
    
  • 全局配置

    • set_global_opts
  • 数据处理

    • 通过json模块进行数据处理

类与对象

  • 对象

    • img
  • 类的成员方法

    class  类名称:
    	类的属性  //成员变量
    	## 类的行为`  //成员方法,就是函数,在类内叫方法
    	def  方法名(self, 形参1,形参2:
    		方法体
    

构造方法

  • _init_()

    • 在创建类对象的时候,会自动执行

    • 在创建类对象的时候,将传入参数自动传递给_init_()方法使用

      class  Student:
      	name = None
      	age = None
      	tel = None
      	def _init_(self,name,age,tel):
      		self.name = name
      		self.age = age
      		self.tel = tel
      		print("Student类创建了一个对象")
      stu = Student("周杰伦",31,"18500006666")
      

魔术方法

_init_

_str_字符串方法

  • 直接输出类对象只会输出为内存地址,通过字符串方法,控制类转换为字符串输出
class  Student:
	def _init_(self,name,age,tel):
		self.name = name
		self.age = age
	def _str_(self):
		return f"Student类对象,name = {self.name},age = {self.age}"
student = Student("周杰伦",11)
print(student)    //结果:Student类对象,name = 周杰伦,age = 11
print(str(student))    //结果:Student类对象,name = 周杰伦,age = 11

lt

  • 可以让对象之间进行 < 或者 > 比较
class  Student:
	def _init_(self,name,age,tel):
		self.name = name
		self.age = age
	def _lt_(self.other):
		return self.age < other.age
stu = Student("周杰伦",11)
stu1 = Student("林俊杰",13)
print(stu < stu1)  //结果:True
print(stu > stu1)  //结果:False

_le_

  • 可以让对象之间进行 <= 或者 >= 比较
class  Student:
	def _init_(self,name,age,tel):
		self.name = name
		self.age = age
	def _lt_(self.other):
		return self.age <= other.age
stu = Student("周杰伦",11)
stu1 = Student("林俊杰",13)
print(stu <= stu1)  //结果:True
print(stu >= stu1)  //结果:False  

_eq_

  • 可以让对象之间进行 == 比较
class  Student:
	def _init_(self,name,age,tel):
		self.name = name
		self.age = age
	def _lt_(self.other):
		return self.age == other.age
stu = Student("周杰伦",11)
stu1 = Student("林俊杰",13)
print(stu == stu1)  //结果:False

封装

  • 私有成员变量

    class Phone:
    	__current_voltage = 0.5  //在定义变量名时,前面加上__
    
  • 私有成员方法

    class Phone:
    	__current_voltage = 0.5
        def __kepp_single_core(self):  //在定义方法名时,前面加上__
            print("让CPU以单核模式运行")
    
  • 私有的成员变量和成员方法只有类内部可以使用

继承

继承的基础语法

  • 单继承
class phone2022(phone):
    face_id = True
    
    def call_by_5G(self):
        print()
  • 多继承
class HUAWEI(phone,NFC,RemoteControl):
    

复写和使用父类成员

  • 子类在继承父类的成员属性和成员方法后,如果对其不满意,那么可以进行复写
class Phone:  //父类
	IMEI = None
	producer = "ITCATS"
	
	def call_by_5G(self):
		print("父类的5G通话")

class MyPhone(Phone):  //继承
	producer = "ITHEIMA"  //复写父类属性
	
	def call_by_5G(self):  //复写父类方法
		print("子类的5G通话")
  • 调用父类同名成员

    • 方式1

      • 调用父类成员

        • 使用成员变量

          父类名.成员变量

        • 使用成员方法

          父类名.成员方法(self)

      class Phone:  //父类
      	IMEI = None
      	producer = "ITCATS"
      	
      	def call_by_5G(self):
      		print("父类的5G通话")
      
      class MyPhone(Phone):  //继承
      	producer = "ITHEIMA"  //复写父类属性
      	
      	def call_by_5G(self):  //复写父类方法
      		print(f"父类的品牌是:{Phone.producer}")
      		Phone.call_by_5G(self)
              
              print("子类的5G通话")
      
    • 方式2

      • 使用super()调用父类成员

        • 使用成员变量

          super().成员变量

        • 使用成员方法

          super().成员方法()

      class Phone:  //父类
      	IMEI = None
      	producer = "ITCATS"
      	
      	def call_by_5G(self):
      		print("父类的5G通话")
      
      class MyPhone(Phone):  //继承
      	producer = "ITHEIMA"  //复写父类属性
      	
      	def call_by_5G(self):  //复写父类方法
      		print(f"父类的品牌是:{super().producer}")
      		super().call_by_5G(self)
      		
      		print("子类的5G通话")
      

类型注解

  • 类型注解:在代码中设计数据交互的地方,提供数据类型的注解(显示说明)

变量的类型注解

## 变量类型注解
var_1: int = 10
var_2: float = 3.1415926
var_3: bool = True
var_4: str = "itheima"
## 基础容器类型注解
my_list: list = [1,2,3]
my_tuple: tuple = (1,2,3)
my_set: set = {1,2,3}
my_dict: dict = {"itheima":666}
my_str: str = "itheima"
## 容器类型详细注解
my_list: list[int] = [1,2,3]
my_tuple: tuple[str,int,boll] = ("itheima",2,True)
my_set: set[int] = {1,2,3}
my_dict: dict[str,int] = {"itheima":666}
class Student:
	pass
stu: Student = Student()
  • 除了在代码中使用注解,注释中也可以进行类型注解
class Student:
	pass
	
var_1 = random.randint(1,10)		# type: int
var_2 = json.loads(data)		# type: dict[str,int]
var_3 = func()		# type: int

函数(方法)的类型注解

  • 对函数(方法)的形参进行类型注解
def 函数方法名(形参名: 类型, 形参名: 类型,....):
	pass
  • 对函数(方法)的返回值进行类型注解
def 函数方法名(形参名: 类型, 形参名: 类型,....) -> 返回值类型:
	pass

Union联合类型注解

from typing import Union

my_list: list[Union[str,int]] = [1,2,"itheima","itcast"]

my_dict: dict[str,Union[str,int]] = {"name": "周杰伦","age": 31}

多态

  • 多态指的是:多种状态,即完成某种行为时,使用不同的对象会得到不同的状态
class Animal:
	def speak(self):
		pass

class Dog(Animal):
	def speak(self):
		print("汪汪汪")

class Cat(Animal):
	def speak(self):
		print("喵喵喵")

def make_noise(animal: Animal):
	animal.speak()

dog = Dog()
cat = Cat()

make_noise(dog)		# 输出: 汪汪汪
make_noise(cat)		# 输出: 喵喵喵

抽象类(接口)

  • 在上文Animal父类中,父类的成员方法是空实现,父类来确定有哪些方法,具体的方法实现,由子类自行决定,这种写法,就叫做抽象类
## 抽象类
class AC:
	## 抽象方法
	def cool_wind(self):
		"""制冷"""
		pass
		
	def hot_wind(self):
		"""制热"""
		pass
		
	def wind(self):
		"""左右摆风"""
		pass

dict: dict = {“itheima”:666}
my_str: str = “itheima”

容器类型详细注解

my_list: list[int] = [1,2,3]
my_tuple: tuple[str,int,boll] = (“itheima”,2,True)
my_set: set[int] = {1,2,3}
my_dict: dict[str,int] = {“itheima”:666}


```python
class Student:
	pass
stu: Student = Student()
  • 除了在代码中使用注解,注释中也可以进行类型注解
class Student:
	pass
	
var_1 = random.randint(1,10)		# type: int
var_2 = json.loads(data)		# type: dict[str,int]
var_3 = func()		# type: int

函数(方法)的类型注解

  • 对函数(方法)的形参进行类型注解
def 函数方法名(形参名: 类型, 形参名: 类型,....):
	pass
  • 对函数(方法)的返回值进行类型注解
def 函数方法名(形参名: 类型, 形参名: 类型,....) -> 返回值类型:
	pass

Union联合类型注解

from typing import Union

my_list: list[Union[str,int]] = [1,2,"itheima","itcast"]

my_dict: dict[str,Union[str,int]] = {"name": "周杰伦","age": 31}

多态

  • 多态指的是:多种状态,即完成某种行为时,使用不同的对象会得到不同的状态
class Animal:
	def speak(self):
		pass

class Dog(Animal):
	def speak(self):
		print("汪汪汪")

class Cat(Animal):
	def speak(self):
		print("喵喵喵")

def make_noise(animal: Animal):
	animal.speak()

dog = Dog()
cat = Cat()

make_noise(dog)		# 输出: 汪汪汪
make_noise(cat)		# 输出: 喵喵喵

抽象类(接口)

  • 在上文Animal父类中,父类的成员方法是空实现,父类来确定有哪些方法,具体的方法实现,由子类自行决定,这种写法,就叫做抽象类
## 抽象类
class AC:
	## 抽象方法
	def cool_wind(self):
		"""制冷"""
		pass
		
	def hot_wind(self):
		"""制热"""
		pass
		
	def wind(self):
		"""左右摆风"""
		pass
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值