一、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. CSS中和颜色及渐变

    CSS可以设置的颜色 颜色名称 transparent(全透明黑色) pink yellowgreen 等指定的颜色名称 16进制 #ABCDEF 参数 含义 范围 AB 红色渠道值 00-FF CD ...

  2. Hadoop如何保证自己的江湖地位?Yarn功不可没

    前言 任何计算任务的运行都离不开计算资源,比如CPU.内存等,那么如何对于计算资源的管理调度就成为了一个重点.大数据领域中的Hadoop之所以一家独大,深受市场的欢迎,和他们设计了一个通用的资源管理调 ...

  3. Prometheus高可用架构介绍

    Prometheus作为新生代的开源监控系统,慢慢成为了云原生体系的监控事实标准,也证明了其设计得到业界认可.但在多集群,大集群等场景下,Prometheus由于没有分片能力和多集群支持,还有Prom ...

  4. vue移动端封装底部导航

    <template> <div class="myfooter flex-betweenCenter"> <router-link tag=" ...

  5. Ng-Matero v15 正式发布

    前言 Angular 按照既定的发版计划在 11 月中旬发布了 v15 版本.推迟了一个月(几乎每个版本都是这个节奏),ng-matero 也终于更新到了 v15.其实 ng-matero 本身的更新 ...

  6. 一文了解华为FusionInsight MRS HBase的集群隔离方案RSGroup

    摘要: RSGroup是集群隔离方案. 本文分享自华为云社区<华为FusionInsight MRS HBase的集群隔离--RSGroup>,作者: MissAverage. 一.HBa ...

  7. P3934 [Ynoi2016] 炸脖龙 I

    题面 给一个长为 \(n\) 的序列,\(m\) 次操作,每次操作: 1.区间 \([l,r]\) 加 \(x\) 2.对于区间 \([l,r]\),查询: \[a[l]^{a[l+1]^{a[l+2 ...

  8. angular---路由传参后点击获取详情点开自动加载详情

  9. 模块化编程相关知识-引入- 异步加载JS - CommonJS-AMD-CMD-ES6-

  10. Stream流中的常用方法_Foreach-Stream流中的常用方法_filter

    Stream流中的常用方法_Foreach 流模型的操作很丰富,这里介绍一些常用的API.这些方法可以被分成两种︰·延迟方法∶返回值类型仍然是Stream,接口自身类型的方法,因此支持链式调用.(除了 ...