装饰器&偏函数与作用域与异常处理与文件读写
装饰器
概念:是一个闭包,把一个函数当做参数返回一个替代版的函数,本质上就是一个返回函数的函数
简单的装饰器
def func1(): print("sunck is a good man") def outer(func): def inner(): print("*** ** * * ***") func() return inner #f是函数func1的加强版本 f = outer(func1) f()
复杂一点的装饰器
def say(name): print("%s is a good name" % (name)) def outer(func): def inner(age): if age<0: age = 0 func(age) return inner 使用@符号将装饰器应用到函数 @outer #相当于say = outer(say) say(-10)
通用装饰器
def outer(func): def inner(*args, **kwargs): #添加修改的功能 print("&&&&&&&&&&&") func(*argc,**kwargs) return inner @outer def say(name,age): #函数的参数理论上是无限制的,但实际上最好不要超过6、7个 print("my name is %s,I am %d years old" % (name,age)) say("xiaoxin",18)
偏函数
import functools #把一个参数固定住,形成一个新的函数 int3 = functools.partial(int,base = 2) int3("") 把111当成2进制转成十进制 值为7
变量的作用域
作用域:变量可以使用的范围
程序的变量并不是再所有位置都能使用的,访问的权限决定于变量的在哪里赋值的
作用域:
局部作用域
- 局部变量是指在函数内部定义并使用的变量,它只在函数内部有效。
- 每个函数在执行时,系统都会为该函数分配一块“临时内存空间”,所有的局部变量都被保存在这块临时内存空间内。当函数执行完成后,这块内存空间就被释放了,这些局部变量也就失效了,因此离开函数之后就不能再访问局部变量了,否则解释器会抛出 NameError 错误。
函数作用域
全局作用域
- 和局部变量相对应,全局变量指的是能作用于函数内外的变量,即全局变量既可以在各个函数的外部使用,也可以在各函数内部使用。
在变量前面加个 global 就变成全局变量了
内建作用域
异常处理
需求:当程序遇到问题时不让程序结束,而越过错误继续向下执行
错误处理的格式
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 语句时
当try语句 "语句t" 执行出现错误,会匹配第一个错误码,如果匹配上就执行对应的"语句"
当try语句 "语句t" 执行出现错误,没有匹配的异常,错误将会被提交到上一层的try语句。或者到程序的最上层
当try语句 "语句t" 执行没有出现错误,执行else下的"语句e" (你得有)
使用except 而不使用任何的错误类型
try: print(num) except: print("程序出现了异常")
使用except带着多种异常
try: print(5/0) except (NameError,ZeroDivisionError): print("出现了NameError或ZeroDIvisionError")
特殊的地方
错误其实是class(类),所有的错误都继承自BaseException,所以再捕获的时候,它捕获了该类型的错误,还把子类一网打尽
跨越多层调用,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
断言
def func(num,div): assert(div != 0) , "div 不能为0" return num / div print(func(10,0)) 会指出哪里出错了
文件读写
读文件
打开文件
f=open(path,flag,encoding,errors)
path:要打开文件的路径
flag:打开方式
r 以只读的方式打开文件,文件的描述符放在文件的开头
rb 以二进制格式打开一个文件用于只读,文件的描述符放在文件的开头
r+ 打开一个文件用于读写,文件的描述符放在文件的开头
w 打开一个文件只用于写入,如果该文件已经存在会覆盖,如果不存在则创建新文件
wb 打开一个文件只用于写入二进制,如果该文件已经存在会覆盖,如果不存在则创建新文件
w+ 打开一个文件用于读写
a 打开一个文件用于追加,如果文件存在,文件描述符将会放到文件末尾
a+ 打开一个文件用于追加
encoding:编码方式 (可写可不写)
errors: 错误处理 (可写可不写
读文件内容
读取文件全部内容
str1 = f.read() #读取全部内容
读取指定字符串
str2 = f.read(10) #读取10个字符
读取整行,包括 "\n"字符
str3 = f.readline()
读取指定字符串
str4 = f.readline(10)
读取所有行并返回一个列表
list7 = f.readlines()
若给定的数字大于0,返回实际size字节的行数
list8 = f.readlines(10)
修改描述符的位置
f.seek(0)
关闭文件
f.close()
一个读文件完整的过程
try: f1 = open(path,"r",encoding ="utf-8") print(f1.read()) finally: if f1: f1.close() 1 with open(path,"r",encoding = "utf-8") as f2: print(f2.read()) 无论你读写成功还是失败,with会自动关闭文件
写文件
第一步打开文件
f = open(path,"w")
第二步写文件
f.write("sunck is a good man") #1.将信息写入缓冲区
f.flush() 2.刷新缓冲区,直接把内部缓冲区的数据立刻写入文件,而不是被动的等待自动刷牙缓冲区写入
第三步关闭文件
f.close()
以二进制写文件,必须编码才能写进去,以二进制读文件,必须解码才能读出来
list&tuple&dict&set文件操作
需要一个模块
import pickle #数据持久性模块
举例
myList = [1,2,3,4,5,"sunck is a good man"] f = open(path,"wb") pickle.dump(myList,f) f.close() #读取 f1 = open(path,"rb") tempList = pickle.load(f1) print(tempList) f1.close()
装饰器&偏函数与作用域与异常处理与文件读写的更多相关文章
- 【Python】装饰器 & 偏函数
[装饰器] 1.最简单的Decorator. def author(f): def addName(): print('My name is xkfx.\n') f() return addName ...
- python闭包&装饰器&偏函数
什么是闭包? 首先还得从基本概念说起,什么是闭包呢?来看下维基上的解释: 在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.这个被引用的 ...
- Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数
Python 函数式编程 2 返回函数 返回函数的意思就是:函数作为返回值.(高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.) 举个例子:实现一个可变参数的求和. 正常的函数: de ...
- Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数
高阶函数Higher-orderfunction 变量可以指向函数 >>> abs #abs(-10)是函数调用,而abs是函数本身 <built-in function ab ...
- Python---12函数式编程------12.3匿名函数&装饰器&偏函数
一.匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f( ...
- 设计模式-装饰器模式(Decrator Model)
文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6057666.html 目录 1.概述 2.目的 3.结构组成 4.实现 5.总结 1.概 ...
- Python的高级特性7:闭包和装饰器
本节跟第三节关系密切,最好放在一起来看:python的高级特性3:神奇的__call__与返回函数 一.闭包:闭包不好解释,只能先看下面这个例子: In [23]: def outer(part1): ...
- 设计模式(八)装饰器模式Decorator(结构型)
设计模式(八)装饰器模式Decorator(结构型) 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法 ...
- python_装饰器
越来越觉得写一点技术博客是有多么重要了,明日复明日,现在就开始写吧! 1. 普通装饰器 装饰器的写法是一种语法糖,装饰器也还是一个函数而已,它接收一个函数对象作为参数,并返回一个新函数,主要是拓展原函 ...
随机推荐
- js树状菜单
html部分 <ul class="tree"> <li><span><a href="#">JavaScrip ...
- PHPCMS快速建站系列之后台内容自定义修改
一.后台登录页面 背景图:\statics\images\admin_img 中的 login_bg.jpg 底部版权信息:\phpcms\languages\en 中的 system.lang.ph ...
- Linux常用命令1 文件处理命令
1.命令格式 1.用中括号括起来的内容都不是必填内容,碧如上图的选项和参数,有些命令不写选项和参数也可以执行 2.注意图中的简化选项与完整选项说明,完整选项要两个横杆-- 2.目录处理命令ls 1.文 ...
- 谷歌好样的,把 www 也干掉了
谷歌好样的,把 www 也干掉了 继把 http 干掉后,这次 Chrome 76 连 https 和 www 都一起干掉了. 喜欢简洁,但这个功能演化过程可不简单. 最早觉得把 http 干掉很不方 ...
- select引起的服务端程序崩溃问题
现象: 某个线上的服务最近频繁崩溃.该服务使用C++编写,是个网络服务端程序.作为TCP服务端,接收和转发客户端发来的消息,并给客户端发送消息.该服务跑在CentOS上,8G内存.线上环境中,与客户端 ...
- Java练习 SDUT-1294_选票统计
选票统计 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 某校学生会主席由全校学生投票选举产生,共有m名候选人报名参选, ...
- @codeforces - 141E@ Clearing Up
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 N 个点 M 条边的图,每条为黑色或者白色. 现在让你 ...
- Python语言的特点
- Browse W3C's Open Source Software
https://www.w3.org/Status.html Browse W3C's Open Source Software Amaya - a Web browser/editor First ...
- 2018-5-28-win10-uwp-动态修改ListView元素布局
title author date CreateTime categories win10 uwp 动态修改ListView元素布局 lindexi 2018-05-28 15:15:54 +0800 ...