import os
# 打开画图工具
os.system("C:\Windows\system32\mspaint.exe")
# 修改文件名
os.rename(r"E:\Code\a.txt",r"E:\Code\b.txt")
# 读取文件
file=open(r"E:\Code\test.txt")
print(file.read())
file.close() # 文件操作完毕后,一定要关闭文件IO资源
类和继承
class Animal(object):
def __init__(self, color):
self.color = color
def eat(self):
print("动物在吃!")
def run(self):
print("动物在跑")
class Cat(Animal):# Cat类继承Animal类
pass
cat = Cat("黄色")
print(cat.color)
print(cat.eat)
class Dog(Animal):
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print("狗在啃骨头!")
dog = Dog("小黑", 10)
print(dog.eat()) # 有子类,输出子类的值
print(dog.run()) # 没有子类,输出父类的值
8-1异常
- 我们都知道分母不能为0,所以
3/a[2]=a/0
就会出现错误。当没有try时,代码就会停止运行。而try except表示有错误时还是会继续执行,e表示错误语法。
a = [12, 43, 0, 46, "a", 76]
for i in a:
try: #写可能会报错或出现异常的代码
print(3/i)
except Exception as e: #捕获try语句的异常e,except无论语法是否错误都会执行
print("出现错误,错误是:",e) #出现异常时执行的语句
else:
print("正常") #没有异常时执行的语句
finally:
print("结束") #无论是否有异常,都会执行的语句(每次都会执行)
8-2常见错误和异常
- NameError:这是比较常见的一个错误,就是没有定义变量就把它拿来用。
- SyntaxError:这是语法错误,少了个冒号,没有空格等,都会出现这个错误。
- I0 Error:在做文件操作的时候常遇到的错误,例如文件操作的时候文件不存在。
- qZeroDivisionError:在做数据处理和计算的时候会遇到这种错误就是除数是0。
- IndentationError:这是新手常遇到的一种错误,就是缩进问题啦。
8-3抛出自定义异常
pwd = "123456"
if len(pwd) < 8:
ex = Exception("密码不能低于8位数!")
raise ex #抛出异常
else:
print("密码错误")
11-1进程
- 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程则是在处理机上的一次执行过程,它是一个动态的概念。这个不难理解,其实进程是包含程序的,进程的执行离不开程序,进程中的文本区域就是代码区,也就是程序。
- 进程就是一段程序的执行过程。 它是一个具有-定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
- 简单的来讲进程的概念主要有两点:第一,进程是一个实体。 每一个进程都有它自己的地址空间,一般情况下,包括文本区域(textt2region)、数据区域(data region) 和.堆栈(stack region) 。文本区域存储处理器执行的代码:数据区域存储变量和进程执行期间使用的动态分配的内存,堆栈区域存储着活动过程调用的指令和本地变量。第二二 ,进程是一个“执行中的程序”。程序是-个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
- 进程有三个状态,就绪、运行和阻塞。
- 就绪态:其实就是获取了除gpu外的所有资源,只要处理器分配资源就可以马上执行。
- 运行态:获得了处理器分配的资源,程序开始执行。
- 阻塞态:当程序条件不够时候,需要等待条件满足时候才能执行,如等待i/o操作时候,此刻的状态就叫阻塞态。
- 进程与线程的区别
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
1)简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
2)线程的划分尺度小于进程,使得多线程程序的并发性高。
3)另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4)线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5)从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区
11-3多线程
- Python的标准 库提供了两个模块:_thread和 threading,_thread是低级模块,threading是高级模块,对thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。
- 启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行。最后执行的时候大约为5秒。
import imp
import threading
import time
def run(name):
print(name,"线程执行了")
time.sleep(5)
#创建线程
t1 = threading.Thread(target=run, args=("001",))
t2 = threading.Thread(target=run, args=("002",))
#启动线程
t1.start()
t2.start()
11-8实例-景区卖票
import threading
lock = threading.Lock()
num = 100
# 卖票
def sale(name):
lock.acquire() #线程锁
global num
if num > 0:
num = num - 1
print("卖出一张票,还剩",num,"张!")
lock.release() #释放锁
# 售票窗口(2个线程表示)
while 1==1:
if num > 0:
ta = threading.Thread(target=sale,args=("A窗口",)) #线程a
tb = threading.Thread(target=sale,args=("B窗口",)) #线程b
ta.start() #启动线程a
tb.start()
else:
break
print("票已经卖完!")
13-1日期和时间类型
- 获取当前的日期:
datetime.datetime.now()
,得到的日期2022-03-31 10:33:37.952499
- 获取当前的年、月、日、时、分、秒
- 年:
year = datetime.datetime.now().year
- 月:
month = datetime.datetime.now().month
- 日:
day = datetime.datetime.now().day
- 时:
our = datetime.datetime.now().hour
- 分:
minute = datetime.datetime.now().minute
- 秒:
second = datetime.datetime.now().second
- 获取一个指定日期:
datetime.datetime(年, 月, 日, 小时, 分钟, 秒)
- 日期转字符串:
datetime.datetime.now()
,获取现在的时间。注意%Y-%m-%d %H:%M:%S
区分大小写
- 字符串转日期:
datetime.datetime.strptime(字符, 日期格式)
,%Y-%m-%d %H:%M:%S
和上面s的字符对应,%Y
读取年份...
import datetime
# 获取当前的日期
now = datetime.datetime.now()
print("now:",now)
# 获取当前的年、月、日、时、分、秒
year = datetime.datetime.now().year
month = datetime.datetime.now().month
day = datetime.datetime.now().day
hour = datetime.datetime.now().hour
minute = datetime.datetime.now().minute
second = datetime.datetime.now().second
print("year:",year,"\tmonth:",month,"\tday:",day)
print("hour:",hour,"\minute:",minute,"\tsecond:",second)
# 获取一个指定日期
d = datetime.datetime(2022, 3, 31, 8, 30)
print("d:",d)
# 日期转字符串
now = datetime.datetime.now() #获取现在的时间
d = now.strftime("%Y-%m-%d %H:%M:%S")
print("now:",now,"\td:",d)
# 字符串转日期
s = "2022-3-31 10:31:00"
d = datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
print("d:",d,"\t类型:",type(d))
13-2json
# json
# {key:value, key:value}
import json
# json转字典
j = '{"city":"北京", "name":"熊猫"}'
print("type:",type(j),"\tj:",j)
p = json.loads(j)
print("type:",type(p),"\tp:",p)
# 字典转json
dict = {"city":"北京", "name":"熊猫"}
s = json.dumps(dict, ensure_ascii=False)
print("type:",type(s),"\ts:",s)
13-3编码和解码
- py3中字符串的两种类型,bytes,str。str存储unicode类型,bytes存储byte类型。
# 编码
a = "我爱中国" # 默认是unicode类型
byte = a.encode("utf-8") #字符串转byte称为编码
print(byte)
# 解码:byte转字符串(unicode)
str = byte.decode("utf-8") #注意编码方式和解码方式要一致
print(str)