昆明网站推广哪家好,域名备案要钱吗,2022西安最新出入通知,天元建设集团有限公司新中大i8Python 中的 lambda 函数和嵌套函数 Python 中的 lambda 函数和嵌套函数Python 中的 lambda 函数嵌套函数#xff08;内部函数#xff09;封装辅助函数闭包和工厂函数 Python 中的 lambda 函数和嵌套函数
Python 中的 lambda 函数
Lambda 函数是基于单行表达式的匿名函数。… Python 中的 lambda 函数和嵌套函数 Python 中的 lambda 函数和嵌套函数Python 中的 lambda 函数嵌套函数内部函数封装辅助函数闭包和工厂函数 Python 中的 lambda 函数和嵌套函数
Python 中的 lambda 函数
Lambda 函数是基于单行表达式的匿名函数。就像用def关键字定义常规函数一样lambda关键字用于定义匿名函数。Lambda函数仅限于单行。这意味着它们不能使用多个语句也不能使用return语句。在计算完单行表达式后返回值会自动返回。
lambda函数可以在任何使用常规函数的地方使用。lambda函数最简单、最方便的用法是与map、reduce和filter函数一起使用。当希望使代码更简洁时Lambda函数很有帮助。
之前我们讨论过map、filter现在我们重用之前的代码演示一下定义和使用 lambda 函数。请参考下面的代码
myList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]new_list list(map(lambda x: x * x, myList))
print(new_list)new_list list(filter(lambda x: x % 2 0, myList))
print(new_list)以上代码的输出结果是
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[2, 4, 6, 8, 10]尽管代码变得更加简洁了但是 lambda 表达式是不能复用的并且也不容易维护。这和其它编程语言比如 C 中的 lambda 表达式有很大不同。在 C 里lambda 表达式可以实现任意复杂的功能。在 Python 中只有当实现的功能非常简单时使用 lambda 函数比较合适。不过Python 中的嵌套函数很强大建议使用。
嵌套函数内部函数
当我们在现有函数中添加一个函数时它被称为内部函数或嵌套函数。使用内部函数的好处是它们可以直接访问外部函数作用域中已定义或可用的变量。创建内部函数与使用def关键字并进行适当缩进来定义常规函数相同。内部函数不能被外部程序执行或调用。但是如果外部函数返回内部函数的引用则调用者可以使用它来执行内部函数。
内部函数有很多优点应用很广泛。接下来举几个例子。
封装
内部函数的一个常见用例是对外部世界隐藏其功能。内部函数只在外部函数作用域中可用对全局作用域中不可见。下面的代码示例展示了一个隐藏内部函数的外部函数
def outer_hello():print(这是外部函数)def inner_hello():print(这是内部函数)inner_hello()
outer_hello()在外部函数所在的作用域内只能调用外部函数。内部函数只能在外部函数的作用域内调用。以上代码的输出结果是
这是外部函数
这是内部函数辅助函数
在某些情况下我们会发现函数中的部分代码可以复用那么我们就会把这部分代码封装成一个单独的函数。如果可复用代码仅仅是在函数内部可复用那么我们可以把可复用代码封装成内部函数。这种类型的内部函数也被称为辅助函数。下面就是一个辅助函数的例子
def outer_fn(x, y):def get_prefix(s):return s[:2]x2 get_prefix(x)y2 get_prefix(y)print(x2, y2)outer_fn(abcd, 美丽新世界)上面的outer_fn 中定义的辅助函数 get_prefix被复用了 2 次。这段代码的输出结果是
ab 美丽闭包和工厂函数
这是一个内部函数的亮点应用场景。内部函数和其外围环境在一起称作闭包是动态创建的函数可以被另一个函数当成返回值返回。闭包的真正神奇之处在于被返回的函数闭包可以完全访问创建它时的变量和命名空间。即使外层函数已经执行完毕也不影响闭包的正常执行和对变量和命名空间的访问。
闭包的概念可以用下面的代码演示。在下面的代码中我们展示了如何创建一个函数工厂并且从函数工厂中返回一个闭包
def power_calc_factory(base):def power_calc(exponent):return base**exponentreturn power_calcpower_calc_2 power_calc_factory(2)
power_calc_3 power_calc_factory(3)print(power_calc_2(2))
print(power_calc_2(3))
print(power_calc_3(2))
print(power_calc_3(4))在上面的代码中power_calc_factory 扮演了一个函数工厂每一次调用它就会返回一个闭包。power_calc 是一个内部函数它可以访问外部函数的变量 base。power_calc 的参数 exponent 是在它被调用时作为实参传递进来的。return power_calc 这一语句把 power_calc 当作闭包返回了。
上面的代码的输出结果是
4
8
9
81完