python context 上下文 總結

2021-10-17 18:46:58 字數 1934 閱讀 2218

在python中上下文是乙個看得見摸得著的物件,我們當前程式跑的環境資訊都可以被稱為上下文。

在多執行緒中,新建立乙個執行緒就意味著新 建立乙個上下文(thread local),而多執行緒裡的多個上下文相互隔離,這也是flask實現的高明之處。

常見上下文的使用場景:

flask 裡面的dispatch 函式,就是為每個request 建立乙個類似於threadlocal的一種東西,在檢視函式中使用的request ,session,g 相互隔離

with 用法,開啟乙個問題 open

物件導向裡 class 中定義 __enter__ 和__exit__ 來定製 with 用法,可以用於連線,斷開,資源釋放

@contextmanager 裝飾乙個生成器函式,就是含有yield 

@closing 包函式

click 模組中也有ctx的使用,可以在不同命令通過裡面呼叫上下文的方式傳遞資料

舉例 :

class 

class query(object):

def __init__(self, name):

self.name = name

def __enter__(self):

print('begin')

return self

def __exit__(self, exc_type, exc_value, traceback):

if exc_type:

print('error')

else:

print('end')

def query(self):

print('query info about %s...' % self.name)

with query('bob') as q:

q.query()

@contextmanager

from contextlib import contextmanager

class query(object):

def __init__(self, name):

self.name = name

def query(self):

print('query info about %s...' % self.name)

@contextmanager

def create_query(name):

print('begin')

q = query(name)

yield q

print('end')

#在上下文中返回乙個物件

with create_query('bob') as q:

q.query()

@contextmanager

def tag(name):

print("<%s>" % name)

yield

print("" % name)

#不返回

with tag("h1"):

print("hello")

print("world")

closing

from contextlib import closing

from urllib.request import urlopen

with closing(urlopen('')) as page:

for line in page:

print(line)

其實closing 也是基於contextmanager實現的

@contextmanager

def closing(thing):

try:

yield thing

finally:

thing.close()

tail 上下 英語方位 上下 單詞

east東 west西 south南 north北 southeast東南 southwest西南 northwest西北 northeast東北 east southeast東南偏東 east northeast東北偏東 south southeast東南偏南 south southwest西南偏...

上下文 上下文棧

全域性 函式 區域性 在執行全域性 前將window確定為全域性執行上下文 對全域性資料進行預處理 var定義的全域性變數 undefined,新增為window的屬性 function宣告的全域性函式 賦值 fun 新增為window的方法 this 賦值 window 開始執行全域性 在呼叫函式...

中斷上下文 程序上下文

在學習與作業系統相關的知識時候,我們經常遇到程序上下文 中斷上下文,看似熟悉又感覺不是特別清晰。這裡我們從如下幾個方面進行描述。上下文是從英文中context翻譯過來的,指的是一種環境。上下文我們看起來不怎麼熟悉,但是我們可以看context的中文翻譯,或者我們能更加的情形些。context n 語...