Python函数嵌套的使用技巧

在 Python 中,函数的嵌套可以发生在几种不同的情况下,这些情况包括:

1. 函数嵌套在函数内部:

在一个函数内部定义另一个函数,内部函数通常只在外部函数中可见。
 

 def outer_function():
       def inner_function():
           # 内部函数的实现
           pass
       # 外部函数的实现
       inner_function()

举例:

def outer_function(x):
    print("外部函数参数 x =", x)

    def inner_function(y):
        print("内部函数参数 y =", y)

    inner_function(x * 2)  # 将外部函数参数传递给内部函数

outer_function(5)  # 调用外部函数

outer_function​ 接受一个参数 ​x​,并将其值传递给内部函数 ​inner_function​。在调用 ​outer_function(5)​ 时,实际上会调用 ​inner_function(5*2)​,内部函数的参数值为外部函数参数值的两倍。

2. 函数作为返回值:

一个函数可以返回另一个函数,以及返回一个函数名或者 Lambda 表达式。 

   def outer_function():
       def inner_function():
           return "这是内部函数"
       return inner_function
   
   result = outer_function()
   print(result())

 举例:

 

3. 函数嵌套在类中:

在类的内部定义函数,同样可以在函数中再定义其他函数。
   

   class MyClass:
       def outer_method(self):
           def inner_method():
               # 内部方法的实现
               pass
           # 外部方法的实现
           inner_method()

举例:

class MyClass:
    def outer_method(self):
        print("这是外部方法")

        def inner_method():
            print("这是内部方法")

        inner_method()  # 在外部方法中调用内部方法

# 创建类实例
my_instance = MyClass()
# 调用外部方法
my_instance.outer_method()

 

定义了一个类 ​MyClass​,其中包含了一个外部方法 ​outer_method​ 以及一个在外部方法内部定义的内部方法 ​inner_method​。当创建类的实例后,可以通过该实例调用外部方法 ​my_instance.outer_method()​。

4. 闭包(Closure):

在一个函数内定义并引用了外部函数的局部变量,形成一个闭包。
 

   def outer_function(x):
       def inner_function(y):
           return x + y
       return inner_function

   add_five = outer_function(5)
   result = add_five(3)
   print(result)

举例:

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function

# 创建闭包
add_five = outer_function(5)

# 使用闭包
result = add_five(3)
print(result)

将外部函数 ​outer_function(5)​ 的返回值赋给了变量 ​add_five​,这个变量实际上就是一个闭包,其中包含了外部函数中的变量 ​x​ 的取值。之后,我们调用闭包 ​add_five(3)​,传入参数 3,并实现了对外部函数参数和内部参数的相加操作。

5.函数作为返回值和闭包(Closure)具体区别:

  1. 函数作为返回值:

  2. 函数作为返回值是指一个函数内部可以创建并返回另一个函数。当外部函数调用时,会返回内部的函数对象,而不是函数的执行结果。
  3. 返回的函数与外部函数完全脱离,不再持有外部函数作用域中的状态信息。
  4. 返回的函数需要在外部函数中重新调用才能执行。
  5. 闭包(Closure):

  6. 闭包是一种特殊的函数,它能够记住并访问其创建时的环境中的变量值,即使这些变量在创建后已经不再存在。
  7. 闭包是在函数内部定义函数,并返回该内部函数的情况。
  8. 闭包允许函数保持对定义时环境的引用,从而在之后的调用中可以继续使用这些变量的值。

 一个很好得例子:

def outer_function(x):
    def inner_function(y):
        if y == 1:
            print("y = 1")
        elif x == 1 and y == 1:
            print("x == 1 and y == 1")

    return inner_function  # 返回函数对象而非立即执行

result_func = outer_function(3)  # 获取返回的函数对象
result_func(1)  # 调用返回的函数并传入参数

​​​​​​​

作者:量子边缘

物联沃分享整理
物联沃-IOTWORD物联网 » Python函数嵌套的使用技巧

发表回复