python之嵌套 闭包 装饰器 global、nonlocal关键字
时间:2019-09-27
本文章向大家介绍python之嵌套 闭包 装饰器 global、nonlocal关键字,主要包括python之嵌套 闭包 装饰器 global、nonlocal关键字使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
嵌套: 在函数的内部定义函数
闭包: 符合开放封闭原则:在不修改源代码与调用方式的情况下为函数添加新功能
# global 将局部变量变成全局变量 num = 100 def fn1(): global num num = 600 return num print(fn1()) # 600 # nonlocal 将局部变量变成嵌套变量 def outer(): num = 888 def inner(): nonlocal num num = 666 print(num) # 666 inner() print(num) # 666 outer() # 装饰器 # 在不改变源代码的形势下 添加新功能 def outer(func): def inner(*args,**kwargs): # pass # 新功能 res = func (*args,**kwargs) # 解压带给原功能 pass # 新功能 return res return inner # 使用装饰器(outer),得到新功能(inner) @outer def fn(): pass res=fn() print(res) def foo(fn): # 定义一个嵌套函数 def bar(a): fn(a * (a - 1)) print("*" * 15,) return fn(a * (a - 1)) return bar ''' 下面装饰效果相当于:foo(my_test), my_test将会替换(装饰)成该语句的返回值; 由于foo()函数返回bar函数,因此my_test就是bar 同时,my_test 的参数 a 对应 bar 函数的参数 a ''' @foo def my_test(a): print("==my_test函数==", a) # 打印my_test函数,将看到实际上是bar函数 print(my_test,1111111) # 下面代码看上去是调用my_test(),其实是调用bar()函数 my_test(10)
原文地址:https://www.cnblogs.com/wakee/p/11597014.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 前端基础:jQuery
- Web API--入门--(一)ASP.NET Web API 2(C#)入门
- C# 关键字之 decimal
- 设计模式(8)[JS版]-JavaScript设计模式之如何实现适配器模式???
- Python3与OpenCV3.3 图像处理(二)--图像基本操作
- 前端基础:ECMAScript 6
- 设计模式(9)[JS版]-JavaScript设计模式之如何实现桥接模式???
- 前端基础:Boostrap
- 设计模式(10)[JS版]-JavaScript如何实现组合模式???
- JavaWeb - Servlet:基本概念,HTTP 协议,Tomcat 服务器
- 漫画:设计模式之 “工厂模式”
- 设计模式(11)[JS版]-JavaScript中的注解之装饰器模式
- JavaWeb - Servlet:重定向和转发,状态管理
- 设计模式(12)[JS版]--JavaScript必会设计模式之外观模式(Façade Pattern)
- JavaWeb - JSP:概述和语法,内置对象,JavaBean 组件,MVC 设计模式