python装饰器

Python @函数装饰器及用法

假如想象 提交于 2020-02-05 05:12:10
1.函数装饰器的工作原理 函数装饰器的工作原理是怎样的呢?假设用 funA() 函数装饰器去装饰 funB() 函数,如下所示: #funA 作为装饰器函数 def funA ( fn ) : #... fn ( ) # 执行传入的fn参数 #... return '...' @funA def funB ( ) : #... 实际上,上面程序完全等价于下面的程序: def funA ( fn ) : #... fn ( ) # 执行传入的fn参数 #... return '...' def funB ( ) : #... funB = funA ( funB ) 通过比对以上 2 段程序不难发现,使用函数装饰器 A() 去装饰另一个函数 B(),其底层执行了如下 2 步操作: 将 B 作为参数传给 A() 函数; 将 A() 函数执行完成的返回值反馈回 B。 举个实例: #funA 作为装饰器函数 def funA ( fn ) : print ( "C语言中文网" ) fn ( ) # 执行传入的fn参数 print ( "http://c.biancheng.net" ) return "装饰器函数的返回值" @funA def funB ( ) : print ( "学习 Python" ) 程序执行流程为: C语言中文网 学习 Python http : // c .

Python内置函数详解

柔情痞子 提交于 2020-02-04 13:09:44
此文参考python文档,然后结合自己的理解,写下来,一方面方便自己,让自己好好学习,顺便回忆回忆;另一方面,让喜欢的盆友也参考一下。 经查询,3.6版本总共有68个内置函数,主要分类如下: 数学运算(7个) 类型转换(24个) 序列操作(8个) 对象操作(9个) 反射操作(8个) 变量操作(2个) 交互操作(2个) 文件操作(1个) 编译执行(4个) 装饰器(3个) 数学运算: 数学运算 abs() 求数值的绝对值 divmod() 返回两个数值的商和余数 max() 返回可迭代对象哄的元素中的最大值或者所有参数的最大值 min() 返回可迭代对象哄的元素中的最大值或者所有参数的最小值 pow() 返回两个数值的幂运算或者其与指定整数的模值 round() 对浮点数进行四舍五入值 sum() 对元素类型是数值的可迭代对象中的每个元素求和 类型转换: 类型转换 bool() 根据传入的参数的逻辑值创建一个新的布尔值 int() 根据传入的参数创建一个新的整数 float() 根据传入的参数创建一个新的浮点数 complex() 根据传入的参数创建一个新的复数 str() 返回一个对象的字符串表现形式 bytearray() 根据传入的参数创建一个新的字节数组 bytes() 根据传入的参数创建一个新的不可变字节数组 memoryview() 根据传入的参数创建一个新的内存查看对象

python函数

我只是一个虾纸丫 提交于 2020-02-04 05:25:27
本文目录 函数基础 函数的返回值 函数的参数 函数对象 函数嵌套 名称空间 作用域 闭包函数 装饰器 函数递归 三元表达式、列表生成式、字典生成式 内置函数 迭代器 生成器 函数基础 函数,即具备某一功能的工具。 函数的存在意义:程序的组织结构不清晰,可读性差;代码冗余;可扩展性差 使用函数必须遵循的规则:先定义,后调用 def 函数名(参数1,参数2,...): """ 文档注释 """ code1 code2 code3 ...... return 返回值 def:定义函数的关键字 函数名: 就相当于一个变量名,指向函数的内存地址, 注意:函数的内存地址()就可以出发函数体代码的执行 参数: 参数是函数的调用者为函数体代码传值的媒介,在python中函数的参数无需声明类型 """文档注释""" : 推荐写上 代码块:就是函数体功能的具体实现 return 返回值 :函数体代码块运行的成果 定义无参函数:当函数体代码逻辑不依赖任何传入的值就能执行,就不需要定义函数 定义有参函数:当函数体的代码逻辑依赖于外部调用者传入的值才能执行,必须定义参数用来接收外部传入的值 #1.1 无参函数 # def foo(): # print('from foo') # foo() #1.2 有参函数 # def bar(x,y): # print(x,y) # bar(1,2) #1.3 空函数

Python之函数

耗尽温柔 提交于 2020-02-04 04:33:25
一函数基础 1.1 函数分类 a.内置函数:为了方便我们的开发,针对一些简单的功能,python解释器已经为我们定义好了的函数即内置函数。对于内置函数,我们可以拿来就用而无需事先定义,如len(),sum(),max() b.自定义函数:很明显内置函数所能提供的功能是有限的,这就需要我们自己根据需求,事先定制好我们自己的函数来实现某种功能,以后,在遇到应用场景时,调用自定义的函数即可。 1.2 定义函数 #语法 def 函数名(参数1,参数2,参数3,...): '''注释''' 函数体 return 返回的值 #1、无参:应用场景仅仅只是执行一些操作,比如与用户交互,打印 #2、有参:需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值 #3、空函数:设计代码结构 1.3 调用函数 1 语句形式:foo() 2 表达式形式:3*len('hello') 3 当中另外一个函数的参数:range(len('hello')) 函数练习: ''' 1、写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作 ''' import os def foo(x,y,z): ''' :param x: 文件名 :param y: 修改的内容 :return: ''' with open(x,'r')as f_read,open('tmp.txt','w'

Python试题汇总

随声附和 提交于 2020-02-03 15:40:02
说明:以下是我学习整理的有关Python的相关笔试或者面试题,因为题目是自己解答的,如有错误,欢迎指出! 2018-09-06 1.简述函数式编程   答:在函数式编程中,函数是基本单位,变量只是一个名称,而不是一个存储单元。除了匿名函数外,Python还使用fliter(),map(),reduce(),apply()函数来支持函数式编程。 2.什么是匿名函数,匿名函数有什么局限性   答:匿名函数,也就是lambda函数,通常用在函数体比较简单的函数上。匿名函数顾名思义就是函数没有名字,因此不用担心函数名冲突。不过Python对匿名函数的支持有限,只有一些简单的情况下可以使用匿名函数。 3.如何捕获异常,常用的异常机制有哪些?   答:如果我们没有对异常进行任何预防,那么在程序执行的过程中发生异常,就会中断程序,调用python默认的异常处理器,并在终端输出异常信息。   ①try...except...finally语句:当try语句执行时发生异常,回到try语句层,寻找后面是否有except语句。找到except语句后,会调用这个自定义的异常处理器。except将异常处理完毕后,程序继续往下执行。finally语句表示,无论异常发生与否,finally中的语句都要执行。   ②assert语句:判断assert后面紧跟的语句是True还是False

python初学随记

匆匆过客 提交于 2020-02-03 07:56:33
语言特点:开源、跨平台,扩展性强、类库多 主流开发工具:pycharm 学习版本:python3.6.5 基础: 注释用“#” 基本数据类型(4种): 整数 int 浮点数float 字符串str 布尔值bool (True、False) 序列(3种): 字符串 列表[1, 2, 3] 存储的内容可以变更 增加append() 移除remove() 元组(“1”, “2”, “3”)存储的内容不可以变更 序列的基本操作 成员关系in / not in 连接+ 重复* 切片[:] 了解方法: filter() list() len() 字典 {1:2, 2:3, 3:4} 分支 if 表达式: xxx elif 表达式: xxx else: xxx 了解方法:input() 接受用户输入 循环 while 表达式: 循环内容 for 迭代变量 in 可迭代对象: 循环内容 break\continue range(startNum,endNum) time.sleep(1) 与操作:and 列表推导式: [i *i for i in range(1,11) if i%2 ==0] 字典推导式:{i : 0 for i in [1,2]} 文件操作 file1 = open(“a.txt”, “w/r”) 打开文件 file1.read() 输入 file1.readLine()

2.1&2.2python学习笔记

守給你的承諾、 提交于 2020-02-02 21:10:22
1) 函数参数 1. 必选参数在前,默认参数在后 ( 多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数 ) 2. 可变参数:参数前面加了一个 * 号(在 list 或 tuple 前面加一个 * 号,把 list 或 tuple 的元素变成可变参数传进去); 3. 关键字参数 : 参数前面加了个 ** , (在 dict 的前加 ** , dict 中所有 key-value 用关键字参数传入到函数的 ** 变量中, ** 变量将获得一个 dict ,注意变量获得的 dict 是一份拷贝,对变量的改动不会影响到函数外的 dict )。 如果要限制关键字参数的名字,就可以用命名关键字参数: def person(name, age, *, city, job):#(只接收city和job作为关键字参数) 命名关键字参数需要一个特殊分隔符 * , * 后面的参数被视为命名关键字参数 作用:限制要传入的参数的名字,只能传我已命名关键字参数。 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符 * 了: def person(name, age, *args, city, job): ps: 定义默认参数要牢记一点:默认参数必须指向不变对象! 2 )列表生成器 示例:L1 = ['Hello', 'World', 18,

python 装饰器

时光毁灭记忆、已成空白 提交于 2020-02-02 19:11:45
'''概念:是一个闭包,把一个函数当做参数,返回一个替代版的函数,本质上就是一个返回函数的函数'''#简单的装饰器def func1(): print("sunck is a good man")def outer(func): def inner(): print("*******************") func() return inner#f是函数func1的加强版本f = outer(func1)f() 来源: https://www.cnblogs.com/pygo/p/12253173.html

Python基础+爬虫基础

假如想象 提交于 2020-02-01 02:05:09
Python基础+爬虫基础 一、python的安装: 1、建议安装Anaconda,会自己安装一些Python的类库以及自动的配置环境变量,比较方便。 二、基础介绍 1、什么是命名空间:x=1,1存在内存中,x命名空间是存放名字x与1绑定关系的地方。 2、命名空间的加载:python解释器先启动,先加载内置命名空间,然后以文件为基础,加载全局命名空间,在执行文件的过程中如果调用函数,则临时产生局部命名空间。 3、名字的查找顺序:局部命名空间——全局命名空间——内置名称空间。 在全局无法查看局部,在局部可以查看全局。 三、global与nonlocal关键字: 1、什么是闭包:内部函数包对外部作用域而非全局作用域的引用。2、闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包了一层作用域,这使得,该函数无论在何处被调用,优先使用自己外层包裹的作用域。 应用领域:延迟计算 四、装饰器: 定义:装饰他人的器具,本身可以是任意可调用对象,被修饰者也可以是任意可调用对象、 强调装饰器原则:1、不修改被装饰对象的源代码。2、不修改被装饰对象的调用方式。3、装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能。 五、迭代器: 迭代的工具,是一个重复的过程,每次重复一次迭代,并且每次迭代的结果都是下次迭代的初始值。 1、可迭代对象是指内置有 __iter__方法的对象和_

python学习笔记——装饰器

依然范特西╮ 提交于 2020-01-31 18:49:59
@property装饰器 把一个方法变成属性调用 好处是方便调用 class Student(object): @property def score(self): return self._score @score.setter def score(self,value): #此处省略检查是否参数合法 self._score = value 只使用@property而不不对该函数setter方法,表示定义为只读属性 class Screen(object): """docstring for Screen""" @property def width(self): return self._width @width.setter def width(self,value): self._width = value @property def height(self): return self._height @height.setter def height(self,value): self._heigth = value @property def resolution(self): return self._heigth * self._width s = Screen() s.width = 1024 s.height = 768 print('resolution ='