欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python上下文管理器協(xié)議的實(shí)現(xiàn)

 更新時(shí)間:2022年06月23日 16:02:58   作者:henry_rhy  
這篇文章主要介紹了python上下文管理器協(xié)議的實(shí)現(xiàn),在python中所有實(shí)現(xiàn)了上下文管理器協(xié)議的對(duì)象 都可以用使用with操作,with啟動(dòng)了對(duì)象的上下文管理器

前言

在上下文管理器協(xié)議的過(guò)程中,涉及到兩個(gè)魔術(shù)方法__enter__方法 和 __exit__方法

  • 在python中所有實(shí)現(xiàn)了上下文管理器協(xié)議的對(duì)象 都可以用使用with操作
  • with啟動(dòng)了對(duì)象的上下文管理器

上下文管理器協(xié)議:

  • __enter__方法: 進(jìn)入enter方法返回的結(jié)果被as后面的變量接收
  • exit: 退出with中所有的語(yǔ)句執(zhí)行完畢執(zhí)行 執(zhí)行 exit

實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件操作來(lái)看下上下文管理器協(xié)議:

class MyOpen:
?? ?# 實(shí)例化
? ? def __init__(self, filename, mode, encoding):
? ? ? ? self.filename = filename
? ? ? ? self.mode = mode
? ? ? ? self.encoding = encoding

? ? def __enter__(self):
? ? ? ? print("---enter---方法")
? ? ? ? # 執(zhí)行文件打開(kāi)操作
? ? ? ? self.f = open(self.filename, self.mode, encoding=self.encoding)
? ? ? ? return self.f

? ? def __exit__(self, exc_type, exc_val, exc_tb):
? ? ? ? """
? ? ? ? :param exc_type: 異常類型
? ? ? ? :param exc_val: 異常信息
? ? ? ? :param exc_tb: 異常溯源對(duì)象
? ? ? ? :return:
? ? ? ? """
? ? ? ? print('----enter---')
? ? ? ? self.f.close()
with MyOpen('hr.txt', 'w', encoding='utf-8') as f:
? ? print(f.write('當(dāng)前打開(kāi)了文件,寫入了數(shù)據(jù):23323232'))

用pymysql實(shí)現(xiàn)一個(gè)操作數(shù)據(jù)庫(kù)的類,實(shí)現(xiàn)上下文管理器協(xié)議,實(shí)現(xiàn)退出上下文時(shí),自動(dòng)關(guān)閉游標(biāo),斷開(kāi)連接

todo:版本1

# todo:版本1:
class mysql_db(object):
? ? #實(shí)例化屬性
? ? def __init__(self):

1.連接數(shù)據(jù)庫(kù)

? ? ? ? self.cou = pymysql.connect(
? ? ? ? ? ? host= "數(shù)據(jù)庫(kù)主機(jī)地址", ?
? ? ? ? ? ? port= 端口, ?
? ? ? ? ? ? user="登錄數(shù)據(jù)庫(kù)的賬號(hào)", ?
? ? ? ? ? ? password="登錄數(shù)據(jù)庫(kù)的密碼",?
? ? ? ? ? ? database="數(shù)據(jù)庫(kù)名稱", ?
? ? ? ? ? ? charset='utf8', ? ? 編碼格式
? ? ? ? ? ? cursorclass=pymysql.cursors.DictCursor ? ? 將默認(rèn)的元組格式轉(zhuǎn)換成字典格式輸出
? ? ? ? )? 

2.創(chuàng)建游標(biāo)

? ? ? ? self.cur = self.cou.cursor()
? ? def __enter__(self):
? ? ? ? return self.cur ? ? ? 返回cur對(duì)象
? ? def __exit__(self, exc_type, exc_val, exc_tb):
? ? ? ? """
? ? ? ? :param exc_type: 異常類型
? ? ? ? :param exc_val: 異常信息
? ? ? ? :param exc_tb: 異常溯源對(duì)象
? ? ? ? :return:
? ? ? ? """
? ? ? ? #關(guān)閉游標(biāo)
? ? ? ? self.cur.close()
? ? ? ?# 關(guān)閉數(shù)據(jù)庫(kù)連接
? ? ? ? self.cou.close()
def Obtain_one_date():
? ? with mysql_db() as db:
? ? ? ? db.execute('select * from t_customer LIMIT 4') ? ? 使用execute方法進(jìn)行查詢語(yǔ)句
? ? ? ? content = db.fetchone() ?返回一條數(shù)據(jù)的查詢的結(jié)果
? ? ? ? print(content)

# 函數(shù)調(diào)用
Obtain_one_date()

todo:版本2

sql = 'select * from t_customer LIMIT 4'
def mysql_db1(**kwargs):
? ? return pymysql.connect(host=kwargs.get('host', 'xxxx'),
? ? ? ? ? ? ? ? ? ? ? ? ? ?user=kwargs.get("user",'xxxx'),
? ? ? ? ? ? ? ? ? ? ? ? ? ?passwd=kwargs.get("passwd",'xxxx'),
? ? ? ? ? ? ? ? ? ? ? ? ? ?database=kwargs.get("database",'xxxx'),
? ? ? ? ? ? ? ? ? ? ? ? ? ?port=kwargs.get('port', xxxx),
? ? ? ? ? ? ? ? ? ? ? ? ? ?charset=kwargs.get('charset', 'utf8'))

1.創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象

cou = mysql_db1()

2.創(chuàng)建游標(biāo)

with cou.cursor() as cu:
? ? cu.execute(sql) ? ? ?使用execute方法進(jìn)行查詢語(yǔ)句
? ? commt = cu.fetchone() ? ? 返回一條數(shù)據(jù)的查詢的結(jié)果
? ? print(commt)

# 函數(shù)調(diào)用
mysql_db1()

到此這篇關(guān)于python上下文管理器協(xié)議的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python上下文管理器 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)代碼統(tǒng)計(jì)程序

    python實(shí)現(xiàn)代碼統(tǒng)計(jì)程序

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)代碼統(tǒng)計(jì)程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Python使用pip安裝Matplotlib的方法詳解

    Python使用pip安裝Matplotlib的方法詳解

    在網(wǎng)上看見(jiàn)許多matplotlib的安裝教程都是比較復(fù)雜,需要配置許多環(huán)境,對(duì)于電腦基礎(chǔ)不好的人來(lái)說(shuō)可是一件頭疼的事情,今天我介紹一個(gè)簡(jiǎn)單的安裝方法,下面這篇文章主要給大家介紹了關(guān)于Python使用pip安裝Matplotlib的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 詳解model.train()和model.eval()兩種模式的原理與用法

    詳解model.train()和model.eval()兩種模式的原理與用法

    這篇文章主要介紹了詳解model.train()和model.eval()兩種模式的原理與用法,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,那么看完這篇文章一定會(huì)對(duì)你有所幫助
    2023-03-03
  • 在Linux命令行中運(yùn)行Python腳本的流程步驟

    在Linux命令行中運(yùn)行Python腳本的流程步驟

    Python是一種高級(jí)編程語(yǔ)言,被廣泛應(yīng)用于數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、Web 開(kāi)發(fā)等領(lǐng)域,在Linux操作系統(tǒng)中,Python是一個(gè)默認(rèn)安裝的解釋器,用戶可以通過(guò)命令行界面(CLI)來(lái)運(yùn)行Python腳本,在本文中,我們將詳細(xì)介紹如何在Linux命令行中運(yùn)行Python腳本,需要的朋友可以參考下
    2023-11-11
  • 十條建議幫你提高Python編程效率

    十條建議幫你提高Python編程效率

    這篇文章主要為大家介紹了十條建議,可以幫你提高Python編程效率的10條,想要提升提高Python編程效率的朋友不要錯(cuò)過(guò)
    2016-02-02
  • 關(guān)于tf.reverse_sequence()簡(jiǎn)述

    關(guān)于tf.reverse_sequence()簡(jiǎn)述

    今天小編就為大家分享一篇關(guān)于tf.reverse_sequence()簡(jiǎn)述,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python愛(ài)心表白 每天都是浪漫七夕!

    python愛(ài)心表白 每天都是浪漫七夕!

    每天都是浪漫七夕!這篇文章主要為大家詳細(xì)介紹了python愛(ài)心表白,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Python入門篇之對(duì)象類型

    Python入門篇之對(duì)象類型

    本章中我們將講述Python的對(duì)象類型,包括數(shù)字、整型、布爾型、長(zhǎng)整形、浮點(diǎn)型、復(fù)數(shù)型、字符串、列表、元組、字典等。
    2014-10-10
  • keras load model時(shí)出現(xiàn)Missing Layer錯(cuò)誤的解決方式

    keras load model時(shí)出現(xiàn)Missing Layer錯(cuò)誤的解決方式

    這篇文章主要介紹了keras load model時(shí)出現(xiàn)Missing Layer錯(cuò)誤的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • python/golang 刪除鏈表中的元素

    python/golang 刪除鏈表中的元素

    這篇文章主要介紹了python/golang 如何刪除鏈表中的元素,幫助大家更好的理解和使用python/golang,感興趣的朋友可以了解下
    2020-09-09

最新評(píng)論