Python 的 with 語句

術語:

要使用 with 語句,首先要明白上下文管理器這一律念。有了上下文管理器,with 語句才能工做。 下面是一組與上下文管理器和with 語句有關的概念.code

  • 上下文管理協議(Context Management Protocol)orm

    • 包含方法 enter() 和 exit(),支持該協議的對象要實現這兩個方法。
  • 上下文管理器(Context Manager)對象

    • 支持上下文管理協議的對象,這種對象實現了__enter__() 和 exit() 方法。上下文管理器定義執行 with 語句時要創建的運行時上下文,負責執行 with 語句塊上下文中的進入與退出操做。一般使用 with 語句調用上下文管理器,也能夠經過直接調用其方法來使用。
  • 運行時上下文(runtime context)utf-8

    • 由上下文管理器建立,經過上下文管理器的 enter() 和__exit__() 方法實現,enter() 方法在語句體執行以前進入運行時上下文,exit() 在語句體執行完後從運行時上下文退出。with 語句支持運行時上下文這一律念
  • 上下文表達式(Context Expression)it

    • with 語句中跟在關鍵字 with 以後的表達式,該表達式要返回一個上下文管理器對象.
  • 語句體(with-body)io

    • with 語句包裹起來的代碼塊,在執行語句體以前會調用上下文管理器的 enter() 方法,執行完語句體以後會執行 exit() 方法.

例子:自定義支持 with 語句的對象

# -*- coding: utf-8 -*-


class WithTest(object):
    def __init__(self, name):
        self.name = name

    def __enter__(self):
        # 進入的時候載入該方法,return 類自己
        print "Frist Step:Enter Function"
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        # 退出的時候執行該方法, 上面的參數是必備的.能夠在這裏作一些判斷、清理和抱錯等工做
        print "Last Step: exit function"

    def printf_name(self):
        # 類方法.使用as f 後能夠直接用f調用
        return "Your Name is {}".format(self.name)


with WithTest("Hero") as f:
    print f.name
    print f.printf_name()
相關文章
相關標籤/搜索