首页 > 其他分享 >global与nonlocal关键字、函数名的多种用法、函数的嵌套调用、函数的嵌套定义、闭包函数、装饰器简介

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

时间:2023-02-28 15:44:57浏览次数:29  
标签:闭包 index 函数 res 嵌套 func print def

目录

一、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))

标签:闭包,index,函数,res,嵌套,func,print,def
From: https://www.cnblogs.com/oiqwyig/p/17164506.html

相关文章

  • PLSQL ROW_NUMBER() OVER()函数的使用
    语法格式:row_number()over(partitionby分组列orderby排序列desc)row_number()over()分组排序功能:在使用row_number()over()函数时候,over()里头的分组以及排序......
  • 损失函数之 L1 loss, IOU loss, GIOU loss, DIOU loss, CIOU loss
    目标检测任务的损失函数一般由分类损失函数和回归损失函数两部分构成回归损失函数的发展过程主要包括:最原始的SmoothL1Loss函数、2016年提出的IoULoss、2019年提出的GI......
  • slice()函数与splice()函数
    JavaScript高级程序设计P1511.slice()函数slice()函数用于重新创建一个包含原有数组中一个或多个元素的新数组,(将原数组赋值一份进行修改操作,使用slice()函数不会对原......
  • 2023.02.28 - 数组扁平化处理||同结构嵌套数组对象中删除某个键值
    根据childrens字段递归扁平化数组(保留父元素)//方法一:根据childrens字段递归扁平化数组(保留父元素)functionflatten1(arr){"usestrict";if(!arr)return[]......
  • 标量函数的创建和使用
     --createfunction标量函数名--(--入参入参类型--)--return出参类型--as--Begin--语句处理--end--案例createfunctionGetCodeByName(@Namevarcha......
  • golang实现类似PHP json_encode和json_decode 函数
    类似PHP json_encode和json_decode的用法/*data:=map[string]interface{}{"name":"Tom","age":18,"gender":"male",......
  • js函数式编程讲解
    什么是函数式编程是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简......
  • Postgis常用函数
    Postgis常用函数创建拓展createextensionpostgis;Postgis升级ALTEREXTENSIONpostgisUPDATE;Postgis版本selectpostgis_full_version()设置坐标系ST_SetSR......
  • Matlab求解方程或函数的根,root,fzero,solve,fsolve的区别
    1.引言Matlab中有很多求解方程和方程组的函数,这些函数的使用可能有很多人都模棱两可,这里做一个简单的介绍,给个大方向,学会这些函数的基本使用场景。想要学习每个函数的更多......
  • DQL聚合函数/分组查询/分页查询
    -------------------------聚合函数-------------------------------------------------------查班里一共多少学生:selectcount(id)fromstu;  --count()......