Day 16 python学习笔记

news2024/12/22 23:33:36

静态方法

静态方法,只需要在方法前添加 @staticmethod, 方法就可以不写形参self,可以通过实例对象.方法名调用,也可以通过类名.方法名调用

例:
class Test:
    @staticmethod
    def test1():
        print("你好")

    def nums(self):
        self.test1()
        self.num1 = 2
        self.num2 = 4

    def sums(self):
        print(self.num1+self.num2)



a = Test()
a.test1()     #实例对象.方法名调用
Test.test1()  #类名.方法名调用

结果:
你好
你好

类属性

类属性:让实例对象共用一个属性---类属性

使用方法:

  1. 对象名.属性
  2. 类名.属性名   (在类里面一定是这个)

实例属性: 

class Test:
    def __init__(self,name,age):
        self.nums = 0    #因为是实例属性,每次都是重新创建
        self.name = name
        self.age = age
        self.nums += 1
        # Test.nums += 1



a1 = Test("张三",21)
a2 = Test("李四",22)
a3 = Test("李四",22)
a4 = Test("李四",22)
a5 = Test("李四",22)

print(a1.nums)
print(a5.nums)

结果:
1
1

类属性:

class Test:
    nums = 0   #类属性:公用的
    def __init__(self,name,age):
        # self.nums = 0
        self.name = name
        self.age = age
        # self.nums += 1
        Test.nums += 1   #类属性进行操作



a1 = Test("张三",21)
a2 = Test("李四",22)
a3 = Test("李四",22)
a4 = Test("李四",22)
a5 = Test("李四",22)

print(a1.nums)
print(a5.nums)

print(Test.nums)

结果:
5
5
5

类方法

类方法:操作类属性(只需要在方法前添加 @classmothod

使用方法:

  1. 对象.类方法()
  2. 类名.类方法() 推荐

class Test:
    nums = 0
    def __init__(self,name,age):
        # self.nums = 0
        self.name = name
        self.age = age
        # self.nums += 1
        Test.nums += 1

    @classmethod
    def test_01(cls):   #cls可以为其他形参
        print(cls)
        cls.nums += 3
        print(cls.nums)


Test.test_01()
a1 = Test("张三",21)
print(a1.test_01)
print(Test.test_01)


结果:
<class '__main__.Test'>  #指向类
3
<bound method Test.test_01 of <class '__main__.Test'>>
<bound method Test.test_01 of <class '__main__.Test'>>

__slots__

__slots__:限制实例的属性

class Test:
    __slots__ = ("name","age","dcd")#限制实例的属性
    def test_01(self):
        pass


a = Test()
a.name = "zhangsan"
a.age = 21
a.dcd = "sksoc"
a.jineng = "python"  #这个报错

python异常

异常:检测到错误,解释器无法继续执行,出现错误提示,即为异常(BUG 小虫子)

异常捕获

即为异常处理(捕获异常)

防止异常出现导致代码直接终止(异常一般不会影响后面的代码)

容错机制:程序一旦出现异常,直接处理异常,程序不直接终止,继续向下执行

  1.  整个程序因为BUG停止运行
  2. 对BUG进行提醒,整个程序继续运行

捕获异常作用:提前假设某处会出现异常,提前做好准备,当真的出现异常时,有后续手段

基本语法:

try:
        可能发生错误的代码
except:
        如果出现异常的代码

例1:

try:
    file1 = open('D:\yfile.txt', 'r', encoding="UTF-8")
except:
    print("出错了!!!,文件不存在,请以w模式打开文件")

结果:
出错了!!!,文件不存在,请以w模式打开文件

例2:

def devid_by(x,y):
    return x/y



if __name__ == '__main__':
    a = int(input("请输入一个整数a:"))
    b = int(input("请输入一个整数b:"))
    c = devid_by(a,b)
    print(c)
    print("我是后面的代码")



结果:
请输入一个整数a:4
请输入一个整数b:2
2.0
我是后面的代码
请输入一个整数a:4
请输入一个整数b:0   #报错因为除数不能为0
Traceback (most recent call last):
  File "D:\edge下载\桌面美化\桌面文件夹\云计算\python\Day13\代码\04-__slots__.py", line 9, in <module>
    c = devid_by(a,b)
  File "D:\edge下载\桌面美化\桌面文件夹\云计算\python\Day13\代码\04-__slots__.py", line 2, in devid_by
    return x/y
ZeroDivisionError: division by zero

解决方法:

def devid_by(x,y):
    res = 0
    try:
        res = x/y
    except:
        return "除数不能为0"
    return res


if __name__ == '__main__':
    a = int(input("请输入一个整数a:"))
    b = int(input("请输入一个整数b:"))
    c = devid_by(a,b)
    print(c)
    print("我是后面的代码")



结果:
请输入一个整数a:4
请输入一个整数b:0
除数不能为0
我是后面的代码

优化:

def devid_by(x,y):
    res = 0
    try:
        res = x/y
        num3 = int(input("请输入num3:"))
        print(x + y + num3)
    except ZeroDivisionError as e:  #ZeroDivisionError:除0错误(精准捕获)
        return "除数不能为0"         #as e:起个别名e
    except ValueError as e:         #ValueError:值错误
        return "你输入的不是整数哦"

    return res


if __name__ == '__main__':
    a = int(input("请输入一个整数a:"))
    b = int(input("请输入一个整数b:"))
    c = devid_by(a,b)
    print(c)
    print("我是后面的代码")

结果:
请输入一个整数a:4
请输入一个整数b:2
请输入num3:3
9
2.0
我是后面的代码

请输入一个整数a:4
请输入一个整数b:0   #捕获到错误就不进行执行下去(num3)
除数不能为0     
我是后面的代码

请输入一个整数a:4
请输入一个整数b:2
请输入num3:3.14
你输入的不是整数哦
我是后面的代码

扩展:

try:

        可能出现异常的代码

except:

        出现错误时执行的代码

else:

        没有异常的时候执行的代码

finally:

         不论是否会有异常都会执行  (目的:借助特性执行一些必须执行的代码)

finally

例:

def test():
    a = 10
    return a
    print("111111111111")  #不执行


a = test()
print(a)
test()

结果:
10

解决方法:

def test():
    try:
        a = 10
        return a
    except Exception as e:
        pass
    finally:
        print("111111111111")


a = test()
print(a)
test()


结果:
111111111111
10
111111111111

扩展:

  • BaseException 超类  (错误的总基类 如object)
  • Exception 常规的错误的异常超类    (对于我们一般这个就够了)

查询异常的方法:

  1. win + r
  2. cmd + 回车(进入终端)
  3. python + 回车 (进入python解释器)
  4. import builtins (导入模块)
  5. dir(builtins)

捕获全部异常

异常的传递

异常具有传递性

自定义异常

自己定义没有的异常类

class My_error(Exception):  # 继承常规的错误的异常超类
    def __init__(self,msg):
        Exception.__init__(self,msg)


def login(username,pwd):
    if username != "admin":
        raise My_error("用户名不存在") #raise:抛出异常
    if pwd != "123456":
        raise My_error("密码错误")



if __name__ == '__main__':
    try:
        login("ad","123")
    except My_error as e:
        print(e)

if __name__ == '__main__':
    try:
        login("admin","123")
    except My_error as e:
        print(e)

结果:
用户名不存在  #第一个错误后面就不判断了
密码错误

python的文件操作

i/o流(input output stream):输入输出流

内存数据和磁盘这种可以永久存储数据的设备间的数据流动问题。
完整流动顺序:磁盘---内存----cpu----内存---磁盘            :输入流        :输出流 
包括网络上的数据请求……
内存是最重要的缓冲设备

I/O流分类:

数据的流动方向:(站在内存角度)
输入流:磁盘上的文件读取到内存中,是输入流
输出流:将数据从内存存储在磁盘中,输出流

数据的类型分类:

字节流(01010101):媒体文件等
字符流:效率较高,但字节流是根本

python通过open函数操作io流
 

文件的编码

计算机只认识0-1,使用编码技术(密码本)将内容翻译成0和1存入硬盘

计算机有很多的可用编码(不同的密码本):

读写文件编码必须一致
utf-8:目前全球通用的编码格式
gbk;`````

文件的操作

文件:

操作:打开、读、写、关闭

open( )

open( )为全局方法,无需导入模块

常用:

open(file,mode="r",encoding ="UTF-8")  

file:文件路径(目标文件名的字符串)  (同一路径直接写文件名)   
mode="r":可读 (打开文件的模式 只读 r、写入、追加)  (默认为可读)
encoding ="UTF-8":编码格式

返回一个数字,标识文件

例:

f = open("test.txt")
print(f)

结果:
<_io.TextIOWrapper name='test.txt' mode='r' encoding='cp936'>
>>> f = open("test.txt","r",encoding="UTF-8")
>>> f
<_io.TextIOWrapper name='test.txt' mode='r' encoding='UTF-8'>
>>>

f的方法

文件读取

read( )

文件对象.read(读取的数据的长度)

读取的数据的长度为空:读取全部内容 默认是-1,即读取到最后一位

>>> f.read()
'1\n2\n3\n4'
>>> f.read(1)  #因为之前读完了,读的指针就指向最后了
''
>>> f = open("test.txt","r",encoding="UTF-8")
>>> f.read(1)
'1'
>>> f.read(1)
'\n'
>>> f.read(1)
'2'
>>> f.read(1)
'\n'
>>> f.read(1)
'3'
>>> f.read(1)
'\n'
>>> f.read(1)
'4'
>>> f.read(1)  #读完后就读不到了
''
>>> f.read(1)
''
>>>

seek(0)

文件对象.seek(光标的位置):重新指定指针的位置

指针,第一次读取数据之后,指针移动到最后边,无法再读取

>>> f.read(1)
'4'
>>> f.read(1)  #读完后就读不到了
''
>>> f.read(1)
''
>>> f.seek(0)
0
>>> f.read(1)
'1'
>>>

readable()

文件对象.readable( ):判断文件是否可读

>>> f.readable()
True
>>>

writable()

文件对象.writable( ):判断文件是否可写

>>> f.writable()
False
>>>

close()

文件对象.close( ):   关闭文件

如果不将文件关闭,关机时或删除文件时都会显示运行

>>> f.close()
>>> f.closed
True
>>>

closed

文件对象.closed      判断文件是否关闭

>>> f.closed
False
>>>

readline()

文件对象.readline() :    读取行(针对字符数据的)

>>> f.readline()
'1\n'
>>>

readlines()

文件对象.readlines() :    将每一行作为一个元素,最后以列表的形式返回

>>> f.readlines()
['1\n', '2\n', '3\n', '4']
>>>

for i in 文件对象:

for i in 文件对象:  遍历循环文件对象(i为文件对象里每行的数据,以字符串格式返回)

f1 = open("1.txt","r",encoding="UTF-8")
print(f1)  #返回的这是基础信息,不是文件里的数据
print(f1.readlines())
f1.seek(0)    #因为上面进行readlines操作,指针已经到最后,需重新归0

for i in f1: #遍历循环f1
    print(i, type(i))




结果:
<_io.TextIOWrapper name='1.txt' mode='r' encoding='UTF-8'>
['张三,1000r,出差,测试\n', '李四,200r,吃饭,正式\n', '王五,1200r,出差,正式\n',
 '蔡,200r,打游戏,正式\n', '孙2,1000r,买东西,测试\n', '张飞,200r,吃饭,正式']
张三,1000r,出差,测试
 <class 'str'>
李四,200r,吃饭,正式
 <class 'str'>
王五,1200r,出差,正式
 <class 'str'>
蔡,200r,打游戏,正式
 <class 'str'>
孙2,1000r,买东西,测试
 <class 'str'>
张飞,200r,吃饭,正式 <class 'str'>

文件写入

>>> f = open("test.txt","w",encoding="UTF-8")
>>> f.writable()
True
>>>

write( )

文件对象.write(写入的数据 ) :      写入的数据积攒在程序的内存中(相当于写入未保存)

                                                    注意:并且会删除文件里原本的数据(相当于覆盖)

文件的追加,将w模式替换称a模式即可,不会把原来内容进行覆盖

>>> f.write("hh")
2
>>>

flush( )

文件对象.flush():      内容刷新(内容真正写入文件)

>>> f.flush()
>>>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1151098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

异步 AIMD 收敛

给出的一直都是同步 AIMD 收敛&#xff0c;所以简单&#xff0c;但不至于 bbr 单流情形退化成简陋。 给出一个异步 AIMD 收敛过程是必要的&#xff0c;可见&#xff0c;它同样是简洁优美的&#xff1a; 虽然我没有标注太多&#xff0c;它始终没有成为一团乱麻。 和同步 AIM…

Linux tar打包命令

Linux 系统中&#xff0c;最常用的归档&#xff08;打包&#xff09;命令就是 tar&#xff0c;该命令可以将许多文件一起保存到一个单独的磁带或磁盘中进行归档。不仅如此&#xff0c;该命令还可以从归档文件中还原所需文件&#xff0c;也就是打包的反过程&#xff0c;称为解打…

随机链表的复制(Java详解)

一、题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的…

英语——分享篇——常用人物身份

常用人物身份 家庭成员类 father 父亲 mother 母亲 grandmother&#xff08;外&#xff09;祖母 grandfather&#xff08;外&#xff09;祖父 son 儿子 daughter 女儿 uncle 叔叔&#xff0c;舅舅 aunt 婶母&#xff0c;舅母 brother 兄弟 sister 姐妹 nephew 侄子 niece…

Centos7下生成https自签名证书

1、安装openssl yum install openssl2、生成带密码的私有秘钥文件 openssl genrsa -des3 -out server.key 2048使用带密码的私有秘钥文件时需要输入密码&#xff0c;这里直接输入&#xff1a;123456 3、生成不带密码的私有秘钥文件 openssl rsa -in server.key -out serve…

考虑时空相关性的风电功率预测误差MATLAB代码

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 风电功率预测置信区间误差分析拟合 1.风电功率预测误差--时空相关性 展示第一一个时间段的风电功率预测与实际风电功率值的比较。填充区域表示预测的不确定性&#xff0c;显示了95%置信区间内预测可能的范围…

vulnhub momentum 靶机复盘

环境配置 到学校了 原来的桥接配置要改 这里记录几个点备忘 1.virtualbox 桥接 未指定 重新安装驱动VBoxNetLwf.inf 2.配置完靶机启动失败 手动安装VBoxNetLwf.inf 不要用virtualbox自带的netlwfinstall 3.配置完nmap扫不到 rw init/bin/bash 进去看看网卡配置 信息收集…

【Java系列】HashMap

HashMap 介绍HashMap 类提供了很多有用的方法添加键值对(key-value)创建一个字符串&#xff08;String&#xff09;类型的 key 和字符&#xff08;String&#xff09;类型的 value&#xff1a;访问元素删除元素删除所有键值对(key-value)可以使用 clear 方法&#xff1a;计算大…

基于SSM的养老院管理系统

基于SSM的养老院管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisVUE工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 摘要 养老院管理系统是一个基于SSM&#xff08;Spring、Spring MVC、MyBatis&…

基于SSM的航空订票系统

基于SSM的航空订票系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 用户界面 管理员界面 摘要 基于SSM的航空订票系统是一款面向旅客、航空公司和旅…

FreeRTOS_信号量之二值信号量

目录 1. 信号量简介 2. 二值信号量 2.1 二值信号量简介 2.1.1 二值信号量无效 2.1.2 中断释放信号量 2.1.3 任务获取信号量成功 2.1.4 任务再次进入阻塞态 2.2 创建二值信号量 2.2.1 vSemaphoreCreateBinary() 2.2.2 xSemaphoreCreateBinary() 2.2.3 xSemaphoreCrea…

初学编程需要什么基础,零基础学编程系统化编程课程之编程工具箱文件名称操作构件属性

初学编程需要什么基础&#xff0c;零基础学编程系统化编程课程之编程工具箱文件名称操作构件属性 上图为 该编程工具构件的基本属性和方法 编程系统化课程总目录及明细&#xff0c;零基础学中文编程视频教程&#xff0c;点击进入了解详情。 https://blog.csdn.net/qq_29129627/…

2023年阿里云双11有什么优惠活动?详细攻略来了!

随着双十一的临近&#xff0c;阿里云也正式开启了双11大促&#xff0c;推出了“金秋云创季”活动&#xff0c;那么&#xff0c;2023年阿里云双11的优惠活动究竟有哪些呢&#xff1f;本文将为大家详细介绍。 一、阿里云双11活动时间 1、2023年10月27日-2023年10月31日&#xff…

基于蝠鲼觅食算法的无人机航迹规划-附代码

基于蝠鲼觅食算法的无人机航迹规划 文章目录 基于蝠鲼觅食算法的无人机航迹规划1.蝠鲼觅食搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用蝠鲼觅食算法来优化无人机航迹规划。 …

前端HTML

文章目录 一、什么是前端前端后端 前端三剑客1.什么是HTML2.编写前端的步骤1.编写服务端2.浏览器充当客户端访问服务端​ 3.浏览器无法正常展示服务端内容(因为服务端的数据没有遵循标准)4.HTTP协议>>>:最主要的内容就是规定了浏览器与服务端之间数据交互的格式 3. 前…

“第五十五天”

定点数&#xff1a; 原码的乘法&#xff1a; 乘法的符号位是单独处理的&#xff08;通过对被乘数和乘数的符号位进行异或实现&#xff09;&#xff0c;数值位去绝对值进行运算。这里的乘法实际上是通过多次加法实现的。 这里被乘数是放在x寄存器&#xff0c;乘数放在MQ寄存器…

数据结构线性表——顺序表

前言&#xff1a;小伙伴们好久不见&#xff0c;从这篇文章开始&#xff0c;我们就要正式进入数据结构的学习啦。 学习的难度也将逐步上升&#xff0c;希望小伙伴们能够和博主一起坚持&#xff0c;一起加油&#xff01;&#xff01;&#xff01; 目录 一.什么是线性表 二.什么…

便利店超市怎么做一个实用的微信小程序?

近年来&#xff0c;微信小程序商城越来越受到商家的青睐&#xff0c;因为它不仅提供了便捷的在线购物体验&#xff0c;而且不需要安装额外的应用。对于零编程经验的初学者&#xff0c;制作一个小程序商城可能会感到有些困难&#xff0c;但不用担心&#xff0c;本文将引导你一步…

Netty复习:(2)IdleStateHandler的用法

一、handler定义&#xff1a; package handler;import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter;public class MyChatServerHandler3 extends ChannelInboundHandlerAdapter {Overridepublic void userEventTriggered(…

【实用教程】MySQL内置函数

1 背景 在MySQL查询等操作过程中&#xff0c;我们需要根据实际情况&#xff0c;使用其提供的内置函数。今天我们就来一起来学习下这些函数&#xff0c;在之后的使用过程中更加得心应手。 2 MySQL函数 2.1 字符串函数 常用的函数如下&#xff1a; concat(s1,s2,…sn)字符串…