python装饰器

Python学习:函数装饰器

寵の児 提交于 2019-12-28 15:52:31
概述 装饰器(decorators)是Python的一个重要的部分,简单的介绍,函数装饰器是修改其他函数的功能的函数,有助于代码更加的简洁,也更有Python范。 函数皆是对象 首先,需要理解在Python中,函数也是对象。比如如下的代码: def hi ( name = "yasoob" ) : return "hi " + name print ( hi ( ) ) #输出:'hi yasoob' #可以将一个函数名赋值给一个变量。注意只是函数名func,而不是func()的形式 greet = hi print ( greet ( ) ) #输出:'hi yasoob' #如果删除掉旧的函数名hi,但是不影响新的函数名greet,因为本质上hi与greet只是保存函数地址的变量 #只要函数地址是有效的,则均可以通过变量保存的函数名来调用函数 del hi print ( hi ( ) ) #输出:NameError print ( greet ( ) ) #输出:'hi yasoob' 在函数中定义函数 在Python中,可以在函数中定义另一个函数,也就是可以创建嵌套的函数: def hi ( name = "yasoob" ) : print ( "now you are inside the hi() function" ) def greet ( ) : return

python面试题

喜夏-厌秋 提交于 2019-12-28 03:52:36
首页 代码 文档 问答 资讯 经验 GitHub日报 | 安卓开发专栏 | 开发者周刊 | Android Studio 使用推荐 | Android开发推荐 登录 注册 www.open-open.com/lib OPEN经验 投稿 全部经验分类 Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim C++ C# JSON Ruby Linux Nginx Docker 所有分类 > 开发语言与工具 > Python开发 关于Python的面试题 Python 2016-01-25 11:02:47 发布 您的评价 : 5.0 收藏 3收藏 来自: https://github.com/taizilongxu/interview_python?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io Table of Contents Python语言特性 1 Python的函数参数传递 2 Python中的元类(metaclass) 3 @staticmethod和@classmethod 4 类变量和实例变量 5 Python自省 6 字典推导式 7

python函数

こ雲淡風輕ζ 提交于 2019-12-27 09:52:38
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。 定义一个函数 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 () 。 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数内容以冒号起始,并且缩进。 return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。 def ChangeInt(a): a = 10 b = 2 ChangeInt(b) print(b) def changeme(mylist): "修改传入的列表" mylist.append([1, 2, 3, 4]) print("函数内取值: ", mylist) return # 调用changeme函数 mylist = [10, 20, 30] changeme(mylist) print("函数外取值: ", mylist) def printme(str): "打印任何传入的字符串" print(str) return #

技术总结归纳分享

允我心安 提交于 2019-12-27 04:03:32
Python是一个面向对象的解释型的交互式高级脚本语言:Python被设计成一种高可读性的语言,因为它大量地使用了英语中的单词作为关键字,而且不像其他语言使用标点符号构成复杂的语法结构,Python的语法结构非常少。 Python是一种面向对象的语言:即Python是支持面向对象的,支持在对象中进行代码封装。 Python是一种解释型语言:即Python程序是在运行时由解释器解释执行的,因而不用事先编译源程序。这一点和Perl和PHP类似。 Python是一种交互式语言:即你能够在Python提示符下直接交互式地编写你的程序。 Python是初学者的语言:Python是一种非常适合初学者的语言,它支持多种类型的应用程序的开发,如简单的文本处理、www浏览器应用程序开发、游戏开发等等。 1)什么是Python?使用Python的优点有哪些?缺点有哪些? Python是一种面向对象的解释性的交互式语言,带有对象、模块、线程、异常和内存自动管理的机制。 使用Python的优点有:简单、易学、轻便可移植、可扩展、可读性、具有多种内建数据类型、开源等等。 使用Python的缺点有:运行速度慢,代码不能加密(解释性语言,发布python应用只能发布源代码,不像C发布编译后的应用文件) 2)什么是PEP 8? PEP 8是一种编码规范,是一系列关于如何让Python代码更加具有可读性的编码建议。

Python-装饰器、生成器

限于喜欢 提交于 2019-12-27 03:46:50
python中的for循环 for i in [1,2,3,4]: print(i) 正常可运行的,但是如下运行呢? for i in 1234 print(i) 结果: Traceback (most recent call last): File "test.py", line 4, in <module> for i in 1234: TypeError: 'int' object is not iterable 看,报错了!报了什么错呢?“TypeError: 'int' object is not iterable”,说int类型不是一个iterable。 说明int数据类型并不是一个可迭代类型 字符串、列表、元组、字典、集合 都可以被for循环,说明他们 都是可迭代的 。 让我们导入模块试验一下: from collections import Iterable l = [1,2,3,4] t = (1,2,3,4) d = {1:2,3:4} s = {1,2,3,4} print(isinstance(l,Iterable)) print(isinstance(t,Iterable)) print(isinstance(d,Iterable)) print(isinstance(s,Iterable)) 迭代器协议

python 14 装饰器

最后都变了- 提交于 2019-12-27 00:00:28
今日内容大纲 90。自我。 调整自己,适当听取一些其他人的意见。 承受压力的能力一定要有所提高。 昨天内容回顾以及作业讲解 匿名函数:一句话函数。 多于内置函数,列表推导式结合。 内置函数: *** 加key的。min,max,sorted,map,reduce,filter 闭包: 内层函数对外层函数非全局变量的使用。 一定要存在嵌套函数中。 作用:保证数据安全。自由变量不会再内存中消失,而且全局还引用不到。 今日内容 开放封闭原则: 装饰器:装饰,装修,房子就可以住,如果装修,不影响你住,而且体验更加,让你生活中增加了很多功能:洗澡,看电视,沙发。 器:工具。 开放封闭原则: 开放:对代码的拓展开放的, 更新地图,加新枪,等等。 封闭:对源码的修改是封闭的。闪躲用q。就是一个功能,一个函数。 别人赤手空拳打你,用机枪扫你,扔雷.....这个功能不会改变。 装饰器:完全遵循开放封闭原则。 装饰器: 在不改变原函数的代码以及调用方式的前提下,为其增加新的功能。 装饰器就是一个函数。 装饰器的初识: 版本一: 大壮 写一些代码测试一下index函数的执行效率。 import time # def index(): # '''有很多代码.....''' # time.sleep(2) # 模拟的网络延迟或者代码效率 # print('欢迎登录博客园首页') # # def dariy(

Python之函数进阶

一世执手 提交于 2019-12-26 21:37:17
本节内容 上一篇中介绍了Python中函数的定义、函数的调用、函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函数 内置函数 总结 一、递归函数 函数是可以被调用的,且一个函数内部可以调用其他函数。如果一个函数在内部调用本身,这个函数就是一个递归函数。函数递归调用的过程与循环相似,而且理论上,所有的递归函数都可以写成循环的方式,但是递归函数的优点是定义简单,逻辑清晰。递归和循环都是一个重复的操作过程,这些重复性的操作必然是需要有一定的规律性的。另外,很明显递归函数也需要一个结束条件,否则就会像死循环一样递归下去,直到由于栈溢出而被终止(这个下面介绍)。 可见,要实现一个递归函数需要确定两个要素: 递归规律 结束条件 1. 实例:计算正整数n的阶乘 n! = 1 * 2 * 3 * ... * n 循环实现 思路有两个: 从1乘到n,需要额外定义一个计数器存放n当前的值 从n乘到1,无需额外定义计数器,直接对n进行减1操作,直到n=0返回1结束 def fact(n): if n == 0: return 1 result = 1 while n >= 1: result *= n n -= 1 return result 递归实现 先来确定递归函数的两个要素: 递归规律:n!=1 * 2 * 3 * ... * n = (n

Python装饰器的写法以及应用场景

谁说我不能喝 提交于 2019-12-26 21:29:02
应用场景: 1、授权(Authorization) 装饰器能有助于检查某个人是否被授权去使用一个web应用的端点(endpoint)。它们被大量使用于Flask和Django web框架中。这里是一个例子来使用基于装饰器的授权: from functools import wraps # 最新版python引用是 import functools def requires_auth(f): # f 就是我们需要装饰的函数,一看就是不带参数的装饰器 @wraps(f) # 新版python写法 @functools.wraps(f) def decorated(*args, **kwargs): auth = request.authorization if not auth or not check_auth(auth.username, auth.password): authenticate() return f(*args, **kwargs) return decorated # 该装饰器需相关配置才能运行,这里是截取代码展示应用 2.、日志(Logging) 日志是装饰器运用的另一个亮点。这是个例子: ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! '''

Python核心技术与实战 笔记

梦想的初衷 提交于 2019-12-26 16:37:22
基础篇 Jupyter Notebook 优点 整合所有的资源 交互性编程体验 零成本重现结果 实践站点 Jupyter 官方 Google Research 提供的 Colab 环境 安装 运行 列表与元组 列表和元组,都是 一个可以放置任意数据类型的有序集合 。 l = [1, 2, 'hello', 'world'] # 列表中同时含有 int 和 string 类型的元素 l [1, 2, 'hello', 'world'] tup = ('jason', 22) # 元组中同时含有 int 和 string 类型的元素 tup ('jason', 22) 列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素 (mutable) 元组是静态的,场地大小固定,无法增加删除或者改变 (immutable) 都支持负数索引; 都支持切片操作; 都可以随意嵌套; 两者可以通过 list() 和 tuple() 函数相互转换; 列表和元组存储方式的差异 由于列表是动态的,所以它需要存储指针,来指向对应的元素。增加/删除的时间复杂度均为 O(1)。 l = [] l.__sizeof__() // 空列表的存储空间为 40 字节 40 l.append(1) l.__sizeof__() 72 // 加入了元素 1 之后,列表为其分配了可以存储 4 个元素的空间 (72 -

Python核心技术与实战 笔记

柔情痞子 提交于 2019-12-26 16:36:48
基础篇 Jupyter Notebook 优点 整合所有的资源 交互性编程体验 零成本重现结果 实践站点 Jupyter 官方 Google Research 提供的 Colab 环境 安装 运行 列表与元组 列表和元组,都是 一个可以放置任意数据类型的有序集合。 l = [1, 2, 'hello', 'world'] # 列表中同时含有 int 和 string 类型的元素 l [1, 2, 'hello', 'world'] tup = ('jason', 22) # 元组中同时含有 int 和 string 类型的元素 tup ('jason', 22) 列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素 (mutable) 元组是静态的,场地大小固定,无法增加删除或者改变 (immutable) 都支持负数索引; 都支持切片操作; 都可以随意嵌套; 两者可以通过 list() 和 tuple() 函数相互转换; 列表和元组存储方式的差异 由于列表是动态的,所以它需要存储指针,来指向对应的元素。增加/删除的时间复杂度均为 O(1)。 l = [] l.__sizeof__() // 空列表的存储空间为 40 字节 40 l.append(1) l.__sizeof__() 72 // 加入了元素 1 之后,列表为其分配了可以存储 4 个元素的空间 (72 -