首页 > 其他分享 >25. 函数名的多种用法;26. 闭包函数;27. 装饰器

25. 函数名的多种用法;26. 闭包函数;27. 装饰器

时间:2022-10-11 22:33:16浏览次数:46  
标签:闭包 25 fun1 函数 res print fun def

25. 函数名的多种用法

★★★★★函数就是多了传参与返回值★★★★★
函数名也是绑定的一个内存地址,只是该内存地址存放的是一段代码块。
函数名(),如 “fun()”,'''执行'''这个函数名fun的函数体代码。函数名不加括号,可以当'''变量名'''调用。

(1) 可以当变量名赋值
           def fun1():                      	funny = fun1								
              print('OK')                       funny()         

(2) 可以当函数参数
	 def fun1(a):
              print('OK')
          def fun2():
              print('Hi')
          fun1(fun2)

(3) 可以当函数返回值
          def fun1():
    		print('OK')

		def fun2():
   			print('Hi')
    		return fun1

		res = fun2()
		print(res)
		res()

(4) 可以当容器类型
        def lian():
        print("b.杭州")

        def lian1():
            print('a.山外青山楼外楼')

        def lian2():
            print('52.5')

        t = [lian, lian1, lian2]
        t[2]()
        for i in t:
            t()

26. 闭包函数

★★★★★调用函数体,可以简单考虑 相当于调用变量名★★★★★
保存外部函数的变量,不会随着外部函数调用完而销毁。
闭包三要素: 1. 函数嵌套
            2. 内部函数必须使用了外部函数的变量或者参数		# 调用外部的参数或变量,外部返回值是内部函数?

闭包函数实际应用:另外一种函数体代码传参方式。
1. 给函数体代码传参的方式1: 代码里面缺什么变量名形参里面就补什么变量名
            def fun(aa, bb):
                print('暗号,对白', aa, bb)
        	fun('花', '草')	# 执行fun代码体,传参‘花’,‘草’给aa,bb

2. 给函数体代码传参的方式2: 闭包函数
            def fun(a, b):
		def fun1():		# 嵌套函数体
		print(f'''鲁智深:{a}   张三:{b}''')	# 调用函数外层变量名a,b
        	return fun1
        	res = fun(18, 28)    # 赋值给变量名
        	res()		# 执行res,相当于fun函数体

27. 装饰器

概括与定义:
    在不改变原函数的情况下,对已有函数进行额外的功能扩展。装饰器本质就是一个高阶函数
    不修改已有函数的源代码		不修改已有函数的调用方式	  给已有函数增加额外的功能
    本质:是由函数参数、名称空间、函数名多种用法、闭包函数组合到一起的结果。   
    global 全局变量关键字	局部名称 直接 修改 全局名称 数据
    nonlocal 函数体内,函数内层   修改  外层函数

1. 装饰器模板
		def fun1(fun):
        	def fun2(*args, **kwargs):
                print("执行原函数体之前")
                res = fun(*args, **kwargs)	# 有标红的下划线变量名,可以放到第一行括号里。原函数体‘真身’
                print("之后")
            	return res
            return fun2
        

调用 装饰器模板:
        def fun(withdraw):
        	def fun2(*args, **kwargs):

                user_data = {'jason': '1', 'Mei': '2'}
                username = input("请输入用户名:")
                password = input('请输入密码:')

            if username in user_data.keys():  # 判断用户名是否在字典中
                if password == user_data[username]:  # 取字典键的值,与password匹配 是否一样
                    print("登陆成功")

            else:
                res = withdraw(*args, **kwargs)
                return res

        return fun2

    @fun  # login = fun(login)
    def login(*args, **kwargs):
        print("登陆失败")  
        
        
2. 装饰器语法糖
		@fun	# fun = dec(fun1)  把函数fun当作参数传给dec,并且把返回值再次绑定到原函数,也就是覆盖了原函数的定义
    
         @fun  # login = fun(login)
                def login(*args, **kwargs):
                 print("登陆")

                 login()


         @fun  # withdraw = fun(withdraw)
			def withdraw():
			print("退出")

			withdraw() 

注意与包的区别:
装饰器实质上是一个闭包函数,但是装饰器这个闭包函数。他的参数有且只有一个并且是函数类型的话,他才是装饰器,否则他就是闭包函数!

口诀:对修改封闭 对扩展开放

标签:闭包,25,fun1,函数,res,print,fun,def
From: https://www.cnblogs.com/xingxingdiandeng22/p/16782899.html

相关文章

  • 函数与装饰器
    函数与装饰器目录函数与装饰器global与nonlocal函数名的多种用法1、当做变量名赋值2、当作函数的参数3、当做函数的返回值4、当做容器类型闭包函数装饰器简介1、概念2、本......
  • 函数名的多种用法及装饰器
    目录global与nonlocal关键字函数名的多种使用方法闭包函数装饰器简介装饰器推导流程装饰器模板装饰语法糖global与nonlocal关键字global关键字"""局部名称空间直接修......
  • 函数
    global与nonlocal一、global总之一句话,作用域是全局的,就是会修改这个变量对应地址的值。global语句是一个声明,它适用于整个当前代码块。这意味着列出的标识符将被解释为......
  • 闭包函数与装饰器
    昨日内容回顾函数的参数位置参数 分为位置形参和位置实参,位置形参与实参数量要一致,使用关键字传参可改变赋值顺序。默认参数 函数定义阶段赋有默认值的参数,传参时可不......
  • 函数之装饰器
    global与nonlocal1.局部名称空间直接修改全局名称空间中的数据money=123defindex():globalmoneymoney=222index()print(money)2.内层局部名称空间修......
  • 函数(三)——闭包函数与装饰器
    一、函数名的多种用法函数名其实绑定的是一块内存地址,只不过该地址里面存放的不是数据值而是一段代码,函数名加括号就会找到该代码并执行。1. 可以当做变量名赋值defi......
  • 函数剩余内容/函数装饰器
    目录今日内容概要1.global与nonlocal用法2.函数名的多种用法3.闭包函数4.装饰器介绍5.装饰器原理推导过程6.装饰器模板7.装饰器语法糖练习题及答案今日内容概要global和......
  • 闭包函数与装饰器
    今日内容总结global与nonlocalmoney=666defindex():globalmoneymoney=123index()print(money)"""局部名称空间直接修改全局空间中的数据"""......
  • 函数装饰器
    目录内容概要内容详解global与nonlocal函数名的多种用法闭包函数装饰器简历装饰器推导流程装饰器模板装饰器语法糖内容概要global与nonlocal函数名的多种用法闭包......
  • 函数与装饰器
    目录global与nonlocal函数名的多种用法函数闭包装饰器简介装饰器推导流程装饰器模板装饰器语法糖作业global与nonlocal1global关键字:在函数中,如果想给全局变量赋值,则需......