装饰器和偏函数
(一)装饰器
概念:是一个闭包。把一个函数当做参数返回一个替代版的函数,本质就是一个返回函数的函数。
1.简单的装饰器
def func1():
print("kaixinjiuhao")
def outer(func):
def inner():
print("*****************")
func()
return inner
f = outer(func1)
f()
2.通用装饰器
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("shuaige", 21)
3.复杂装饰器
(1)方法一
def say(age):
print("kaixin %d jiuhao" % (age))
say(10)
def outer(func):
def inner(age):
if age < 0:
age = 0
func(age)
return inner
say =outer(say)
say(-10)
(2)方法二
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("kaixin %d jiuhao" % (age))
say(-10)
(二)偏函数:
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"))
(三)变量的作用域
作用域:变量可以使用的范围。程序中的变量并不是在所有位置都能使用的,访问的权限决定于变量在哪里赋值的。
作用域分类:
局部(函数)作用域:
全局作用域:
内建作用域:
(四)异常处理
需求:当程序遇到问题时,不让程序结束,而可以越过程序向下执行。
1.分类:
(1) try……except…..else
(2) try……except…..fanilly
2.格式
(1) 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语句t执行没有错误,执行else下的语句e(你得有语句e)
(2) try……except…..fanilly
try:
语句t
except 错误码 as e:
语句1
.......
except 错误码 as e:
语句2
.......
except 错误码 as e:
语句n
finally:
语句f
作用:语句t无论有没有错误,都会执行最后的语句f
(五)读文件
过程:
1.打开文件
open(path, flag[, encoding][, errors])
path:要打开文件的路径
flag:打开方式
r 以只读的方式打开文件,文件的描述符放在文件的开头。
rb 以二进制格式打开一个文件只读,文件描述符放在开头。
r+ 打开一个文件用于读写,文件描述符放在文件的开头。
w 打开一个文件用于写入,如果该文件已经存在则会覆盖,如果不存在则创建新文件。
wb 打开一个文件值用于写入二进制,如果该文件已经存在则会覆盖,如果不存在则创建新文件。
w+ 打开一个文件用于读写,如果该文件已经存在则会覆盖,如果不存在则创建新文件。
a 打开一个文件,用于追加。如果文件存在,则文件描述符会放到文件末尾。
a+ 打开一个文件,用于追加。如果文件存在,则文件描述符会放到文件末尾。
2.读文件内容
(1) 读取文件的全部内容
(2) 读取指定字符数
(3)读取整行
(4)读取所有行兵返回列表
3.关闭文件