一、global与nonlocal关键字

global方法:用于局部名称空间修改全局名称空间中的名字绑定关系

money = 666

def index():
global money
money = 123 index()
print(money)

nonlocal方法:用于局部名称空间修改外层局部名称空间中的名字绑定关系

def index():
name = 'jason'
def inner():
nonlocal name
name = 'kevin'
inner()
print(name) index()

二、函数名的多种用法

函数名其实绑定的也是一块内存地址 只不过该地址里面存放的不是数据值而是一段代码 函数名加括号就会找到该代码并执行

方法一:

# 可以当做变量名赋值
def index():pass
res = index
res() '''函数名不加括号就是函数的内存地址'''

方法二:

# 函数名可以当成函数的实参
def index():
print('from index')
def func(a):
print(a)
a(
func(index)

方法三:

# 函数名可以当成函数的返回值
def index():
print('from index') def func():
print('from func')
return index
res = func()
print(res)
res() def index():
print('from index')
def func():
print('from func')
return func res = index()
print(res)
res()

方法四:

# 可以当做容器类型(可以存放多个数据的数据类型)的数据
def register():
print('注册功能') def login():
print('登录功能') def withdraw():
print('提现功能') def transfer():
print('转账功能') def shopping():
print('购物功能') # 定义功能编号与功能的对应关系
func_dict = {
'1': register,
'2': login,
'3': withdraw,
'4': transfer,
'5': shopping
} while True:
print("""
1.注册功能
2.登录功能
3.提现功能
4.转帐功能
5.购物功能
""")
choice = input('>>>:').strip()
if choice in func_dict:
func_name = func_dict.get(choice)
func_name()
else:
print('功能编号不存在')

三、函数的嵌套调用

函数的嵌套:在函数里面还有函数,分为外函数和内函数

# 在一个函数里面调用别的函数
def print1():
print("这是第一个函数")
def print2():
print("这是定义的第二个函数")
print1() #在print2()中调用print1()
print2()

四、函数的嵌套定义

在函数内部定义的函数要在函数内部调用

# 在函数内部定义函数
# 把复杂的功能隐藏起来,暴露给外界一个简单的接口 def all_func(type): def register():
pass
def login():
pass def shopping():
pass def transfer():
pass if type == '1':
register()
elif type == '2':
login()
elif type == '3':
shopping()
elif type == '4':
transfer()
else:
print('不存在') all_func('1') # 注册功能
all_func('2') # 登录

五、闭包函数

  • :定义在函数内部的函数

  • :内部函数使用外部函数名称空间中得名字

只有同时满足以上两个条件的函数,才是闭包函数

给函数体代码传参的方式1:代码里面缺什么变量名形参里面就补什么变量名

def register(name,age):
print(f"""
姓名:{name}
年龄:{age}
""")
register('tony', 18)

给函数体代码传参的方式2:闭包函数

def outer(name, age):
# name = 'jason'
# age = 18
def register():
print(f"""
姓名:{name}
年龄:{age}
""")
return register
res = outer('tony', 18)
res()
res()
res = outer('kevin', 28)
res()
res()

六、装饰器简介

概念

在不改变被装饰对象原代码和调用方式的情况下给被装饰对象添加新的功能

本质

装饰器并不是一门新的技术 而是由函数参数、名称空间、函数名多种用法、闭包函数组合到一起的结果

def index():
print('from index')
index()
'''给index函数添加统计执行的时间''' import time def index():
time.sleep(3)
print('from index') # 1. 在函数调用之前打印此时的时间
start_time = time.time()
index() # 2. 在函数调用完毕之后的时间
end_time = time.time() print('index函数一共执行了%s秒' % (end_time - start_time))

global与nonlocal关键字、函数名的多种用法、函数的嵌套调用、函数的嵌套定义、闭包函数、装饰器简介的更多相关文章

  1. 10月11日内容总结——global和nonlocal方法、函数名的多种用法、闭包函数和装饰器

    目录 一.global和nonlocal方法 global方法 nonlocal方法 二.函数名的多种用法 1.函数名可以当作变量名赋值 2.函数名可以当作函数的参数 3.函数名可以当作函数的返回值 ...

  2. 第十七篇 Python函数之闭包与装饰器

    一. 装饰器 装饰器:可以拆解来看,器本质就是函数,装饰就是修饰的意思,所以装饰器的功能就是为其他函数添加附加功能. 装饰器的两个原则: 1. 不修改被修饰函数的源代码 2. 不修改被修饰函数的调用方 ...

  3. 13、python中的函数(闭包与装饰器)

    一.嵌套函数 函数的内部又再定义另一个函数,这个函数就叫嵌套函数,里面含函数就叫内部函数. 示例: 二.返回函数 函数可以接收函数对象作为参数,同理函数也能返回一个函数对象作为返回值. 示例: 返回函 ...

  4. day13(函数嵌套定义,global,nonlocal关键字,闭包,装饰器)

    一,复习 ''' 1.函数对象:函数名 => 存放的是函数的内存地址 1)函数名 - 找到的是函数的内存地址 2)函数名() - 调用函数 => 函数的返回值 eg:fn()() => ...

  5. python第十三天,函数的嵌套定义,global,nonlocal关键字的使用,闭包及闭包的运算场景,装饰器

    今日内容 1. 函数的嵌套定义 2.global,nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器 函数的嵌套定义 1. 概念:在一个函数内部定义另一个函数 2 .为什么要有函数的嵌套定义 ...

  6. python13 1.函数的嵌套定义 2.global、nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器

    ## 复习   '''1.函数对象:函数名 => 存放的是函数的内存地址1)函数名 - 找到的是函数的内存地址2)函数名() - 调用函数 => 函数的返回值  eg:fn()() =&g ...

  7. day13函数的嵌套定义,global、nonlocal关键字,闭包及闭包的运用场景,装饰器

    复习 ''' 1.函数对象:函数名 => 存放的是函数的内存地址 1)函数名 - 找到的是函数的内存地址 2)函数名() - 调用函数 => 函数的返回值 eg:fn()() => ...

  8. python学习Day13 函数的嵌套定义、global、nonlocal关键字、闭包及闭包的运用场景、装饰器

    复习 1.函数对象:函数名 => 存放的是函数的内存地址1)函数名 - 找到的是函数的内存地址2)函数名() - 调用函数 => 函数的返回值 eg:fn()() => fn的返回值 ...

  9. glob.glob()、os.path.split()函数、global和nonlocal关键字

    1. glob.glob() glob模块是Python最简单的模块之一, 内容非常少, 用它可以查找符合特定规则的文件路径名, 查找文件时只会用到三个匹配符: * :匹配0个或多个字符 ? : 匹配 ...

  10. python(动态传参、命名空间、函数嵌套、global和nonlocal关键字)

    一.函数的动态传参 1.*args位置参数动态传参 def chi(*food): print(food) chi("烧烤","火锅","虾吃虾涮&q ...

随机推荐

  1. re、base64的结合使用爬取豆瓣top250

    一.缘由 对于豆瓣的这个网站,记得使用了不少于三种的爬取和解析方式来进行的.今天的这种解析方式是我使用起来较为顺手,后来就更喜欢使用xpath解析,但是这两种也需要掌握. 二.代码展示 '''爬取豆瓣 ...

  2. hdoj笔记1000

    1000,A+B problem #include <stdio.h>//要用EOF!! int main() { int a,b; while(scanf("%d%d" ...

  3. Vue DevUI v1.4 版本发布:从体验、效率、质量三个方面做了全方位的优化🎉

    2022年9月1日,我们正式宣布 Vue DevUI 组件库发布 v1.0 版本. Vue DevUI 1.0 正式发布 经过100多天的持续迭代,我们正式发布 v1.4.0 版本,共新增: 11位贡 ...

  4. GitHub车牌检测识别项目调研

    一,EasyOCR 1.1,仓库介绍 1.2,使用记录 二,HyperLPR 2.1,HyperLPR 概述 2.3,使用记录 2.3,使用建议 三,simple-car-plate-recognit ...

  5. [python] 基于diagrams库绘制系统架构图

    Python的Diagrams库允许通过简单的Python代码绘制云系统架构,实现对新的系统架构进行原型设计.Diagrams的官方仓库地址见:diagrams.Diagrams的官方文档和使用示例见 ...

  6. VuePress个人博客搭建

    vuepress概述 VuePress 由两部分组成:第一部分是一个极简静态网站生成器 (opens new window),它包含由 Vue 驱动的主题系统和插件 API,另一个部分是为书写技术文档 ...

  7. idea的简单介绍

    上一篇博客中只是了解一下java文件是怎么编译的,但是一般来说大家都是使用编程软件来进行开发,我是使用IntelliJ IDEA进行开发的 官网下载IDEA(自行安装哈):地址:https://www ...

  8. 微软拼音长句模式恢复工具支持Win10 1803

    4月份就有人留言旧微软拼音恢复工具不支持Win10 1803了,我自己也遇到了,但因为没时间搞,勉为其难使用了词组模式的微软拼音几个月,终于在八月份抽个空研究了下,解决了. 这次是因为傻逼大微软改了 ...

  9. 使用阿里云产品搭建PHPWIND

    2.4 安装PhpWind论坛网站 1.     本小节主要是在ECS云主机中快速安装PhpWind论坛网站的基础环境. 2.     远程登录到 PhpWind 主机服务器 ECS实例.请使用本实验 ...

  10. Ubuntu20.04/22.04 安装 Arduino IDE 2.x

    这周收到两片基于LGT8F328P LQFP32的Arduino Mini EVB, 机器上没有 Arduino 环境需要新安装, 正好感受一下新出的 Arduino IDE 2.x, 记录一下 Ub ...