Python教程:第1章(Python入门)

前言

就我个人而言,Python对于日常生活的影响之深已经涉及到了几乎所有方方面面.在这个系列课程中,我将带领各位一起走进Python的世界,体验数字世界.

教学安排

在此系列课程中,我将不定期持续更新Python相关的文章.同时,为了节省时间,省去了一些过于基础的内容,如变量/函数等,若有需要可以留言询问.本课程教学安排已发布在 目录展示 中,有需要可以前去查看.

第1章 Python入门

1.1文本文件IO处理

1.1.1 with函数

在Python启蒙是时候,我们知道Python中的变量可以用系统内存临时地存储数据,也大致知道了可以将一些数字放在一个text.txt文本文件中来长期储存.我们一般用的都是:

r=open("text.txt","r",enconding="utf-8")
doSome()
r.close()

但这样操作会凭空多出一句r.close(),有时忘记了还有可能造成栈溢出,因此我们可以使用如下内容:

with open("text.txt","r",encoding="utf-8") as r:
	doSome()

这样在with下缩进的代码执行结束后就会自动腾出r的空间,此时变量r仍然以读取器形式存在,但其相关命令不可再调用,否则报错:

ValueError: I/O operation on closed file.

这意味着text.txt已经不再消耗内存.
with函数也可以作用在一些其他变量中,但这里先不提及,在第二章中我们自会提到.

1.1.2 read模式命令复习

虽说read模式的三大命令read,readline, readlines在Python启蒙中一定已经被提到,但它们确实极其容易记混.So,让我们再来回顾回顾…
载入text.txt:

The first line
The second line

读取:

with open("text.txt","r",encoding="utf-8") as r:
	a=r.read() 
	b=r.readlines() 
	c=r.readline() 

结果:

a:"The first line\nThe second line"
b:["The first line\n","The second line"]
c:"The first line"

readreadlines方法没啥好讲的,一个返回单str,一个返回以\n结尾的str列表.那readline呢?好好回忆回忆,readline可以读取单行/单字符,也可以读取从头开始的__hint个字符.

1.2面向对象编程

1.2.1 什么是面向对象

从第一次学Python一来,我们就知道Python有很多变量的类型,如int float complex str bool list dict tuple _io.TextIOWrapper Stack Queue 等等.我们来看一个例子:

i=[{"1":"a","2":"b"},{1:"c",2:"d"},"e",3]

这个列表中包含了两个Group和两个Simple变量,我们需要一个特定的容器来储存这些信息,所以我们有了 类(class) 这个概念.一个类包含了一些固有属性和一些自身属性.
再举个例子.我们要存储三个人的信息:

名称年龄工作岗位工作时长·小时/天性别
A10student8F
B20worker9M
C30teacher12F

如果我们按照之前的方法,那个么应该是:

A=[10,{"student":8},"F"]
B=[20,{"worker":9},"M"]
C=[30,{"teacher":12},"F"]

虽说也没啥大问题,但不总觉得有些代码浪费吗?要多套很多层字典才能放下他们.但我们会发现打代码的时候费时费力,而且当数据量大时很难完成每个人的信息记录.但我们会发现他们都有共同的属性:年龄 职业 工作时间 性别.
所以我们可以创建一个类来快捷的保存他们.

class People(object):
#类名为People 继承(后面提到)Object类,即People为新式类
	def __init__(self,age,job,work_time,sex):
	#__init__函数为初始化函数,必须有该函数才能创建类和对象
	#这里四个变量即为他们的固有属性
		self.age=age
		self.job=job
		self.work_time=work_time
		self.sex=sex
		#将类People下的对象(也就是每一个个体)的属性赋值
	
	def ppr(self):
	#定义People类下的独有函数,self即为一个People类下的对象,有age,job等四个属性
		print(self.age)

A=People(10,"student",8,"F")
B=People(20,"worker",9,"M")
C=People(30,"teacher",12,"F")		

这样一来,我们虽看起来多写了很多东西,但当数据量较大时非常有利于储存.当我们在类内(也就是缩进块内)时可以直接用self调用People类下的对象及其属性.在外部调用方法时,需要加入类名.

In[0]: People.ppr(A)
Out[0]:10

1.2.2 类的继承

如果我们已经创建了类People,且创建好了其下对象的四个固有属性age,job,work_time,sex,那要是现在有两个人D/E,还有一个新的属性friend呢?如果要单独为D和E新创建一个类,那么前四个属性和方法也要重写,费时费力.我们可以直接去继承People类的属性,然后新建类.

class DE(People):
#新建类,但是继承People
	def __init__(self,age,job,work_time,sex,friend):
		super().__init__(age,job,work_time,sex)
		#用super方法直接调用父类People的属性
		#如果没有这一步还要手动打一遍self.age=age...
		self.friend=friend
		#创建DE类的特有属性friend
	
	def pr(self):
		print(self.friend)

D=DE(40,"none",0,"M",3)       
E=DE(50,"player",5,"M",5) 

这样就创建了D和E两个有属性friend的对象.然后我们调用:

In[1]: DE.pr(D)
Out[1]:3	

1.2.3 多继承

上一节我们讲了一个类可以继承另外一个类的属性,那可不可以继承两个呢?重复呢?
先例看看同时继承两个类的情况.

class cA(object):
	def __init__(self,a):
		self.a=a
	def AA(self):
		print(self.a)
class cB():
	def __init__(self,b):
		self.b=b
	def BB(self):
		print(self.b)

这两个类cAcB一个是新式类,一个是老式类,分别有属性a和属性b.那多继承…

class cC(cA,cB):
    def __init__(self, a,b):
        super().__init__(a,b)        
    def cp(self):
        print(self.b)
	
F=cC(1,2)

是这样吧?哎,不对!报错如下:

TypeError: __init__() takes 2 positional arguments but 3 were given

这是由于super方法只能调用第一个父类中的属性a,因此这样改就不会报错:

class cC(cA,cB):
    def __init__(self, a,b):
        super().__init__(a)     
        self.b=b
    def cp(self):
        print(self.b)
	
F=cC(1,2)

那这个继承下来的cB有何作用呢?可别忘了在这个类下定义的方法,这个方法任然是可以调用的:

In[2]: cB.BB(F)
Out[2]:2

1.2.4 常用继承类:Exception

在抛出错误时(还不知道什么是错误?没关系,马上讲!在2.1中我们就会讲到.)我们会用到如下代码:

raise ValueError("错误了")

这样可以自定义错误内容.但如何自定一个错误呢?换句话说,我想有一个自己的错误MyValueError呢?这里就要用到错误类Exception了.

class MyValueError(Exception):
	def __init__(self):pass
	#错误类没有属性,但必须进行__init__初始化.因此直接pass即可
	def __str__(self):
		print("我的一个错误")
		#错误内容

此时直接抛出即可.

raise MyValueError

报错:

Traceback (most recent call last):
  File "s:/cl2.py", line 27, in <module>
    raise MyValueError
我的一个错误
__main__.MyValueError: <exception str() failed>

到这里面向对象编程初步就学完了.下期再见~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值