7.千锋教育装饰器&偏函数与作用域与异常处理与文件读写----自制随堂笔记

装饰器

概念:
是一个闭包,把一个函数当做参数,返回一个替代版的函数,本质上就是一个返回函数的函数

简单的装饰器

def func1():
	print("sunck is a good man!")

def outer(func):
	def inner():
		print("**************")
		func()
	return inner
# f是函数func1的加强版

f = outer(func1)
f()

复杂一点的装饰器

def outer(func):
	def inner(age):
		if age < 0:
			age = 0
		func(age)
	return inner

# 使用@符号将装饰器应用到函数
# @python2.4 支持使用@符号
@outer      # 相当于  say = outer(say)
def say(age):
	print("sunck is %d years old" % (age))
say(-10)

通用装饰器

def outer(func):
	def inner(*args, **kwargs):
		
		# 添加修改的功能
		print("&&&&&&&&&&&")
		func(*args, **kwargs)
	return inner
@outer
def say(name, age):  # 函数的参数理论上是无限制的,但实际上最好不要超过6-7个
	print("my name is %s,I  am %d years old" % (name, age))
say("sunck", 18)

偏函数

import functools
# 偏函数
print(int("1010", base = 2))

# 偏函数
def int2(str, base = 2):
	return int(str, base)
print(int2("1011"))

# 把一个参数固定住,形成一个新的函数
int3 = functools.partial(int, base = 2)
print()

作用域:变量可以使用的范围

程序的变量并不是在所有位置都能使用的,访问的权限决定于变量在哪里赋值的

作用域:

#局部作用域
#全局作用域
#内建作用域int3(“111”))

异常处理

try······except······else

格式:
try:
语句t
except 错误码 as e:
语句1
except 错误码 as e:
语句2
···
except 错误码 as e:
语句n
else:
语句e
注意:
else语句可有可无

作用:
用来检测try语句块中的错误,从而让except语句捕获信息并处理

逻辑:
当程序执行到try-except-else语句时
1、如果当try”语句t“执行出现错误,会匹配第一个错误码,如果匹配上就执行对应的“语句”
2、如果当try“语句t”执行出现错误,没有匹配的异常,错误将会被提交到上一层的try语句。或者
3、如果当try“语句”没有出现错误,执行else下的“语句e”(你要有)

# print(3 / 0)
# 需求:当程序遇到问题不让程序结束,而越过错误继续向下执行

try:
	print(3 / 0)
except ZeroDivisionError as e:
	print("除数为0")
except NameError as e:
	print("没有该变量")
else:
	print("代码没有问题")
print("****************")


# 使用except而不使用任何的错误类型
try:
	#print(4 / 0)
	print(num)
except:
	print("程序出现了异常")


# 使用except带着多种异常
try:
	print(5 / 0)
except (NameError, ZeroDivisionError):
	print("出现了NameError或ZeroDivisionError")

特殊

1、错误其实是class(类),所有的错误都继承自BaseException,所以在捕获的时候,它捕获了该类型的错误,还把子类一网打尽

try:
	print(5 / 0)
except BaseException as e:
	print("异常1")
except ZeroDivisionError as e:
	print("异常2")

2、跨越多层调用:main调用了func2,func2调用了func1,func1出现了错误,这时只要main捕获到了就可以处理

def func1(num):
	print(1 / num)
def func2(num):
	func1(num)
def main():
	func2(0)
try:
	main()
except ZeroDivisionError as e:
	print("%%%")

try······except······finally
格式:
try:
语句t
except 错误码 as e:
语句1
except 错误码 as e:
语句2
······
except 错误码 as e:
语句n
finally:
语句f

作用:
语句t无论是否有错误都将执行最后的语句f


try:
	print(1/0)
except ZeroDivisionError as e:
	print("为0了")
finally:
	print("必须执行我")
print("asajhs")

断言

def func(num, div):
	assert (div != 0), "div不能为0"
	return num / div

print(func(10, 2))

文件处理

一、读文件

过程:
1、打开文件
2、读文件内容
3、关闭文件

打开文件

open(path, flag[, encoding][, errors])

path:要打开文件的路径
flag:打开方式
r 以只读的方式打开文件,文件的描述符放在文件开头
rb 以二进制格式打开一个文件用于只读,文件的描述符放在文件开头
r+ 打开一个文件用于读写,文件的描述符放在文件的开头
w 打开一个文件只用于写入,如果该文件已经存在会覆盖,如果不存在则创建新文件
wb 打开一个文件只用于写入二进制,如果该文件已经存在会覆盖,如果不存在则创建新文件
w+ 打开一个文件用于读写,如果该文件已经存在会覆盖,如果不存在则创建新文件
a 打开一个文件用于追加,如果文件存在,文件描述符将会放到文件末尾
a+ 打开一个文件用于读写,如果文件存在,文件描述符将会放到文件末尾

encoding:编码方式
errors:错误处理

# 一、打开文件
path = r"D:\python教程\千峰教育400集python教程sublime\first.py"
# ignore 忽略错误
# f = open(path, "r", encoding = "utf-8", errors = "ignore")
f = open(path, "r")


# 二、读文件内容
# 常用方法1、3、5
# 1、读取文件的全部内容
str1 = f.read()
print(str1)


# 2、读取指定字符数
str2 = f.read(10)
print("*" + str2 + "*")
str3 = f.read(10)
print("*" + str3 + "*")


# 3、读取整行,包括“\n”
str4 = f.readline()
print(str4)
str5 = f.readline()
print(str5)


# 4、读取指定字符数方法二
str6 = f.readline(10)
print(str6)

# 5、读取所有行并返回列表
list7 = f.readlines()
print(list7)

# 6、若给定的数字大于0,返回实际size字节的行数
list8 = f.readlines(22)
print(list8)


# 修改描述符的位置
print("***********")
f.seek(10)
str9 = f.read()
print(str9)


三、关闭文件

f.close()

一个完整的过程

try:
	f1 = open(path, "r", encoding = "utf-8")
	print(f1.read())
except:
	if f1:
		f1.close()

# 另一种写法.py
with open(path, "r", encoding = "utf-8") as f2:
	print(f2.read())

二、写文件

path = r"D:\python教程\千峰教育400集python教程sublime\first.py"
f = open(path, "a")
# 写文件
# 1、将信息写入缓冲区
f.write("sunck is a good man")

# 2、刷新缓冲区
# 直接把内部缓冲区的数据立刻写入文件,而不是被动的等待自动刷新
# 缓冲区写入
f.flush()

f.close()

# 简单写法
with open(path, "a") as f2:
	f2.write("goodman")

三、编码与解码

path = r"D:\python教程\千峰教育400集python教程sublime\file1.txt"
with open(path, "wb") as f1:
	str = "sunck is a good man凯"
	f1.write(str.encode("utf-8"))
# 
with open(path, "rb") as f2:
	data = f2.read()
	print(data)
	print(type(data))
	newData = data.decode("utf-8")
	print(newData)
	print(type(newData))

四、list/tuple/dict/set的文件操作

import pickle  # 数据持久性模块


myList = [1,2,3,4,5,"sunck is a good man!"]
path = r"D:\python教程\千峰教育400集python教程sublime\file6.txt"
f = open(path, "wb")

pickle.dump(myList, f)

f.close()
# 读取
f1 = open(path, "rb")
tempList = pickle.load(f1)
print(tempList)
f1.close

你可能感兴趣的:(python)