十一. Python基础(11)—补充: 作用域 & 装饰器
十一. Python基础(11)—补充: 作用域 & 装饰器
1 ● Python的作用域补遗
|
在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域: void { //int num = 10; if (2 > 1){ int } printf("%d", num); getchar(); } //在上面的案例中, printf("%d", num);中的num 会被警示未被声明. |
|
但是, 在Python中, if语句等控制结构(control structure)不会产生新的作用域, 因此, 下面的程序在Python中是可以执行的. if 2 > 1: num = 100 print(num) # 100 |
|
※ Python中, 只用三种语句块(block): A block is a piece of Python program text that is executed as a unit. The following are blocks: a module, a function body, and a class definition. Python lacks declarations and allows name binding operations to occur anywhere within a code block. |
2 ● 带参数的装饰器
|
def outer(flag): def wrapper(func): # wrapper是装饰器的名字 def inner(*args, **kwargs): if flag: print("被装饰的函数执行之前你要做的事.") ret = func(*args, **kwargs) # 被装饰的函数, 返回值为None也写出来 if flag: print("被装饰的函数执行之后你要做的事.") return ret return inner return wrapper
@outer(False) # 传True表示不执行装饰器, 传False表示不执行装饰器 def welcome(name): # welcome是被装饰的函数 print('Welcome:%s!'%name)
@outer(False) # 传True表示不执行装饰器, 传False表示不执行装饰器 def home(): # home是被装饰的函数 print('欢迎来到home页!')
welcome("Arroz") print("===============================") home() |
|
Welcome:Arroz! =============================== 欢迎来到home页! |
3 ● 用多个装饰器装饰一个函数
|
def wrapper1(func): def inner(): print("wrapper1, before func") func() print("wrapper1, after func") return inner
def wrapper2(func): def inner(): print("wrapper2, before func") func() print("wrapper2, after func") return inner
@wrapper2 @wrapper1 def home(): print('欢迎来到home页!')
home() |
|
''' wrapper2, before func wrapper1, before func 欢迎来到home页! wrapper1, after func wrapper2, after func ''' 关键是要把握函数扩展功能的执行顺序 |
十一. Python基础(11)—补充: 作用域 & 装饰器的更多相关文章
- python基础整理4——面向对象装饰器惰性器及高级模块
面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...
- Python基础(八)装饰器
今天我们来介绍一下可以提升python代码逼格的东西——装饰器.在学习装饰器之前我们先来复习一下函数的几个小点,方便更好的理解装饰器的含义. 一.知识点复习 1, 在函数中f1和f1()有什么不同,f ...
- python基础语法8 叠加装饰器,有参装饰器,wraps补充,迭代器
叠加装饰器: 叠加装饰器 - 每一个新的功能都应该写一个新的装饰器 - 否则会导致,代码冗余,结构不清晰,可扩展性差 在同一个被装饰对象中,添加多个装饰器,并执行. @装饰1 @装饰2 @装饰3 de ...
- python基础语法_9-1闭包 装饰器补充
1.闭包的概念 closure:内部函数中对enclosing作用域的变量进行引用,外部函数返回内部函数名 2.函数实质与属性 函数是一个对象:在内存中有一个存储空间 函数执行完成后内部变量回收: ...
- Python全栈开发之路 【第五篇】:Python基础之函数进阶(装饰器、生成器&迭代器)
本节内容 一.名称空间 又名name space,就是存放名字的地方.举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方. 名称空间共3种,分别如下 ...
- Day4 - Python基础4 迭代器、装饰器、软件开发规范
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- python基础(八)生成器,迭代器,装饰器,递归
生成器 在函数中使用yield关键字就会将一个普通的函数变成一个生成器(generator),普通的函数只能使用return来退出函数,而不执行return之后的代码.而生成器可以使用调用一个next ...
- python基础16_闭包_装饰器
不了解是否其他语言也有类似 python 装饰器这样的东西. 最近才发现ECMAScript6也是有生成器函数的,也有 yield generator 装饰器的基础知识是闭包: # 闭包:嵌套函数, ...
- Python基础(6)——装饰器
装饰器: def w1(func): def inner(): # 验证1 # 验证2 # 验证3 return func() return inner @w1 def f1(): print 'f1 ...
随机推荐
- Linux中系统检测工具top命令
Linux中系统检测工具top命令 本文转自:https://www.cnblogs.com/zhoug2020/p/6336453.html 首先介绍top中一些字段的含义: VIRT:virtua ...
- 最多的划分来使数组有序 Max Chunks To Make Sorted
2018-12-01 11:05:46 一.Max Chunks To Make Sorted 问题描述: 问题求解: 由于没有重复,所以直观的来看对于每个遇到数,其能够被划分出来的前提是其前面已经有 ...
- 如何模拟一个http请求并把response的内容保存下载下来,导出到excel中(结尾福利)
def doExport(self): # 模拟一个http请求 url = u'%s?dumptype=investigation&dumpid=%s&timezone=8' % ( ...
- HAL无阻塞延时
//实现间隔time_interval时间点亮红灯(此时间间隔并不是绝对的,是大于等于的关系)//用于系统要求无延时且延时时间粗略的场合,比如间隔一段时间采样数据,间隔一段时间点亮状态灯等//HAL_ ...
- 酷开 5.5 版本安装第三方app
https://www.znds.com/jc/article/2952-1.html .开始安装(以安装当贝桌面为例): adb connect 192.168.XXX.XXX(电视IP) adb ...
- Getting Started with Processing 第五章的总结
Getting Started with Processing 第五章:响应 一次与永久 setup()函数 Processing 中,setup()函数只运行一次,用于设置一些初始的值,比如画布的大 ...
- 他将Yahoo!Hadoop从20个节点扩展为42000个节点
他将Yahoo!Hadoop从20个节点扩展为42000个节点 http://www.csdn.net/article/2012-11-08/2811629-Interview-Hortonworks ...
- fdisk分区和挂载
查看硬盘情况 fdisk -l 修改分区类型为LVM sudo fdisk /dev/sda (/dev/sda为对应的设备名,也可能是其它名字) 按n新建分区 按p选择主分区 按t改变分区的syst ...
- WCF开发实战系列一:创建第一个WCF服务 转
转 http://www.cnblogs.com/poissonnotes/archive/2010/08/28/1811064.html 在这个实战中我们将使用DataContract,Servic ...
- BP搜索帮助,调用BP_HEAD_SEARCH组件
1.BP类字段,GET V方法: METHOD get_v_zhsi0cnn. CREATE OBJECT rv_valuehelp_descriptor TYPE cl_bsp_wd_valuehe ...