日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...

發布時間:2025/3/19 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 上下文管理器

一個類只要實現了 __enter__() 和 __exit__() 這個兩個方法,通過該類創建的對象我們就稱之為上下文管理器。

上下文管理器可以使用 with 語句,with語句之所以這么強大,背后是由上下文管理器做支撐的,也就是說剛才使用 open 函數創建的文件對象就是就是一個上下文管理器對象。

自定義上下文管理器類,模擬文件操作:

定義一個File類,實現 __enter__() 和 __exit__() 方法,然后使用 with 語句來完成操作文件, 示例代碼:

# 自定義上下文管理器類 class File(object):def __init__(self, file_name, file_mode):self.file_name = file_nameself.file_mode = file_modedef __enter__(self):# 上文方法,負責返回操作對象資源,比如:文件對象,數據庫連接對象self.file = open(self.file_name, self.file_mode)return self.filedef __exit__(self, exc_type, exc_val, exc_tb):# 下文方法,負責釋放對象資源,比如:關閉文件,關閉數據庫連接對象self.file.close()print('over')# with語句 結合上下文管理器對象使用 with File('1.txt', 'r') as f:# content = f.read()# print(content)f.write('qqq') # 報錯,但是仍然執行了關閉連接操作

代碼說明:

  • __enter__ 表示上文方法,需要返回一個操作文件對象
  • __exit__ 表示下文方法,with語句執行完成會自動執行,即使出現異常也會執行該方法

2. 上下文管理器裝飾器方式實現

假如想要讓一個函數成為上下文管理器,Python 還提供了一個 @contextmanager 的裝飾器,更進一步簡化了上下文管理器的實現方式。通過 yield 將函數分割成兩部分,yield 上面的語句在 __enter__ 方法中執行,yield 下面的語句在 __exit__ 方法中執行,緊跟在 yield 后面的參數是函數的返回值。

from contextlib import contextmanager# 加上裝飾器,那么下面函數創建的對象就是一個上下文管理器 @contextmanager def my_open(file_name, file_mode):global filetry:file = open(file_name, file_mode)# yield關鍵字之前的代碼可以認為是上文方法,負責返回操作對象資源yield fileexcept Exception as e:print(e)finally:# yield關鍵字后面的代碼可以認為是下文方法,負責釋放操作對象的資源file.close()print('over')# 普通函數不能結合with語句使用 with my_open('1.txt', 'r') as file:# content = file.read()# print(content)file.write('1')

轉載于CSDN

Python上下文管理器_南枝向暖北枝寒-CSDN博客?blog.csdn.net

如有侵權請聯系刪除。

感謝關注和點贊

總結

以上是生活随笔為你收集整理的此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。