Python中閉包的簡單介紹(附範例)

不言
發布: 2018-10-10 15:45:15
轉載
2575 人瀏覽過

這篇文章帶給大家的內容是關於Python中閉包的簡單介紹(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

一:簡介
   函數式程式設計不是程式必須要的,但對於化簡程式有很重要的作用。
   Python中一切都是對象,函數也是對象

   a = 1
    a = 'str'
    a = func
登入後複製

二:閉包

閉包是由函數及其相關的引用環境組合而成的實體(即:閉包=函數環境變數)
如果在一個內部函數裡,對在外部作用域(但不是在全域作用域)的變數進行引用,那麼內部函數就被認為是閉包(closure),這個是最直白的解釋!而且這個變數的值不會被模組中相同的變數值所修改!

三:閉包的作用

少使用全域變量,閉包可以避免使用全域變數
   可以實現在函數外部呼叫函數內部的值:
   print(f .__closure__[0].cell_contents)
   # 傳回閉包中環境變數的值!
   模組操作是不能實現的!

# ----------------------------------------------#
# 闭包
# ----------------------------------------------#
# 函数内部定义函数
def curve_pre():
    def curve():
        print("抛物线")
        pass
    return curve
# 不能直接调用函数内部的函数
# curve()
func = curve_pre()
func()
def curve_pre1():
    a = 25  # 环境变量a的值在curve1外部

    def curve1(x):
        print("抛物线")
        return a * x ** 2
    return curve1       # 返回了的闭包
f = curve_pre1()
result = f(2)
print(result)
# 当在外部定义变量的时候,结果不会改变
a = 10
print(f(2))
print(f.__closure__)    # 检测函数是不是闭包
print(f.__closure__[0].cell_contents)    # 返回闭包中环境变量的值!
# ----------------------------------------------#
# 闭包的实例
# ----------------------------------------------#
def f1():
    m = 10
    def f2():
        m = 20  # 局部变量
        print("1:", m)  # m = 20
    print("2:", m)      # m = 10
    f2()
    print("3:", m)      # m = 10,臂包里面的值不会影响闭包外面的值
    return f2
f1()
f = f1()
print(f.__closure__)    # 判断是不是闭包

# ----------------------------------------------#
# 闭包解决一个问题
# ----------------------------------------------#
# 在函数内部修改全局变量的值计算某人的累计步数
# 普通方法实现
sum_step = 0


def calc_foot(step=0):
    global sum_step
    sum_step = sum_step + step


while True:
    x_step = input('step_number:')
    if x_step == ' ':   # 输入空格结束输入
        print('total step is ', sum_step)
        break
    calc_foot(int(x_step))
    print(sum_step)

# 闭包方式实现----->少使用全局变量,闭包可以避免


def factory(pos):

    def move(step):
        nonlocal pos    # 修改外部作用域而非全局变量的值
        new_pose = pos + step
        pos = new_pose  # 保存修改后的值
        return pos

    return move


tourist = factory(0)
print(tourist(2))
print(tourist(2))
print(tourist(2))
登入後複製

以上是Python中閉包的簡單介紹(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板