python基础(文件、异常、模块、类、对象)

文件:

  • 打开文件使用open函数,open()的第一个参数是:要打开文件的路径,如果只传入文件名那么将在当前文件下查找文件并打开。第二个参数是:文件的打开模式,其他参数都是默认的。文件的打开模式如下图所示:

在这里插入图片描述

f=open('C:\\Users\\Lenovo\\Desktop\\test.txt','r')
f#这个f是文件对象
<_io.TextIOWrapper name='C:\\Users\\Lenovo\\Desktop\\test.txt' mode='r' encoding='cp936'>
#这里name是取自的路径,mode是打开的模式,encoding是编码格式

文件的读取操作:

需要用到以下几个文件对象方法:
在这里插入图片描述

f=open('C:\\Users\\Lenovo\\Desktop\\test.txt','rt',encoding="utf-8")
以只读文本模式打开文件,编码是utf-8
str3=f.read()
str3
'年后ijrgwingjnvjnjfdnv困难克服斯诺克女可男可女开心呢可能可男可女可能可男可女 可能发生空空死你女那oadnfkln'
f.tell()
144#文件光标的位置,打开开文件时,光标在文件头,进行读取操作后光标会发生移动
f.seek(0,0)
0#将光标移动到文件的头
f.close()#关闭文件f=open('C:\\Users\\Lenovo\\Desktop\\test2.txt','w',encoding="utf-8")
str4="这是一个新文件"
f.write(str4)#返回写入文件的字节数
7
f.close()
#写完后关闭后才会写入,不关闭存在缓冲区里面想要将文件里的内容迭代输出的话可以使用for循环
方法一:先将文件对象转化为序列再输出
for each in list(b):print(each)这是一个新文件这是一个新文件这是一个新文件这是一个新文件这是一个新文件方法二:直接对文件对象进行操作(推荐使用)
for each in b:print(each)这是一个新文件这是一个新文件这是一个新文件这是一个新文件这是一个新文件

模块:

  • 模块就是可用代码段的打包,模块是一个包含你所定义的所有函数和变量的文件,后缀是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。
  • 我们所知道常用的操作系统就有:Windows、Mac OS、Linux、UNIX等,这些操作系统底层对于文件系统的访问工作原理是不一样的,因此你可能就要针对不同的操作系统来考虑使用哪些文件系统模块,这样的做法非常不友好且麻烦,因为这样意味着当你的程序运行环境一改变,你就要相应的去修改大量代码来应付。那么有了OS模块,我们不需要关心什么操作系统下使用什么模块,OS模块会帮助你选择正确的模块并调用。

os模块中关于文件/目录常用的函数使用方法

pickle模块:

这个模块几乎可以将prthon的对象转化为二进制的形式取放字节流。
存放:picking,读取:unpicking,pickle模块的使用:

my_list=["123",123,["hello",3.14]]
my_list
['123', 123, ['hello', 3.14]]
pick_file=open("C:\\Users\\Lenovo\\Desktop\\","wb")#注意要使用wb的方式创建文件
pickle.dump(my_list,pick_file)#将列表以二进制的方式存入到文件中
pick_file.close()#关闭该文件,只有关闭后才会保存到文件中去如果要读取的话:
pick_file=open("C:\\Users\\Lenovo\\Desktop\\test.pkl","rb")#先将文件以二进制可读的方式打开
my_list2=pickle.load(pick_file)#文件利用load读取到my_list2列表
my_list2
['123', 123, ['hello', 3.14]]

异常处理:

Python标准异常总结

  • AssertionError 断言语句(assert)失败
  • AttributeError 尝试访问未知的对象属性
  • EOFError 用户输入文件末尾标志EOF(Ctrl+d)
  • FloatingPointError 浮点计算错误
  • GeneratorExit generator.close()方法被调用的时候
  • ImportError 导入模块失败的时候
  • IndexError 索引超出序列的范围
  • KeyError 字典中查找一个不存在的关键字
  • KeyboardInterrupt 用户输入中断键(Ctrl+c)
  • MemoryError 内存溢出(可通过删除对象释放内存)
  • NameError 尝试访问一个不存在的变量
  • NotImplementedError 尚未实现的方法
  • OSError 操作系统产生的异常(例如打开一个不存在的文件)
  • OverflowError 数值运算超出最大限制
  • ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
  • RuntimeError 一般的运行时错误
  • StopIteration 迭代器没有更多的值
  • SyntaxError Python的语法错误
  • IndentationError 缩进错误
  • TabError Tab和空格混合使用
  • SystemError Python编译器系统错误
  • SystemExit Python编译器进程被关闭
  • TypeError 不同类型间的无效操作
  • UnboundLocalError 访问一个未初始化的本地变量(NameError的子类)
  • UnicodeError Unicode相关的错误(ValueError的子类)
  • UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)
  • UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)
  • UnicodeTranslateError Unicode转换时的错误(UnicodeError的子类)
  • ValueError 传入无效的参数
  • ZeroDivisionError 除数为零

程序运行过程中可能会抛出某些异常,但是这些异常不会使程序崩溃。那么如何检测和处理这些异常呢?

  • 异常的检测可以使用try语句,try语句捕获到异常时,异常后面的语句将不会被执行会被跳过。
    在这里插入图片描述
    栗子:
try:f=open("hhhh.txt")print(f.read())f.close()
except OSError:print("文件出错")如果使用as reason这个可选的参数:
try:f=open("hhhh.txt")print(f.read())f.close()
except OSError as reason:print("文件出错\n错误的原因是:"+str(reason))文件出错
错误的原因是:[Errno 2] No such file or directory: 'hhhh.txt'要捕获多个异常(try语句捕获到异常时,异常后面的语句将不会被执行会被跳过,所以第二个异常没有被打印):
try:sum=1+'1'f=open("hhhh.txt")print(f.read())f.close()
except OSError as reason:print("文件出错\n错误的原因是:"+str(reason))
except TypeError as reason:print("类型出错\n错误的原因是:"+str(reason))类型出错
错误的原因是:unsupported operand type(s) for +: 'int' and 'str'以下方式可以检测多个异常:
try:sum=1+'1'f=open("hhhh.txt")print(f.read())f.close()
except (OSError,TypeError):print("出错")如果想只要程序中出现异常,不管是什么类型的都有提示,可以这样做(不推荐):
try:sum=1+'1'f=open("hhhh.txt")print(f.read())f.close()
except:print("出错")
  • 另一个实现方式
    在这里插入图片描述

栗子:

try:f=open("C:\\Users\\Lenovo\\Desktop\\hhhh.txt","w")sum=1+'1'f.close()
except (OSError,TypeError):print("出错")
finally:#这里面的语句无论如何都会被执行f.close()#防止因异常退出而文件没有被关闭,而导致数据丢失
  • 可以使用raise语句自己引发一个异常,只需要在raise后面加上一个异常的名称就好。例如:raise ZeroDivisionError引发除0异常。也可以:raise ZeroDivisionError("除数为0")

丰富的else语句:
else语句可以和if语句配合使用:要么怎样,要么不怎样。还可以和while、for循环语句搭配使用:干完了能怎样,干不完就别想怎样。还能和异常处理语句搭配使用:没有问题就干吧。

  • 当else和循环配合使用的话,如果循环里面的代码正常的执行完,没有使用break等退出,则会执行循环外else后面的代码。
while:正常退出
else:这里会被执行,否则不被执行
  • 只要try语句块里面没有出现任何的异常,将会执行else里面的语句
try:int("abc")
except ValueError as reason:print("出错了"+str(reason))
else:print("没有任何异常")

简洁的with语句:
with在你使用完文件忘记关闭后,with语句就会帮助你关闭。

try:with open("hhhh.txt")as fd:#fd是文件标签print(f.read())#注意代码的缩进with下面要将代码缩进
except OSError as reason:print("文件出错\n错误的原因是:"+str(reason))

对象:
对象就是属性加方法,静态的特征称为属性,动态行为称为方法。在pyhton中约定类名以大写字母开头,函数以小写字母开头,注意: 如果属性的名字和方法相同,属性会将方法覆盖掉。那么:1、不要试图在一个类里面定义出所有能想到的特性和方法,应该利用继承和组合机制进行扩展。2、用不同的词性命名,如属性用名词,方法名用动词。

类的定义:

class Turtle:#属性color="green"weight=10#方法def climb(self):#self相当于C++的this指针,在python中定义类的时候默认self作为第一个参数print("爬行")t=Turtle()#生成类对象,创建类的实例对象
t.climb()#适用类方法

继承:

是子类自动共享父类之间数据和方法的机制,子类继承父类所有的属性和方法,如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性,对父类不受影响,当子类重写父类的构造方法时,如果还想有父类的功能,那么有两种方法:1、调用未绑定的父类方法(只需要在子类构造方法中,写上父类的名字.构造方法名称,调用父类的构造函数即可)2、使用super函数(只需要在子类构造方法中通过super函数调用父类的构造方法即可:surper().__init__(),括号里面self也不用写)。多重继承: 一个子类继承多个父类,写法:class Son(father1,father2,.....)

class MyList (list):pass
#pass表示占位符,表示不做任何事情,list表示继承list>>> class Parent:def hello(self):print("父类方法在子类中被调用")>>> class Son(Parent):pass>>> 
>>> d=Son()
>>> d.hello()
父类方法在子类中被调用>>> class Son(Parent):def hello(self):print("子类覆盖父类方法")>>> C=Son()
>>> C.hello()
子类覆盖父类方法

多态: 不同对象对同一方法响应不同的行动。也就是不同类里面定义方法的名相同但是方法的内容不同。

>>> class First:def func(self):print("hello")>>> class Second:def func(self):print("你好")>>> a=First()
>>> a.func()
hello
>>> b=Second()
>>> b.func
>>> b.func()
你好
>>> 

构造函数: 需要用到函数_ _init_ _(self)方法,在对象实例化时,传入参数,可以重写_ _init_ _(self)方法来初始化对对象的操作。

class New:def _init_(self,name):self.name=namedef func(self):print("%s爬"%self.name)
>>> b=New("给我")
>>> b.func()
给我爬

公有和私有:

在pyhton中没有像c++一样的关键字来说明公有还是私有。默认对象的属性和方法都是公有的可以通过.操作符访问,为了实现私有变量的特征,python内部采用了name mangling(名字改编,名字重整)技术,在python中定义私有变量只需要在变量名或者函数名前加上_ _两个下划线,那么这个函数或变量就会为私有的了。这样外部就无法访问到了。

>>> class New:__name="小鱼酱"#私有的def func(self):return self.__name>>> a=New()
>>> a.func()
'小鱼酱'
>>> a._New__name#其实python的私有机制是伪私有,可以通过这种方式访问私有变量
'小鱼酱'
>>> 

组合:把类的实例化给放到新类里面,这样就把旧类组合进去了

class Turtle:def __init__(self,x):self.num=x
class Fish:def __init__(self,x):self.num=x
class Pool:def __init__(self,x,y):self.turtle=Turtle(x)#turtle是乌龟的实例化对象self.fish=Fish(y)#fish是小鱼的实例化对象def print_num(self):print("水池里总共乌龟有%d只,小鱼%d只"% (self.turtle.num,self.fish.num))>>> pool=Pool(1,10)
>>> pool.print_num()
水池里总共乌龟有1只,小鱼10

什么是绑定?
python严格要求方法需要有实例才能被调用,这种限制其实就是python所谓的绑定概念。

一些与类相关的BIF:

  • issubclass(class,classinfo)如果class是classinfo的一个子类,那么返回True,注意:一个类被认为是其自身的子类,classinfo可以是类对象组成的元组,只要class是其中任何一个候选的子类,则返回True。所有类默认继承自object。
  • isinstance(object,classinfo)用来检查一个实例对象是否属于一个类,第一个参数是实例对象,第二个参数类,同样第二个参数也可以是元组,元组里面有多个类,属于则返回True否则返回False
  • hasattr(object,name)用来测试一个对象里面是否有指定的属性,第一个参数是对象,第二个参数是指定的属性名,注意:要检查的属性名要用字符串括起来,否则编译器会将其认为变量可能引发异常
  • getattr(object,name[,default])用来返回对象指定的属性值,如果属性不存在同时又没有设置default的值,那么她会抛出异常,如果有设置default的值则会打印default的值。
  • setattr(object,name,value)用来设置对象中指定属性的值,如果属性不存在,它会新建这个属性并且给他赋值,属性同样要加单引号。
  • delattr(object,name)用来删除对象中指定的属性,如果属性不存在则抛出异常。
  • property(fget=None,fset=None,fdel=None,doc=None)是用来通过属性设置属性,返回值是一个属性。第一个参数是获得属性的方法,第二个参数是设置属性的方法,第三个参数是删除属性的方法。使用如下图:
    在这里插入图片描述小甲鱼干货

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

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

相关文章

redis 和 memcached 的区别

redis 和 memcached 的区别 对于 redis 和 memcached 我总结了下面四点。现在公司一般都是用 redis 来实现缓存&#xff0c;而且 redis 自身也越来越强大了&#xff01; redis支持更丰富的数据类型&#xff08;支持更复杂的应用场景&#xff09;&#xff1a;Redis不仅仅支持简…

树莓派入门(树莓派登录的几种方式)

什么是嵌入式&#xff1f; 嵌入式即嵌入式系统&#xff0c;IEEE&#xff08;美国电气和电子工程师协会&#xff09;对其定义是用于控制、监视或者辅助操作机器和设备的装置&#xff0c;是一种专用的计算机系统。国内普遍认同的嵌入式系统定义是以应用为中心&#xff0c;以计算…

Linux库概念及相关编程(动态库、静态库、环境变量)

分文件编程&#xff1a; 好处&#xff1a;分模块编程思想&#xff0c;功能和责任划分清楚便与调试&#xff0c;main函数简洁&#xff0c;代码易于阅读。编程时头文件有的是使用<>这个符号括起来的&#xff0c;有的是" "使用的是双引号&#xff0c;使用尖括号括…

kali扫描内网ip_Metasploit路由转发实现内网渗透

利用背景在渗透的过程中常常会遇到这种场景&#xff1a;我们已经通过web渗透拿下一台内网服务器&#xff0c;为了进一步进行内网渗透&#xff0c;我们会利用“沦陷主机”作为跳板进行进一步的内网渗透&#xff0c;扩大战果。现在假设的场景是此时我们已经拿下一台内网服务器的远…

.NET Core 3.0 中的新变化

译者&#xff1a;楚人Leo译文&#xff1a;http://www.cnblogs.com/leolion/p/10585834.html原文&#xff1a;https://msdn.microsoft.com/en-us/magazine/mt848631.aspx.NET Core 3.0 是 .NET Core 平台的下一主要版本。本文回顾 .NET Core 发展历史&#xff0c;并展示了它是如…

树莓派GPIO口的使用(外设相关开发WringPi库的使用,超声波、继电器)

树莓派的接口&#xff1a; 大而简单的类别&#xff1a;IO口&#xff0c;input和output是相对于主控芯片来说的&#xff0c;是根据MCU和外设之间的关系将IO口的功能分为output和input。当IO作为input使用时外设有&#xff1a;人体传感器、烟雾传感器、火焰传感器、振动传感器等…

volatile指令重排_有多少人面试栽到Volatile上?面试问题都总结到这儿了

Volatile关键字volatile 是Java虚拟机提供的 轻量级 的同步机制.何为 轻量级 呢&#xff0c;这要相对于 synchronized 来说。Volatile有如下三个特点。要搞清楚上面列举的名词 可见性 原子性 指令重排 的含义我们需要首先弄清楚JMM(Java内存模型是怎么回事)JMM规定了内存主要划…

Dubbo核心概念

节点角色规范 节点角色规格Provider提供者公开远程服务Consumer消费者致电远程服务Registry注册表负责服务发现和配置Monitor监视器计算服务调用的数量和耗时Container容器管理服务的生命周期 服务关系 Container负责启动&#xff0c;加载和运行服务Provider。ProviderRegiste…

良心推荐11款可以称得上“神器”的Windows工具集合

1、最快文件搜索工具 Everything&#xff1a;当之无愧的最强本地文件搜索神器&#xff0c;搜索任何关键词基本是秒速出现&#xff0c;比Windows自带的搜索快了太多&#xff0c;电脑文件比较多的人必备&#xff01; 2、专业软件卸载器 Revo Uninstaller Pro&#xff1a;Windows电…

LD3320语音识别模块二次开发及与树莓派间的通讯

实物图如下&#xff1a; 一般这种模块的资料厂家都会给&#xff0c;需要的话可以私信我发邮箱&#xff0c;下面介绍该模块的各种参数。型号&#xff1a;YS-LDV7名称&#xff1a;一体化语音识别模块规格&#xff1a;43*29.7MM供电电压&#xff1a;5V &#xff08;内部工作电压…

多生产者_你是生产者还是消费者?这决定了你的层次。

不知道你有没有注意到&#xff0c;每天乘坐地铁上下班的时候&#xff0c;大部分人都在刷剧、看视频、打游戏等等&#xff0c;总之都属于玩乐。用生产和消费的关系来看的话&#xff0c;其实这一大部分人都属于消费者&#xff0c;“时间和注意力”是他们用于交换的筹码&#xff1…

eclipse Android 开发基础 Activity 窗体 界面

eclipse Android 开发基础 新建工程 新建布局layout,new Android Activity就相当于窗体Form。 新建Activity自动生成src下同名的java代码。 public class Tform2activity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(saved…

8 种常被忽视的 SQL 错误用法

来源&#xff1a;http://t.cn/R6UMaA11、LIMIT 语句2、隐式转换3、关联更新、删除4、混合排序5、EXISTS语句6、条件下推7、提前缩小范围8、中间结果集下推总结sql语句的执行顺序&#xff1a;FROM <left_table>ON <join_condition><join_type> JOIN <right…

变频器按启动没反应_起重机软启动柜晶闸管损坏维修几大故障

缺相保护功能&#xff1a;工作时&#xff0c;软起动器随时检测三相线电流的变化&#xff0c;一旦发生断流&#xff0c;即可作出缺相保护反应。过热保护功能&#xff1a;通过软起动器内部热继电器检测晶闸管散热器的温度&#xff0c;一旦散热器温度超过允许值后自动关断晶闸管&a…

Redis 的各项功能解决了哪些问题?

作者丨blackheart先看一下Redis是一个什么东西官方简介解释到&#xff1a;Redis是一个基于BSD开源的项目&#xff0c;是一个把结构化的数据放在内存中的一个存储系统&#xff0c;你可以把它作为数据库&#xff0c;缓存和消息中间件来使用。同时支持strings&#xff0c;lists&am…

RocketMQ集成SpringBoot

RocketMQ集成SpringBoot RocketMQ总体架构 RocketMQ基本特性

ASP.NET Core 2.2+Quartz.Net 实现Web定时任务

作者&#xff1a;Julian_酱链接&#xff1a;http://www.cnblogs.com/mi12205599/p/10361763.html作为一枚后端程序狗&#xff0c;项目实践常遇到定时任务的工作&#xff0c;最容易想到的的思路就是利用Windows计划任务/wndows service程序/Crontab程序等主机方法在主机上部署定…

RocketMQ核心概念

生产者Producer和消费者Consumer NameServer作用 Broker和Topic

交叉编译、软硬链接

什么是交叉编译&#xff1f;交叉编译是一个行为&#xff0c;是在一个平台上生成另一个平台上的可执行代码。 本地编译&#xff1a;本地编译可以理解为&#xff0c;在当前编译平台下&#xff0c;编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发&#xff0c;都是…