Python中匿名函数、普通函数、闭包、对象当做实参时的区别

Python之匿名函数、普通函数、闭包、对象

1.匿名函数

# 匿名函数定义:lambda 形参1,形参2,...:代码(结果由return返回)
# 匿名函数调用(末尾加小括号):lambda 形参1,形参2,...:代码(结果由return返回)(形参1,形参2...)

a = (lambda x, y: x + y)(1, 2)
print(a)

2.普通函数

# 普通函数定义:def 函数名(形参):
def sum(x,y):
	return x+y
# 普通函数调用:函数名(形参)

3.闭包

def set_func(start):
    def call_func():
        print('函数开始执行前执行的代码')
        nonlocal start   # 闭包中,修改外层函数传递的全局变量参数的申明
        start += 2
        return start
    return call_func    # 外层函数返回内层函数的引用
    
func = set_func(2)   # 此时func执行内层函数call_func函数
func()   # 调用func等同于调用call_func函数

4.对象

class Person:
	def __init__(self,name,age):
		self.name=name
		self.age=age
	def showage(self):
		print("%s is %s years old" % (self.name, self.age))

p1 = Person("张三",29)  # 创建对象,传入参数

5.思考:函数、匿名函数、闭包、对象 当做实参时 有什么区别?

##1.匿名函数能够完成基本的简单功能,传递是这个函数的引用 只有功能

##2.普通函数能够完成较为复杂的功能,传递是这个函数的引用 只有功能

##3.闭包能够将较为复杂的功能,传递是这个闭包中的函数以及数据,因此传递的是功能+数据。基于闭包实现的装饰器,是python三大器(迭代器、生成器、装饰器)之一,装饰器可以对函数和方法进行装饰,在不改变原函数(方法)代码和调用方式的情况下,在原函数(方法)整体前面或后面增加新的功能,比如权限验证等。

##4.对象能够完成最为复杂的功能,传递是很多数据+很多功能,因此传递的是很多功能(方法)+数据


版权声明:本文为qq_38923792原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。