Python ☞ day 5

Python学习笔记之 装饰器& 偏函数 & 异常处理 & 断言 & 文件读写 &编码与解码

装饰器
  • 概念:是一个闭包,把一个函数当做参数,返回一个替代版的函数,本质上就是一个返回函数的函数。
#   简单的装饰器
def function1():
    print("lee is a good man!")

def function3(func):
    def inner():
        print("******************")
        func()
    return inner
#   f是函数function1的加强版本
f = function3(function1)
f()
#   复杂一点的装饰器
def outer(func):
    def inner(age):
        if age < 0:
            age = 0
        func(age)
    return inner

#   使用@函数将装饰器应用到函数
#   python2.4开始支持使用@符号
@outer
def say(age):
    print("lee is %d years old" % (age))
say(-15)
#   通用装饰器

'''
#   固定格式
def outer(func):
    def inner(*args,**kwargs):
        #添加修改的功能
        pass
        func(*args,**kwargs)
    return inner
'''
import time
def outer(func):
    def inner(*args,**kwargs):
        #添加修改的功能
        startTime = time.time()
        time.sleep(1)
        print("&&&&&&&&&&&&&&")
        func(*args,**kwargs)
        endTime = time.time()
        print("执行该函数总共花了 %f" %(endTime - startTime))
    return inner

@outer
def say(name,age):  #函数的参数理论上是无限制的,但实际上最好不要超过6~7个
    print("my name is %s, I am %d years old" %( name,age))
say("lee", 18)
偏函数
import functools
#   print(int("123", base = 10))
#   偏函数
def int2(str, base = 2):
    return int(str,base)

print(int2("1010"))

#   把一个参数固定住,形成一个新的函数
int3 = functools.partial(int, base = 2)
print(int3("1010"))
异常处理
  • 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”(你得有)

'''
try:
    #print(3 / 0)
    #print(num)
    print(4 / 2)
except NameError as e:
    print("没有该变量")
except ZeroDivisionError as e:
    print("除数为0了")
else:
    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("*****")
  • 断言
# 断言
def func(num,dev):
    assert (dev != 0), "dev 不能为0"
    return num / dev

print(func(10,0))
文件读写
  • 读文件
    过程:
    1、打开文件
    2、读文件内容
    3、关闭文件
  • 打开文件
打开文件
open(path, flag[, encoding][, errors])
path:要打开文件的路径
flag:打开文件的方式
r   以只读的方式打开文件,文件的描述符放在文件的开头   
rb  以二进制格式打开一个文件用于只读,文件的描述符放在文件的开头
r+  打开一个文件用于读写,文件的描述符放在文件的开头
w   打开一个文件只用于写入,如果该文件已经存在会覆盖,如果不存在则创建一个新文件
wb  打开一个文件只用于写入二进制,如果该文件已经存在会覆盖,如果不存在则创建一个新文件
w+  打开一个文件用于读写,如果该文件已经存在会覆盖,如果不存在则创建一个新文件
a   打开一个文件用于追加,如果文件存在,文件描述符将会放在文件末尾
a+  
encoding:编码格式
errors:错误处理

path = r"C:\Users\yanji\Desktop\day7\file1.txt"

#ignore  忽略错误
f = open(path, "r",encoding="gbk")
  • 读文件内容
读文件内容
# 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(20)
print(list8)

# 7、修改描述符的位置
f.seek(10)
str9 = f.read()
print(str9)
  • 关闭文件
    f.close()
#   一个完整的过程
try:
    f1 = open(path,"r", encoding="gbk")
    print(f1.read())
finally:
    if f1:
        f1.close()
with open(path,"r",encoding="gbk") as f2:
    print(f2.read())
  • 写文件
path = r"C:\Users\yanji\Desktop\day7\file4.txt"
f = open(path,"w")

#   1、将信息写入缓冲区
f.write("lee is a good man")

#   2、刷新缓冲区
#   直接把内部缓冲区的数据立刻写入文件,而不是被动的等待自动刷新缓冲区写入
f.flush()
f.write("lee is a good man\n")
f.close()

with open(path,"a") as f:
    f.write("good man")
  • 编码与解码
#   编码
path = r"C:\Users\yanji\Desktop\day7\test1"
with open(path,"wb") as f3:
    str = "lee is a good man"
    f3.write(str.encode("utf-8"))
with open(path,"rb") as f2:
    data = f2.read()
    print(data)
    print(type(data))
    newDate = data.decode("utf-8")
    print(newDate)
    print(type(newDate))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,912评论 17 410
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,545评论 1 118
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 定义类并创建实例 在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类...
    绩重KF阅读 3,923评论 0 13
  • 楔子二 公元前174的春天,匈奴冒顿单于致书南边汉朝的皇帝汉文帝,汉...
    毅源阅读 441评论 0 2