日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python开发【第七篇】: 面向对象和模块补充

發(fā)布時(shí)間:2024/4/14 python 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python开发【第七篇】: 面向对象和模块补充 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)容概要

  • ? 特殊成員
  • ?反射
  • ?configparser模塊
  • ?hashlib模塊
  • ?logging模塊
  • ?異常處理
  • ?模塊
  • ?包
  • ?

    1. 特殊成員

    什么是特殊成員呢? __init_()就是個(gè)特殊的成員. 帶雙下劃線的都是特殊方法. 這些方法在特殊的場(chǎng)景的時(shí)候會(huì)被自動(dòng)的執(zhí)行. 比如
      1. 類名() 會(huì)自動(dòng)執(zhí)行__init__()
      2. 對(duì)象() 會(huì)自動(dòng)執(zhí)行__call__()
      3. 對(duì)象[key] 會(huì)自動(dòng)執(zhí)行__getitem__()
      4. 對(duì)象[key] = value 會(huì)自動(dòng)執(zhí)行__setitem__()
      5. del 對(duì)象[key] 會(huì)自動(dòng)執(zhí)行 __delitem__()
      6. 對(duì)象+對(duì)象 會(huì)自動(dòng)執(zhí)行 __add__()
      7. with 對(duì)象 as 變量 會(huì)自動(dòng)執(zhí)行__enter__ 和__exit__
      8. 打印對(duì)象的時(shí)候 會(huì)自動(dòng)執(zhí)行 __str__
      9. 干掉可哈希 __hash__ == None 對(duì)象就不可哈希了.

    ?

    ?

    創(chuàng)建對(duì)象的真正步驟:

    首先, 在執(zhí)行類名()的時(shí)候. 系統(tǒng)會(huì)自動(dòng)先執(zhí)行__new__()來(lái)開(kāi)辟內(nèi)存. 此時(shí)新開(kāi)辟出來(lái)的內(nèi)存區(qū)域是空的. 緊隨其后, 系統(tǒng)自動(dòng)調(diào)用__init__()來(lái)完成對(duì)象的初始化?作. 按照時(shí)間軸來(lái)算.

      1. 加載類
      2. 開(kāi)辟內(nèi)存(__new__)
      3. 初始化(__init__)
      4. 使用對(duì)象干xxx

    類似的操作還有很多很多. 我們不需要完全刻意的去把所有的特殊成員全都記住. 實(shí)戰(zhàn)中也用不到那么多. 用到了查就是了.

    ?

    單例模式:

    class Foo(object):_instance = None # 實(shí)例# 先def __new__(cls, *args, **kwargs):if Foo._instance == None:Foo._instance = object.__new__(cls) # 開(kāi)辟內(nèi)存return Foo._instance# 后def __init__(self):print("我是一個(gè)簡(jiǎn)單的__init__")f1 = Foo() # 第一步先執(zhí)行__new__分配內(nèi)存, 第二步執(zhí)行__init__初始化這段內(nèi)存 f2 = Foo() print(f1) print(f2) View Code

    ?

    2. 反射

    python面向?qū)ο笾械姆瓷?#xff1a;通過(guò)字符串的形式操作對(duì)象相關(guān)的屬性。python中的一切事物都是對(duì)象(都可以使用反射)

    關(guān)于反射, 一共有4個(gè)函數(shù):
      1. hasattr(obj, str)        判斷obj中是否包含str成員
      2. getattr(obj,str)       ?? 從obj中獲取str成員
      3. setattr(obj, str, value)    ? 把obj中的str成員設(shè)置成value. 注意. 這里的value可以是值, 也可以是函數(shù)或者方法
      4. delattr(obj, str)       ? 把obj中的str成員刪除掉

    注意, 以上操作都是在內(nèi)存中進(jìn)行的. 并不會(huì)影響源代碼

    ?

    四個(gè)方法的使用示例:

    class Foo:f = "類的靜態(tài)變量"def __init__(self,name,age):self.name = nameself.age = agedef func1(self):print("hi, %s" %self.name)obj = Foo("zhouxingxing",18)# 拿著功能的名字,去對(duì)象或者模塊里找對(duì)應(yīng)的功能 print(hasattr(obj,'name')) # True 存在返回True print(hasattr(obj,'func1')) # True print(hasattr(obj,'gender')) # False 不存在返回False# 獲取屬性 # getattr(object, name, default=None) n = getattr(obj,"name") print(n) # lishichaofunc = getattr(obj,"func1") func() # hi, lishichao# print(getattr(obj,"aaaa")) # AttributeError: 'Foo' object has no attribute 'aaaa' 報(bào)錯(cuò)# 第三個(gè)參數(shù):默認(rèn)值,如果該屬性不存在,則使用默認(rèn)值 print(getattr(obj,"aaaa","不存在啊")) # 不存在啊# 設(shè)置屬性 # setattr(object,name,value) setattr(Foo,"f1","類的靜態(tài)變量") # 設(shè)置類變量 setattr(obj,"sb",True) # 設(shè)置實(shí)例變量 setattr(obj,"show_name",lambda self:self.name+"sb") # 設(shè)置屬性 print(obj.__dict__) # {'name': 'lishichao', 'age': 18, 'sb': True, 'show_name': <function <lambda> at 0x00000000021E1730>} print(obj.show_name(obj)) # zhouxingxingsb# 刪除屬性 delattr(obj,"age") delattr(obj,"show_name") # delattr(obj,"name111") #不存在,則報(bào)錯(cuò)。 AttributeError: name111 print(obj.__dict__) # {'name': 'zhouxingxing', 'sb': True} 在內(nèi)存中都被刪掉了 View Code

    ?

    反射當(dāng)前模塊成員:

    import sysdef s1():print('s1')def s2():print('s2')this_mod = sys.modules[__name__] # <module '__main__' from 'E:/python-25期課上代碼/day07/課上代碼/02 反射.py'> print(hasattr(this_mod,"s1")) # True func = getattr(this_mod,"s2") func() # s2 View Code

    導(dǎo)入其他模塊,利用反射查找該模塊是否存在某個(gè)方法

    #!/usr/bin/env python3 # _*_ coding:utf-8 _*_def t1():print('from the t1')def t2():print('from the t2')def t3():print('from the t3')money = "25000" master import master while 1:# 根據(jù)用戶輸入的功能進(jìn)行調(diào)用tool = input("請(qǐng)輸入你要執(zhí)行的功能的名字:") # chi# 拿著功能的名字,去對(duì)象或者模塊里找對(duì)應(yīng)的功能# has 有 attr 屬性if hasattr(master, tool):# 把這個(gè)功能拿出來(lái)fn = getattr(master, tool)if callable(fn): # 判斷是否可以被調(diào)用fn() # 調(diào)用函數(shù)else:print(fn) # 打印變量else:print("沒(méi)有這個(gè)功能") 導(dǎo)入master

    ?

    # 對(duì)象中的反射,類本身也是對(duì)象(python 一切皆對(duì)象)

    class Foo(object):staticField = "old boy"def __init__(self):self.name = 'wupeiqi'def func(self):return 'func'@staticmethoddef bar():return 'bar'obj = Foo() print(getattr(Foo, 'staticField')) func1 = getattr(Foo, 'func') print(func1(obj)) func2 = getattr(Foo, 'bar') print(func2()) View Code

    ?

    ?

    3. configparser模塊

      該模塊適用于配置文件件的格式與windows ini文件類似,可以包含一個(gè)或多個(gè)節(jié)(section)每個(gè)節(jié)可以有多個(gè)參數(shù)(鍵=值). 首先, 我們先看一個(gè)xxx服務(wù)器的配置文件

    [DEFAULT] ServerAliveInterval = 45 Compression = yes CompressionLevel = 9 ForwardX11 = yes[server] User = hg Bind = 0.0.0.0 Port = 8888[client] IP = 127.0.0.0 Port = 50022 ForwardX11 = no

    ?

    我們用configparser就可以對(duì)這樣的文件進(jìn)行處理.首先, 是初始化

    # 1. 初始化 import configparser config = configparser.ConfigParser()config["DEFAULT"] = {"sleep": 1000,"session-time-out": 30,"user-alive": 999999 }config["TEST-DB"] = {"db_ip": "192.168.17.189","port": "3306","u_name": "root","u_pwd": "123456" }config['168-DB'] = {"db_ip": "152.163.18.168","port": "3306","u_name": "root","u_pwd": "123456" }f = open("config.ini",mode="w") config.write(f) # 寫入文件 f.flush() f.close()# 讀取文件信息: config = configparser.ConfigParser()config.read("config.ini") # 讀取文件 print(config.sections()) # 獲取到所有section(章節(jié))。 [DEFAULT]是默認(rèn)信息,每個(gè)章節(jié)都有[DEFAULT]中的信息 # 執(zhí)行結(jié)果: ['TEST-DB', '168-DB']# 從章節(jié)中獲取到任意的數(shù)據(jù),get 方法Section下的key對(duì)應(yīng)的value print(config.get("TEST-DB","db_ip")) # 執(zhí)行結(jié)果: 192.168.17.189# 也可以像字典一樣操作 print(config["TEST-DB"]['db_ip']) print(config["168-DB"]["db_ip"]) # 執(zhí)行結(jié)果: # 192.168.17.189 # 152.163.18.168# 循環(huán)TEST-DB章節(jié)下的所有key for k in config["TEST-DB"]:print(k)# 所有key:value for k,v in config["TEST-DB"].items():print(k,v)print(config.options("TEST-DB")) # 同for循環(huán),找到 "TEST-DB"下所有鍵 # ['db_ip', 'port', 'u_name', 'u_pwd', 'sleep', 'session-time-out', 'user-alive']print(config.items("TEST-DB")) # 找到 "TEST-DB"下所有鍵值對(duì) # [('sleep', '1000'), ('session-time-out', '30'), ('user-alive', '999999'), ('db_ip', '192.168.17.189'), ('port', '3306'), ('u_name', 'root'), ('u_pwd', '123456')] View Code

    ?

    增刪改操作:

    # 先讀取. 然后修改. 最后寫回文件 config = configparser.ConfigParser() config.read("config.ini") # 讀取文件# 添加一個(gè)章節(jié) config.add_section("172-DB") config["172-DB"] = {"db_ip": "172.168.12.11","port": "3306","u_name": "root","u_pwd": "123456" }# 修改信息 config.set("168-DB","db_ip","10.0.3.26")# 刪除章節(jié) config.remove_section("TEST-DB")# 刪除元素信息 config.remove_option("168-DB","db_ip")# 寫回文件 config.write(open("config.ini",mode="w")) View Code

    ?

    ?

    4. MD5加密

      MD5是一種不可逆的加密算法. 它是可靠的. 并且安全的. 在python中我們不需要手寫這一套算法. 只需要引入hashlib模塊就能搞定MD5的加密工作

    import hashlib
    # 1. 創(chuàng)建對(duì)象 obj = hashlib.md5() # 2. 把要加密的內(nèi)容寫入對(duì)象 obj.update("lishichao".encode("utf-8")) # 加密的必須是字節(jié) # 3. 獲取到MD5 miwen = obj.hexdigest() print(miwen) # 5f71293582408cc955d1a41fc434d29a

    ?

    那這樣的密文安全么? 其實(shí)是不安全的. 當(dāng)我們用這樣的密文去找一個(gè)所謂的MD5解密工具. 是有可能解密成功的.?

    ?

      MD5不是不可逆么? 注意. 這里有一個(gè)叫撞庫(kù)的問(wèn)題. 就是. 由于MD5的原始算法已經(jīng)存在很久了. 那就有一些人用一些簡(jiǎn)單的排列組合來(lái)計(jì)算MD5. 然后當(dāng)出現(xiàn)相同的MD5密文的時(shí)候就很容易反推出原來(lái)的數(shù)據(jù)是什么. 所以并不是MD5可逆,而是有些別有用心的人把MD5的常見(jiàn)數(shù)據(jù)已經(jīng)算完并保留起來(lái)了.
    那如何應(yīng)對(duì)呢? 加鹽就行了. 在使用MD5的時(shí)候. 給函數(shù)的參數(shù)傳遞一個(gè)byte即可.

    import hashlib # 1. 創(chuàng)建對(duì)象,2. 加鹽 obj = hashlib.md5(b"asjdkanoiwhdwbiohjixvzx") # 3. 把要加密的內(nèi)容寫入對(duì)象 obj.update("lishichao".encode("utf-8")) # 加密的必須是字節(jié) # 4. 獲取到MD5 miwen = obj.hexdigest() print(miwen) # 4404442131473d354913e82270dad0a1

    ?

    md5的應(yīng)用:

    def my_md5(s):obj = hashlib.md5(b"asjdkanoiwhdwbiohjixvzx")obj.update(s.encode("utf-8"))miwen = obj.hexdigest()return miwenusername = "" password = ""# 用戶登錄 def login():uname = input("請(qǐng)輸入用戶名:")upwd = input("請(qǐng)輸入密碼:")if uname == username and my_md5(upwd) == password:print("登錄成功")else:print("登錄失敗")# 用戶注冊(cè) def reg():global usernameglobal passworduname = input("請(qǐng)輸入用戶名:")upwd = input("請(qǐng)輸入密碼:")username = unamepassword = my_md5(upwd) # 密碼放密文reg() login() View Code

    ?

    文件的MD5,用來(lái)校驗(yàn)文件是否傳輸完整:

    obj = hashlib.md5(b"asjdkanoiwhdwbiohjixvzx")# 文件獲取MD5值 f = open("test.txt",mode="r",encoding="utf-8") for i in f:obj.update(i.encode("utf-8"))miwen = obj.hexdigest() print(miwen) # 5fcda51b94a2e76d0322881d457c5c4f# 修改文件內(nèi)容后MD5值會(huì)有變化: # be6e5639222ad8a950eaa98e7e66dc73 View Code

    ?

    5. 日志

    論日志的重要性,統(tǒng)計(jì)數(shù)據(jù),報(bào)錯(cuò)信息,程序運(yùn)行記錄都由日志記錄。在python中創(chuàng)建日志系統(tǒng):
      1. 導(dǎo)入logging模塊.
      2. 簡(jiǎn)單配置logging
      3. 出現(xiàn)異常的時(shí)候(except). 向日志中寫錯(cuò)誤信息.

    ?

    # 對(duì)日志系統(tǒng)進(jìn)行配置
    # 單日志系統(tǒng)

    1 # filename: 文件名 2 # format: 數(shù)據(jù)的格式化輸出. 最終在日志文件中的樣子 3 # 時(shí)間-名稱-級(jí)別-模塊: 錯(cuò)誤信息 4 # datefmt: 時(shí)間的格式 5 # level: 錯(cuò)誤的級(jí)別權(quán)重, 當(dāng)錯(cuò)誤的級(jí)別權(quán)重大于等于leval的時(shí)候才會(huì)寫入文件 6 7 logging.basicConfig(filename='x1.txt', # 日志文件名 8 # %(asctime) 時(shí)間 9 # %(name) root 10 # %(levelname)s 事件的嚴(yán)重性 11 # %(module)s 不用管 12 # %(message) 13 format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s', 14 datefmt='%Y-%m-%d %H:%M:%S', # 時(shí)間格式 15 level=30) # 記錄日志的最低級(jí)別 16 17 # 如何使用(重點(diǎn)) 18 logging.critical("我是critical 我最牛B") # 級(jí)別最高的日志 50 19 logging.error("我是error, 我第二牛B") # 程序員的錯(cuò) 40 20 logging.warning("我是warning, 警告") # 警告. 不一定會(huì)出錯(cuò) 30 21 logging.info("我是info, 普通日志") # 不是問(wèn)題. 如果輸出的量很大. 也很麻煩 20 22 logging.debug("比屁都小的事兒都記錄") # 級(jí)別最低. 粒度最大 10 23 logging.log(999, "皮炎平") 24 25 26 # CRITICAL = 50 27 # FATAL = CRITICAL 28 # ERROR = 40 29 # WARNING = 30 30 # WARN = WARNING 31 # INFO = 20 32 # DEBUG = 10 33 # NOTSET = 0 View Code

    ?

    ?# 多文件日志系統(tǒng)

    # 創(chuàng)建一個(gè)操作日志的對(duì)象logger(依賴FileHandler) file_handler1 = logging.FileHandler('l1.log', 'a', encoding='utf-8') file_handler1.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")) logger1 = logging.Logger('汽車融資租賃', level=logging.ERROR) logger1.addHandler(file_handler1)file_handler2 = logging.FileHandler('l2.log', 'a', encoding='utf-8') file_handler2.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")) logger2 = logging.Logger('IHOS醫(yī)療衛(wèi)生綜合服務(wù)系統(tǒng)', level=logging.ERROR) logger2.addHandler(file_handler2)logger1.error("我出錯(cuò)了. 我的車找不到了") logger2.error("醫(yī)院丟了") View Code

    ?

    即輸出到屏幕,又寫入到文件

    import logging # 創(chuàng)建 logging 對(duì)象 logger = logging.getLogger()# 創(chuàng)建文件對(duì)象 fh1 = logging.FileHandler("a1.log",encoding="utf-8")# 創(chuàng)建屏幕對(duì)象 sh = logging.StreamHandler()# 日志格式 formater1 = logging.Formatter(fmt='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s', # 顯示格式datefmt='%Y-%m-%d %H:%M:%S',)formater2 = logging.Formatter(fmt='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s', # 顯示格式datefmt='%Y-%m-%d %H:%M:%S',)# 給對(duì)象綁定格式 fh1.setFormatter(formater1) sh.setFormatter(formater2)# 給logger對(duì)象添加其他對(duì)象 logger.addHandler(fh1) logger.addHandler(sh)# 設(shè)置logger級(jí)別 logger.setLevel(10)fh1.setLevel(40) sh.setLevel(50)logging.debug('調(diào)試模式') # 10 logging.info('正常運(yùn)行') # 20 logging.warning('警告') # 30 logging.error('錯(cuò)誤') # 40 logging.critical('系統(tǒng)崩了') # 50 View Code

    ?

    6. 異常處理?

      什么是異常? 異常是程序在運(yùn)行過(guò)程中產(chǎn)生的錯(cuò)誤. 我們先制造一個(gè)錯(cuò)誤. 來(lái)看看異常長(zhǎng)什么樣.

    def chu(a, b):return a/b ret = chu(10, 0) print(ret)# 執(zhí)行結(jié)果: Traceback (most recent call last):File "E:/python-25期課上代碼/day07/課上代碼/06 異常處理.py", line 5, in <module>ret = chu(10, 0)File "E:/python-25期課上代碼/day07/課上代碼/06 異常處理.py", line 4, in chureturn a/b ZeroDivisionError: division by zero View Code

    ?

      什么錯(cuò)誤呢. 除法中除數(shù)不能是0. 那如果真的出了這個(gè)錯(cuò). 你把這一堆信息拋給客戶么? 肯定不能. 那如何處理呢??

    def chu(a, b):return a/btry:ret = chu(10, 0)print(ret) except Exception as e:print("除數(shù)不能是0")# 執(zhí)行結(jié)果: 除數(shù)不能是0 View Code

      try ... except 是嘗試著運(yùn)行xxx代碼. 出現(xiàn)了錯(cuò)誤. 就執(zhí)行except后面的代碼. 在這個(gè)過(guò)程中. 當(dāng)代碼出現(xiàn)錯(cuò)誤的時(shí)候. 系統(tǒng)會(huì)產(chǎn)生一個(gè)異常對(duì)象. 然后這個(gè)異常會(huì)向外拋. 被except攔截. 并把接收到的異常對(duì)象賦值給e. e就是異常對(duì)象.
      Exception 是所有異常的基類, 也就是異常的根. 換句話說(shuō). 所有的錯(cuò)誤都是Exception的子類對(duì)象. 我們看到的ZeroDivisionError 其實(shí)就是Exception的子類.
      Exception 表示所有的錯(cuò)誤. 太籠統(tǒng)了. 所有的錯(cuò)誤都會(huì)被認(rèn)為是Exception.當(dāng)程序中出現(xiàn)多種錯(cuò)誤的時(shí)候, 就不好分類了, 最好是出什么異常就用什么來(lái)處理.在try...execpt語(yǔ)句中.

    還可以寫更多的except:

    ?

    try:print("各種操作....") except ZeroDivisionError as e:print("除數(shù)不能是0") except FileNotFoundError as e:print("?件不存在") except Exception as e:print("其他錯(cuò)誤")

      此時(shí). 程序運(yùn)行過(guò)程中. 如果出現(xiàn)了ZeroDivisionError就會(huì)被第一個(gè)except捕獲. 如果出現(xiàn)了FileNotFountError就會(huì)被第二個(gè)except捕獲. 如果都不是這兩個(gè)異常. 那就會(huì)被最后的Exception捕獲. 總之最后的Exception就是我們異常處理的最后一個(gè)守門員. 這時(shí)我們最常用的一套寫法.

    接下來(lái). 給出一個(gè)完整的異常處理寫法(語(yǔ)法):

    try: '''操作''' except Exception as e:'''異常的父類,可以捕獲所有的異常''' else:'''保護(hù)不拋出異常的代碼, 當(dāng)try中無(wú)異常的時(shí)候執(zhí)行''' finally:'''最后總是要執(zhí)行我'''

      解讀: 程序先執(zhí)行操作, 然后如果出錯(cuò)了會(huì)走except中的代碼. 如果不出錯(cuò), 執(zhí)行else中的代碼. 不論處不出錯(cuò). 最后都要執(zhí)行finally中的語(yǔ)句. 一般我們用try...except就夠用了. 頂多加上finally. finally一般用來(lái)作為收尾工作.?

    示例:

    def chu(a, b):return a/btry:chu(10, 0) except Exception as e:print("其他錯(cuò)誤") else:print("沒(méi)有異常,正常執(zhí)行") finally:print("不管有沒(méi)有異常,最后要執(zhí)行我") # 執(zhí)行結(jié)果: # 其他錯(cuò)誤 # 不管有沒(méi)有異常,最后要執(zhí)行我try:chu(10, 2) except Exception as e:print("其他錯(cuò)誤") else:print("沒(méi)有異常,正常執(zhí)行") finally:print("不管有沒(méi)有異常,最后要執(zhí)行我") # 執(zhí)行結(jié)果: # 沒(méi)有異常,正常執(zhí)行 # 不管有沒(méi)有異常,最后要執(zhí)行我 View Code

    ?

    上面是處理異常. 我們?cè)趫?zhí)行代碼的過(guò)程中如果出現(xiàn)了一些條件上的不對(duì)等. 根本不符合我的代碼邏輯. 比如. 參數(shù). 我要求你傳遞一個(gè)數(shù)字. 你非得傳遞一個(gè)字符串. 那對(duì)不起. 我沒(méi)辦法幫你處理. 那如何通知你呢? 兩個(gè)方案.
      方案一. 直接返回即可.
      方案二. 拋出一個(gè)異常.


    第一種不夠好,無(wú)法起到警示作用,所以直接拋一個(gè)錯(cuò)誤出去. 那怎么拋呢? 我們要用到raise關(guān)鍵字

    def add(a, b):""" 求和運(yùn)算""" if not type(a) == int and not type(b) == int: # 當(dāng)程序運(yùn)行到這句話的時(shí)候. 整個(gè)函數(shù)的調(diào)用會(huì)被中斷. 并向外拋出一個(gè)異常.raise Exception("不是整數(shù), 無(wú)法運(yùn)算")return a + b# 如果調(diào)用方不處理異常. 那產(chǎn)生的錯(cuò)誤將會(huì)繼續(xù)向外拋. 最后就拋給了用戶 add("你好", "我叫賽利亞") # Exception: 不是整數(shù), 無(wú)法運(yùn)算# 如果調(diào)用方處理了異常. 那么錯(cuò)誤就不會(huì)丟給用戶. 程序也能正常進(jìn)行? try:add("a", "b") except Exception as e:print("報(bào)錯(cuò)了.自己處理去吧") # 報(bào)錯(cuò)了.自己處理去吧 View Code

      當(dāng)程序運(yùn)行到raise. 程序會(huì)被中斷. 并實(shí)例化后面的異常對(duì)象. 拋給調(diào)用方. 如果調(diào)用方不處理. 則會(huì)把錯(cuò)誤繼續(xù)向上拋出. 最終拋給用戶. 如果調(diào)用方處理了異常. 那程序可以正常的執(zhí)行.

    ?

    自定義異常:

      自己寫的代碼中出現(xiàn)了一個(gè)無(wú)法用現(xiàn)有的異常來(lái)解決問(wèn)題的時(shí)候,需要自定義異常
      自定義異常: 寫的類繼承了Exception類. 那這個(gè)類就是一個(gè)異常類.

    ?

    class GenderError(Exception):passclass Person:def __init__(self, name, gender):self.name = nameself.gender = genderdef Man(p): # 女if p.gender != "":raise GenderError("進(jìn)錯(cuò)了,這里是男澡堂") # 拋出異常else:print("歡迎光臨")p1 = Person("alex", "") p2 = Person("景女神", "")Man(p2) # 報(bào)錯(cuò),程序就停了 Man(p1)# 處理異常 try:Man(p2)Man(p1) except GenderError as e:print(e) # e => 進(jìn)錯(cuò)了,這里是男澡堂? except Exception as e:print("反正報(bào)錯(cuò)了") 示例

    ?

    我們?cè)谡{(diào)試的時(shí)候, 最好是能看到錯(cuò)誤源自于哪里,需要引入另一個(gè)模塊traceback. 這個(gè)模塊可以獲取到我們每個(gè)方法的調(diào)用信息.又被成為堆棧信息. 這個(gè)信息用來(lái)排錯(cuò)是很有幫助的.

    import traceback# 繼承 Exception 就是異常類 class GenderError(Exception):passclass Person:def __init__(self,name,gender):self.name = nameself.gender = genderdef Man(person):if person.gender != "":raise GenderError("性別不對(duì)")p1 = Person("周星星","") p2 = Person("張敏","")# Man(p1) # Man(p2) # 報(bào)錯(cuò) 會(huì)拋出異常: GenderError# 處理異常 try:Man(p1)Man(p2) except GenderError as e:val = traceback.format_exc() # 獲取到堆棧信息print(e)print(val) except Exception as e:print("反正報(bào)錯(cuò)了") View Code

    ?

    執(zhí)行結(jié)果:

    當(dāng)測(cè)試代碼的時(shí)候把堆棧信息打印出來(lái). 但是當(dāng)?shù)搅司€上的生產(chǎn)環(huán)境的時(shí)候把這個(gè)堆棧去掉即可.?

    ?

    異常信息記錄日志:

    import logging import tracebacklogging.basicConfig(filename='error.log', # 日志文件名# %(asctime) 時(shí)間# %(name) root# %(levelname)s 事件的嚴(yán)重性# %(module)s 不用管# %(message)format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',datefmt='%Y-%m-%d %H:%M:%S', # 時(shí)間格式level=30) # 記錄日志的最低級(jí)別try:print(1/0) except Exception:logging.error(traceback.format_exc()) View Code

    ?

    ?

    日志內(nèi)容:

    ?

    ?

    7. 模塊

    01.? 模塊
    什么是模塊. 模塊就是一個(gè)包含了python定義和聲明的文件, 文件名就是模塊的名字加上.py后綴。我們寫的py文件都可以看成是一個(gè)模塊但是我們import加載的模塊一共分成四個(gè)通用類別:
      1. 使用pyhton編寫的py文件
      2. 已被變異為共享庫(kù)或者DLL或C或者C++的擴(kuò)展
      3. 包好組模塊的包.
      4. 使用c編寫并連接到python解釋器的內(nèi)置模塊

    為什么要使用模塊? 為了我們寫的代碼可以重用. 不至于把所有的代碼都寫在一個(gè)文件內(nèi). 當(dāng)項(xiàng)目規(guī)模比較大的時(shí)候. 就必須要把相關(guān)的功能進(jìn)行分離. 方便維護(hù)和開(kāi)發(fā)。

    如何使用模塊?導(dǎo)入模塊有兩種方式
    1. import 模塊
    2. from xxx import xxx


    02. import

    ?示例文件:自定義模塊my_module.py,文件名my_module.py,模塊名my_module

    # 自定義模快 my_module.py # 示例文件:文件名my_module.py,模塊名my_module print('from the my_module.py')money=1000def read1():print('my_module->read1->money',money)def read2():print('my_module->read2 calling read1')read1()def change():global moneymoney=0 my_module

    ?

    引用 my_module 模塊

    # 導(dǎo)入模塊 import my_module print(my_module.money) # 使用模塊中定義好的變量my_module.read1() # 調(diào)用模塊中的函數(shù) View Code

    ?

    在Python中模塊是不能夠重復(fù)導(dǎo)入的. 當(dāng)重復(fù)導(dǎo)入模塊時(shí). 系統(tǒng)會(huì)根據(jù) sys.modules 來(lái)判斷該模塊是否已經(jīng)導(dǎo)入了. 如果已經(jīng)導(dǎo)入. 則不會(huì)重復(fù)導(dǎo)入

    import sys print(sys.modules.keys()) # 查看導(dǎo)入的模塊. import my_module # 導(dǎo)入模塊. 此時(shí)會(huì)默認(rèn)執(zhí)行該模塊中的代碼 import my_module # 該模塊已經(jīng)導(dǎo)入過(guò)了. 不會(huì)重復(fù)執(zhí)行代碼 import my_module import my_module import my_module import my_module# 執(zhí)行結(jié)果: # dict_keys(['builtins', 'sys', '_frozen_importlib', '_imp', '_warnings', '_thread', '_weakref', '_frozen_importlib_external', '_io', 'marshal', 'nt', 'winreg', 'zipimport', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_weakrefset', 'site', 'os', 'errno', 'stat', '_stat', 'ntpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', 'sysconfig', 'sitecustomize']) # from the my_module.py View Code

    ?

    導(dǎo)入模塊的時(shí)候都做了些什么? 首先. 在導(dǎo)入模塊的一瞬間. python解釋器會(huì)先通過(guò)sys.modules來(lái)判斷該模塊是否已經(jīng)導(dǎo)入了該模塊. 如果已經(jīng)導(dǎo)入了則不再導(dǎo)入. 如果該模塊還未導(dǎo)入過(guò). 則系統(tǒng)會(huì)做三件事.

      1. 為導(dǎo)入的模塊創(chuàng)立新的名稱空間
      2. 在新創(chuàng)建的名稱空間中運(yùn)行該模塊中的代碼
      3. 創(chuàng)建模塊的名字. 并使用該名稱作為該模塊在當(dāng)前模塊中引用的名字.

    我們可以使用globals來(lái)查看模塊的名稱空間

    print(globals()) {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000001DBB518>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/python-25期課上代碼/day07/課上代碼/07 模塊.py', '__cached__': None, 'sys': <module 'sys' (built-in)>, 'my_module': <module 'my_module' from 'E:\\python-25期課上代碼\\day07\\課上代碼\\my_module.py'>}

    ?

    由于模塊在導(dǎo)入的時(shí)候會(huì)創(chuàng)建其自己的名稱空間. 所以. 我們?cè)谑褂媚K中的變量的時(shí)候一般是不會(huì)產(chǎn)生沖突的

    import my_modlue money = 2000 print(my_module.money) # 模塊中的變量 print(money) #自己的變量 # 執(zhí)行結(jié)果: # 1000 # 2000 View Code

    ?

    為模塊名起別名,相當(dāng)于m1=1;m2=m1?

    import my_module as sm print(sm.money)

    ?

    在一行導(dǎo)入多個(gè)模塊

    import sys,os,re

    ?

    ?

    模塊搜索路徑:

      python解釋器在啟動(dòng)時(shí)會(huì)自動(dòng)加載一些模塊,可以使用sys.modules查看

      在第一次導(dǎo)入某個(gè)模塊時(shí)(比如my_module),會(huì)先檢查該模塊是否已經(jīng)被加載到內(nèi)存中(當(dāng)前執(zhí)行文件的名稱空間對(duì)應(yīng)的內(nèi)存),如果有則直接引用

      如果沒(méi)有,解釋器則會(huì)查找同名的內(nèi)建模塊,如果還沒(méi)有找到就從sys.path給出的目錄列表中依次尋找my_module.py文件。

      所以總結(jié)模塊的查找順序是:內(nèi)存中已經(jīng)加載的模塊->內(nèi)置模塊->sys.path路徑中包含的模塊

    # windows: python解釋器模塊搜索路徑是項(xiàng)目根目錄,和當(dāng)前目錄,通過(guò) sys.path 查看模塊搜索路徑 # linux: 只有當(dāng)前的目錄,需要 sys.path.append() 把項(xiàng)目根目錄添加進(jìn)去

    ?

    main是什么,main是程序的入口

    我們可以通過(guò)模塊的全局變量__name__來(lái)查看模塊名: 當(dāng)做腳本運(yùn)行: __name__ 等于'__main__'當(dāng)做模塊導(dǎo)入: __name__= 模塊名def main():
      pass
    if __name__ == "__main__": # 啟動(dòng)文件, 被當(dāng)做模塊導(dǎo)入時(shí) 不執(zhí)行。main()

    ?

    正確的導(dǎo)入模塊的順序:
      1. 所有的模塊導(dǎo)入都要寫在最上?. 這是最基本的
      2. 先引入內(nèi)置模塊
      3. 再引入擴(kuò)展模塊
      4. 最后引入你自己定義的模塊

    ?


    03. from xxx import? xxx

    在使用from的時(shí)候, python也會(huì)給我們的模塊創(chuàng)建名稱空間. 這一點(diǎn)和import是一樣的. 但是from xxx import xxx的時(shí)候. 我們是把這個(gè)空間中的一些變量引入過(guò)來(lái)了. 說(shuō)白了. 就是部分導(dǎo)入. 當(dāng)這個(gè)模塊中的內(nèi)容過(guò)多的時(shí)候. 可以選擇性的導(dǎo)入要使用的內(nèi)容

    from my_module import read1 read1()

    此時(shí)是可以正常運(yùn)行的. 但是我們省略了之前的模塊.函數(shù)() 直接函數(shù)()就可以執(zhí)行了, 并且from語(yǔ)句也支持一行語(yǔ)句導(dǎo)入多個(gè)內(nèi)容.

    from my_module import read1,read2,change read1() read2() change()

    ?

    同樣支持as

    from my_module import read1 as rd rd()

    ?

    from? xxx? import? *?

    是把模塊中的所有內(nèi)容都導(dǎo)入. 注意, 如果模塊中沒(méi)有寫出__all__ 則默認(rèn)所有內(nèi)容都導(dǎo)入. 如果寫了__all__ 此時(shí)導(dǎo)入的內(nèi)容就是在__all__列表中列出來(lái)的所有名字.

    # haha.py __all__ = ["money", "chi"] money = 100def chi(): print("我是吃") def he(): print("我是呵呵")# test.py from haha import * chi() print(money) # he() # 報(bào)錯(cuò) View Code

    ?

    最后. 看一下from的坑. 當(dāng)我們從一個(gè)模塊中引入一個(gè)變量的時(shí)候. 如果當(dāng)前文件中出現(xiàn)了重名的變量時(shí). 會(huì)覆蓋掉模塊引入的那個(gè)變量.

    from my_module import money money = 10 print(money) # 10

    ?

      所以. 不要重名. 切記. 不要重名! 不僅僅是變量名不要重復(fù). 我們自己創(chuàng)建的py文件的名字不要和系統(tǒng)內(nèi)置的模塊重名. 否則. 引入的模塊都是python內(nèi)置的模塊.

    ?

    ?

    ?

    8. 包

    什么是包?

      包是一種通過(guò) '.模塊名' 來(lái)組織python模塊名稱空間的方式. 那什么樣的東西是包呢? 我們創(chuàng)建的每個(gè)文件夾都可以被稱之為包. 但是我們要注意, 在python2中規(guī)定. 包內(nèi)必須存在__init__.py文件. 創(chuàng)建包的目的不是為了運(yùn)行, 而是被導(dǎo)入使用. 包只是一種形式而已. 包的本質(zhì)就是一種模塊

    為何要使包?

      包的本質(zhì)就是一個(gè)文件夾, 那么文件夾唯一的功能就是將文件組織起來(lái),隨著功能越寫越多, 我們無(wú)法將所有功能都放在一個(gè)文件中, 于是我們使用模塊去組織功能,隨著模塊越來(lái)越多, 我們就需要用文件夾將模塊文件組織起來(lái), 以此來(lái)提高程序的結(jié)構(gòu)性和可維護(hù)性

    ?

    首先, 我們先創(chuàng)建一些包. 用來(lái)作為接下來(lái)的學(xué)習(xí). 包很好創(chuàng)建. 只要是一個(gè)文件夾, 有__init__.py就可以

    ?創(chuàng)建目錄結(jié)構(gòu):

    import os os.makedirs('glance/api') os.makedirs('glance/cmd') os.makedirs('glance/db') l = [] l.append(open('glance/__init__.py','w')) l.append(open('glance/api/__init__.py','w')) l.append(open('glance/api/policy.py','w')) l.append(open('glance/api/versions.py','w')) l.append(open('glance/cmd/__init__.py','w')) l.append(open('glance/cmd/manage.py','w')) l.append(open('glance/db/__init__.py','w')) l.append(open('glance/db/models.py','w')) map(lambda f:f.close() ,l) View Code

    ?

    #文件內(nèi)容 #policy.py def get():print('from policy.py')#versions.py def create_resource(conf):print('from version.py: ',conf)#manage.py def main():print('from manage.py')#models.py def register_models(engine):print('from models.py: ',engine) 文件內(nèi)容

    ?

    ?

    ?包的導(dǎo)入:

      1.關(guān)于包相關(guān)的導(dǎo)入語(yǔ)句也分為import和from ... import ...兩種,但是無(wú)論哪種,無(wú)論在什么位置,在導(dǎo)入時(shí)都必須遵循一個(gè)原則:凡是在導(dǎo)入時(shí)帶點(diǎn)的,點(diǎn)的左邊都必須是一個(gè)包,否則非法。可以帶有一連串的點(diǎn),如item.subitem.subsubitem,但都必須遵循這個(gè)原則。

      2.對(duì)于導(dǎo)入后,在使用時(shí)就沒(méi)有這種限制了,點(diǎn)的左邊可以是包,模塊,函數(shù),類(它們都可以用點(diǎn)的方式調(diào)用自己的屬性)。

      3.對(duì)比import item 和from item import name的應(yīng)用場(chǎng)景:
       如果我們想直接使用name那必須使用后者。

    ?

    ?import ,在與包 glance 同級(jí)別的文件中測(cè)試,test.py文件。

    import glance.db.models glance.db.models.register_models("mysql")

    ?

    from ... import ...

    需要注意的是from后import導(dǎo)入的模塊,必須是明確的一個(gè)不能帶點(diǎn),否則會(huì)有語(yǔ)法錯(cuò)誤,如:from a import b.c是錯(cuò)誤語(yǔ)法

    還是 test.py 與 glance 目錄同級(jí)

    from glance.db import models models.register_models("mysql")from glance.db.models import register_models register_models("redis")

    ?

    __init__ 文件

      不管是哪種方式,只要是第一次導(dǎo)入包或者是包的任何其他部分,都會(huì)依次執(zhí)行包下的__init__.py文件(我們可以在每個(gè)包的文件內(nèi)都打印一行內(nèi)容來(lái)驗(yàn)證一下),這個(gè)文件可以為空,但是也可以存放一些初始化包的代碼。

    ?

    ?

    from? glance.api? import? *

    ?

    ?

    在講模塊時(shí),我們已經(jīng)討論過(guò)了從一個(gè)模塊內(nèi)導(dǎo)入所有*,此處我們研究從一個(gè)包導(dǎo)入所有*。

    ?

    此處是想從包api中導(dǎo)入所有,實(shí)際上該語(yǔ)句只會(huì)導(dǎo)入包api下 __init__. py文件中定義的名字,我們可以在這個(gè)文件中定義__all___:

    ?

    ?

    #在__init__.py中定義 print("我是api包下的__init__.py文件") x=10def func():print('from api.__init.py')__all__=['x','func','policy'] api目錄下的__init.py

    ?

    ?

    此時(shí)我們?cè)谟?glance 同級(jí)的 test.py 文件中執(zhí)行 from glance.api import * 就導(dǎo)入__all__中的內(nèi)容(versions仍然不能導(dǎo)入)。

    ?

    ?

    from glance.api import * policy.get() print(x) func() versions.create_resource("config.ini") # 報(bào)錯(cuò),沒(méi)有導(dǎo)入# 我是api包下的__init__.py文件 # from policy.py # 10 # from api.__init.py test.py

    ?

    ?

    ?

    絕對(duì)導(dǎo)入和相對(duì)導(dǎo)入

    ?

    我們的最頂級(jí)包glance是寫給別人用的,然后在glance包內(nèi)部也會(huì)有彼此之間互相導(dǎo)入的需求,這時(shí)候就有絕對(duì)導(dǎo)入和相對(duì)導(dǎo)入兩種方式:

    ?

    絕對(duì)導(dǎo)入:以glance作為起始

    ?

    相對(duì)導(dǎo)入:用. 或者.. 的方式做為起始(只能在一個(gè)包中使用,不能用于不同目錄內(nèi))

    ?

    例如:我們?cè)?glance/api/version.py 中想要導(dǎo)入 glance/cmd/manage.py

    # 絕對(duì)導(dǎo)入 import sys # from glance.cmd import manage# 相對(duì)導(dǎo)入 # ValueError: attempted relative import beyond top-level package # versions不能作為啟動(dòng)文件, 啟動(dòng)文件要與glance在同級(jí)目錄 from ..cmd import managedef create_resource(conf):manage.main()print('from version.py: ',conf) glance/api/version.py

    ?

    測(cè)試結(jié)果:在于glance同級(jí)的 test.py 文件中測(cè)試

    ?

    ?

    # 啟動(dòng)文件 from glance.api import versionsif __name__ == '__main__':versions.create_resource("config") 啟動(dòng)文件

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/root0/p/10430805.html

    總結(jié)

    以上是生活随笔為你收集整理的Python开发【第七篇】: 面向对象和模块补充的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    麻豆91在线播放 | av理论电影 | 中文字幕乱在线伦视频中文字幕乱码在线 | 日本中文字幕高清 | 97精品久久 | 99久久影视 | av片在线观看 | 日本中文字幕免费观看 | 午夜12点| 国产无遮挡又黄又爽在线观看 | 国产不卡在线观看视频 | 黄色三级在线看 | 天天射天天射天天射 | 天天干天天干天天 | 天天夜夜亚洲 | 免费看污污视频的网站 | 99re6热在线精品视频 | 欧美在线视频精品 | 国产精品久久久久久影院 | 国产免费成人 | 久久婷婷国产色一区二区三区 | 中文在线字幕免费观看 | 日韩啪视频| 一区免费在线 | 亚洲综合色视频 | 欧美亚洲一级片 | 欧美成人一区二区 | 国产一区二区三区在线 | 2023年中文无字幕文字 | 日本中文字幕视频 | 日韩av免费在线电影 | 深爱激情开心 | 成人在线观看免费视频 | 激情综合六月 | 国产亚洲精品美女 | 天天视频色版 | a色视频| 久草| 九九国产精品视频 | 玖玖精品视频 | 国产老熟 | 欧美激情综合五月色丁香 | 探花视频在线观看+在线播放 | 色婷婷福利 | 国产亚洲精品久久久久久移动网络 | 丁香婷婷综合五月 | 色狠狠狠| 亚洲三级影院 | 久99久精品视频免费观看 | 日韩视频在线观看视频 | 色九九影院 | 超碰大片 | 中文十次啦 | 国产精品不卡在线观看 | 中文字幕在线看视频国产中文版 | 亚洲一区精品二人人爽久久 | 久久久国产日韩 | 亚洲精品mv在线观看 | 色综合久久88色综合天天人守婷 | 天天色天天爱天天射综合 | 天天操天 | 国产精品福利午夜在线观看 | 黄色亚洲大片免费在线观看 | 日本3级在线观看 | 亚洲综合爱 | 久久久久国产精品厨房 | 欧美成人精品欧美一级乱 | 亚洲精品免费在线播放 | 91精品国产高清 | 黄污网站在线观看 | 91在线观看视频 | 国产精品99久久久久久人免费 | 又黄又爽免费视频 | 激情av资源网 | 成人毛片在线观看 | 日韩精品在线免费观看 | 97电影院网 | 亚洲激情电影在线 | 亚洲国产最新 | 国产高清视频在线播放一区 | 九九免费在线观看视频 | 亚洲六月丁香色婷婷综合久久 | 国产97视频 | 日韩理论电影在线 | 美国av片在线观看 | 久久国产经典视频 | 狠狠干天天 | 精品伊人久久久 | 日韩免费网站 | 欧美日韩在线免费观看 | 日本午夜免费福利视频 | 亚洲欧美成人网 | 伊甸园av在线 | 久久精品网站免费观看 | 精品一二三区 | 午夜丁香网 | 操操操操网 | 一级做a爱片性色毛片www | 国产精品久久久久久a | 中文字幕日韩无 | 成人小视频在线播放 | 色综合久久综合中文综合网 | 欧美91视频| 亚洲精品一区中文字幕乱码 | 99在线高清视频在线播放 | 国产精品视频观看 | 久久黄色美女 | 黄色亚洲大片免费在线观看 | 国产黄色免费观看 | 国产精品18久久久久久首页狼 | 丁香六月综合网 | 男女免费av| 国产精品 日韩精品 | 亚洲.www | 久久久久久国产精品亚洲78 | 久久精品久久久久 | 97人人射 | 五月婷婷开心 | 99这里只有久久精品视频 | 91视频免费网站 | 天天摸天天操天天舔 | 色综合久久久久综合99 | 日日草天天干 | 91九色丨porny丨丰满6 | 国产成人一区二区三区在线观看 | 亚洲一区二区三区miaa149 | 狠狠色综合网站久久久久久久 | 精品五月天 | 天操夜夜操 | 在线最新av| 午夜av免费看 | 国产综合小视频 | 欧美a在线看 | 亚洲精选视频在线 | 国产黄色免费看 | 成年人免费在线播放 | 青青草在久久免费久久免费 | 碰超人人 | 黄色亚洲片 | 丁香激情综合久久伊人久久 | 午夜视频黄 | 一区二区三区免费在线播放 | 久久久久久久久久电影 | 国产一区久久久 | 久久免费视频8 | 在线观看免费日韩 | 91精品在线观看入口 | 激情综合色图 | 九九热免费在线视频 | 精品一区二区6 | 欧美精品免费视频 | 草在线 | 久久精品日产第一区二区三区乱码 | 亚洲男男gaygayxxxgv | 麻豆一区在线观看 | 97超碰人人爱 | 日本精品久久久一区二区三区 | 国产精品爽爽久久久久久蜜臀 | 91大神精品视频在线观看 | 中文字幕欧美日韩va免费视频 | 中文字幕在线播放日韩 | 日韩精选在线观看 | 精品久久久久久久久久国产 | 99在线观看视频网站 | www.亚洲在线| 精品亚洲视频在线 | 欧美精品小视频 | 日韩视频免费观看高清 | 国产精品99免视看9 国产精品毛片一区视频 | 成年人免费看片 | 天天操月月操 | 91黄色在线视频 | 97香蕉视频 | 91精品一区二区三区久久久久久 | 午夜精品视频一区 | 亚洲国产精品va在线看黑人 | 亚洲精选视频免费看 | 99热这里只有精品1 av中文字幕日韩 | 一区二区三区四区精品 | 亚洲在线成人精品 | www.黄色片网站 | 97av影院 | 九九九热精品免费视频观看网站 | av中文字幕网站 | 国产精品国产三级国产不产一地 | 一区二区三区精品在线 | 亚洲精品视频在线观看免费视频 | 日韩av电影免费在线观看 | 亚洲色图 校园春色 | 中字幕视频在线永久在线观看免费 | 国产资源中文字幕 | 五月婷婷在线综合 | 国产一二三区av | 日韩精品一区二区三区免费观看 | 激情丁香在线 | 狠狠色噜噜狠狠狠合久 | 亚洲视频每日更新 | 一区二区三区日韩视频在线观看 | 中文字幕4| 干干夜夜| 在线91av | 久久99热这里只有精品国产 | 丁香婷婷在线观看 | 免费日韩 精品中文字幕视频在线 | 国产中文字幕一区 | 日韩va在线观看 | 精品久久久久久久久久岛国gif | 久久成人福利 | 欧美日本在线视频 | 综合影视 | 最新av观看| 97精品超碰一区二区三区 | 9在线观看免费高清完整 | 又长又大又黑又粗欧美 | 久久蜜桃av | 亚洲五月激情 | 狠狠狠狠狠色综合 | 色综合夜色一区 | 久久久久久久久久影院 | 久久精品美女 | 在线观看av免费观看 | 亚洲影音先锋 | 十八岁以下禁止观看的1000个网站 | 97国产大学生情侣白嫩酒店 | 日韩精品视频免费在线观看 | 在线观看aa| 久久99国产精品久久99 | 91亚洲国产成人久久精品网站 | 91麻豆产精品久久久久久 | 国产精品久久久久久电影 | 中文成人字幕 | 国产成人精品久久二区二区 | av一级免费 | 青春草国产视频 | 国产精品国产三级国产aⅴ9色 | 日韩欧美高清视频在线观看 | av电影 一区二区 | 日韩最新av在线 | 午夜国产一区 | 91成人免费视频 | 69国产盗摄一区二区三区五区 | 国产精品一区免费看8c0m | 四虎国产永久在线精品 | 亚洲人久久 | 色综合天天综合网国产成人网 | 欧美一区二区在线免费看 | 国产成人精品一区二区三区在线观看 | 久久夜色精品国产欧美一区麻豆 | 丁香五婷 | 国产精品一区免费观看 | 日韩三级在线观看 | 99久久精品无码一区二区毛片 | 伊人影院av| 亚洲久久视频 | 精品麻豆 | 日韩美女黄色片 | 久久精品高清视频 | 在线一级片 | 24小时日本在线www免费的 | www久久99 | 国产欧美在线一区二区三区 | 日韩精品1区2区 | 亚洲国产中文字幕 | 精品91| 夜夜操夜夜干 | 91视频在线国产 | 色在线高清 | 亚洲一级性 | 亚洲精品字幕在线 | 免费观看xxxx9999片 | 久久资源在线 | 亚洲视频免费在线观看 | av资源在线观看 | 久久第四色 | 三级黄色在线观看 | 国产91在线看| 又色又爽的网站 | 麻豆精品在线视频 | 国产精品21区 | 人人草在线视频 | 久久线视频 | 超碰人人国产 | 一区二区三区免费看 | 91av原创| 日韩中文在线电影 | 亚洲精品国产视频 | 一区二区男女 | 91av中文字幕 | 欧美综合色 | 久久色在线观看 | 在线观看一区二区视频 | 久久久久二区 | 亚洲综合最新在线 | 久操中文字幕在线观看 | 久久国产精品影片 | 96超碰在线 | 在线性视频日韩欧美 | 一区二区三区精品在线视频 | 一区二区中文字幕在线 | 久久国产色 | 九九久久视频 | 国产又黄又猛又粗 | 在线日本看片免费人成视久网 | www.天天色 | 六月激情久久 | 亚洲午夜av电影 | 日韩精品视频在线免费观看 | 最新影院 | 欧美日韩高清在线观看 | 91香蕉视频污在线 | 99九九视频| 黄色精品久久久 | 免费亚洲婷婷 | 九九一级片 | 日韩免费电影 | 亚洲视频免费在线观看 | 激情五月综合网 | 天堂在线视频免费观看 | 手机av资源 | 久久久久国产一区二区三区四区 | 午夜久久久精品 | 久草在| 国产高清视频免费观看 | 日韩精品久久久久久久电影99爱 | 色婷婷综合视频在线观看 | 一二三区在线 | 久久av中文字幕片 | 国产视频中文字幕在线观看 | 日躁夜躁狠狠躁2001 | 偷拍区另类综合在线 | 久久草 | 久久久久久久久久久久影院 | 欧美日韩在线播放 | 99精品毛片| 成年人免费看片网站 | 久久中文网 | 精品一区在线看 | 国产第一二区 | 久久夜夜爽 | 免费日韩 精品中文字幕视频在线 | 国产乱老熟视频网88av | 久久精品亚洲一区二区三区观看模式 | 国产视频 亚洲精品 | 日本三级不卡视频 | 日韩中文幕 | 久久久福利视频 | 色综合天天 | 黄色片网站av | 91精品夜夜| 激情综合网五月激情 | 少妇激情久久 | 97超碰在线免费 | 欧美成人中文字幕 | 97操操操| 久久久久久久久久亚洲精品 | 一区二区三区在线电影 | 欧美一区二区免费在线观看 | 婷婷激情影院 | 亚洲精品免费在线观看视频 | 99热99re6国产在线播放 | 亚洲精品午夜视频 | 国产一区二区三区久久久 | 日韩av手机在线看 | 日韩精品一卡 | a'aaa级片在线观看 | 久久久免费看视频 | 激情综合五月天 | 在线观看mv的中文字幕网站 | 国产精品18久久久久vr手机版特色 | 久久综合免费 | 欧美性精品 | 久久精品久久99精品久久 | 亚洲成人av在线播放 | 亚洲.www | 亚洲春色成人 | 少妇性xxx | 天堂av在线 | 九九天堂 | 久久免费视频网站 | 男女激情网址 | 成人久久 | www.婷婷com| 午夜精品视频一区 | 国产黄色高清 | 国内精品久久久久久 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 国产高清精品在线 | 亚洲精品合集 | 亚洲成人精品在线 | 丁香六月激情婷婷 | 97超级碰碰碰视频在线观看 | 免费久久视频 | 日韩精品专区在线影院重磅 | 91av免费在线观看 | 日韩亚洲国产中文字幕 | 一级做a爱片性色毛片www | 亚洲视频每日更新 | 欧美影片| 日韩在线视频在线观看 | 人人搞人人搞 | 国产精品精品久久久久久 | 久久精品国产一区二区三区 | 国产精品中文字幕av | 91丨九色丨高潮丰满 | 日韩黄色中文字幕 | 亚洲精品在线免费观看视频 | 国产精品久久久久久五月尺 | 国产成人av电影在线 | 999视频精品| 天天操夜夜叫 | 亚洲 综合 激情 | 蜜桃麻豆www久久囤产精品 | 亚洲免费一级 | 超碰国产在线观看 | 国产精品青草综合久久久久99 | 久热国产视频 | 精品福利av | 亚洲毛片一区二区三区 | 亚洲精品自拍 | 最近高清中文字幕 | 国产96在线 | 久草在线官网 | 国产日韩欧美视频在线观看 | 色播五月激情五月 | 久久99精品久久久久婷婷 | 人人射| 日韩欧美国产视频 | 婷婷中文字幕 | 91成人久久| 亚洲精品av中文字幕在线在线 | а天堂中文最新一区二区三区 | 国产精品久久麻豆 | 成 人 黄 色 视频 免费观看 | 日韩91在线| 亚洲永久精品在线观看 | 天天操天天舔天天干 | 福利网在线 | 人人干狠狠操 | 免费网址在线播放 | 欧美一级专区免费大片 | 欧美视频不卡 | 国产特级毛片aaaaaaa高清 | 五月激情天 | 久久电影国产免费久久电影 | 中文永久免费观看 | 久久亚洲专区 | 黄色天堂在线观看 | 久久综合婷婷 | 国产成人精品一区二区三区免费 | 九草视频在线观看 | 亚洲成aⅴ人片久久青草影院 | 日韩3区 | 成人一级免费电影 | 亚洲国产一区av | 久久国产高清视频 | 亚洲影院国产 | 亚洲永久精品一区 | 中文字幕av免费在线观看 | 欧美成人精品在线 | 国产精品综合久久久久 | 国产成人精品一区二区三区在线观看 | 欧美天天综合网 | 美女视频网站久久 | 91看片在线看片 | 欧美激情第一区 | 中文在线a√在线 | 黄色小说免费在线观看 | 日日躁夜夜躁xxxxaaaa | 亚洲精品视频国产 | 91资源在线观看 | 一区二区三区精品在线 | 久草在线资源免费 | 午夜av在线播放 | 久草在线一免费新视频 | 日韩在线观看影院 | 成人97视频 | 四虎国产精品成人免费4hu | 久久黄色免费观看 | 最近更新的中文字幕 | 91久久丝袜国产露脸动漫 | 国产在线播放不卡 | 2021久久 | 国产精品毛片一区二区 | 精品久久一二三区 | 国产精品免费视频久久久 | 精品久久久久久久久久久久 | 日本丶国产丶欧美色综合 | 国产色综合 | 免费人成网 | 日韩久久久久久久久 | 亚洲一区二区三区毛片 | 国产69久久久欧美一级 | 日本精品久久久久 | 91在线视频观看 | 免费看一级一片 | 中文字幕在线观看视频一区 | 伊人热 | 国产免费久久精品 | 中文字幕一区二区三区在线播放 | 一区二区三区四区影院 | 在线观看亚洲电影 | 精品高清美女精品国产区 | 国产999视频 | 三级av黄色 | 国产精品久久久久永久免费 | 中文字幕在线看 | 天天色天天上天天操 | 久久人网 | 亚洲影院国产 | 黄色字幕网 | 91精品办公室少妇高潮对白 | 91| 97综合在线 | www.狠狠插.com | 少妇bbbb搡bbbb搡bbbb | 天天av天天 | 国产大陆亚洲精品国产 | 亚洲欧洲日韩在线观看 | 国产久草在线观看 | 日韩视频中文字幕 | 综合婷婷丁香 | 亚洲最新av在线网址 | 91精品国产91久久久久久三级 | 91久久久久久国产精品 | 91在线网址| 国产一区在线看 | 久久黄色影视 | 久久久久久久久久网站 | 欧美日韩国产一区二 | 91在线超碰 | www.色爱 | 免费观看久久久 | 在线观看亚洲视频 | 四虎国产永久在线精品 | 麻豆视传媒官网免费观看 | 日韩毛片在线一区二区毛片 | 久久久免费精品视频 | 黄色午夜| 久久久久国产精品视频 | 丁香六月婷婷综合 | 国产视频黄 | 91精品国产九九九久久久亚洲 | 国产精品国产三级国产aⅴ无密码 | 久久久久久国产精品免费 | 亚洲黄色在线播放 | 久久人视频 | 久久久免费网站 | 国产精品午夜在线观看 | 日韩电影久久 | 福利二区视频 | 亚洲japanese制服美女 | 久久久观看 | 91精品国产91久久久久久三级 | 国产精品原创在线 | 欧美精品一区在线发布 | 欧美一区二区三区在线视频观看 | 91精品999| 国产视频日韩 | 91cn国产在线 | 免费黄av | 国产精品久久久久久久久久久久冷 | 成人午夜片av在线看 | 日韩精品免费一区二区 | 在线播放 日韩专区 | 久久综合影音 | 国产99久久99热这里精品5 | 久久区二区 | 精品专区| 免费久久99精品国产婷婷六月 | 在线色视频小说 | 日韩欧美在线视频一区二区 | aaa免费毛片 | 日韩中文字幕免费电影 | 久久av不卡 | 久草手机视频 | 激情久久伊人 | 999国产在线 | 毛片基地黄久久久久久天堂 | 国产精品美女在线 | 欧美a级片免费看 | 欧美黄网站 | 欧洲高潮三级做爰 | 麻豆精品国产传媒 | 九九涩涩av台湾日本热热 | 中文字幕一二三区 | 永久精品视频 | 亚洲精品小视频在线观看 | 91视频在线免费 | 久av电影 | 免费观看高清 | 国产视频一二三 | 国产精品网在线观看 | 日韩| 91黄色视屏 | 久久精品日产第一区二区三区乱码 | 欧美日韩视频在线播放 | 一区二区三区免费播放 | 在线观看日韩精品视频 | 久久在线播放 | 中文久草 | 日韩91在线 | 99热国内精品 | 国产无套精品久久久久久 | 99国产精品一区二区 | 在线观看色网站 | av天天澡天天爽天天av | 国产在线不卡精品 | 一本一本久久aa综合精品 | 一区二区精品视频 | 一区二区三区在线不卡 | 婷婷丁香自拍 | 一区二区视频免费在线观看 | 国产一区二区三区在线 | 精品视频9999| 在线观看久久久久久 | 国产精品久久久久久久妇 | 美女网站在线观看 | 久久久久久国产精品美女 | 日韩av福利在线 | 午夜私人影院久久久久 | 久久久久久久久久国产精品 | 欧美日韩国产综合一区二区 | 人人躁| 天天射天天爱天天干 | 色吊丝在线永久观看最新版本 | 午夜在线国产 | 香蕉视频在线免费 | 久久国产免费 | 久久久午夜精品福利内容 | 亚洲激情av | 久久视频这里有精品 | 日韩欧美一区二区三区黑寡妇 | 日韩av看片| 最近日本韩国中文字幕 | 久久精品国产精品 | 国产在线观看黄 | 国产精品人人做人人爽人人添 | 国产又粗又猛又黄又爽的视频 | 精品久久久久一区二区国产 | 久久精品99国产精品亚洲最刺激 | 二区三区在线观看 | 国产精品毛片一区视频播不卡 | 激情五月婷婷激情 | 久久伦理电影网 | 7777xxxx | 久久精品久久综合 | 国产精品一级在线 | 色大片免费看 | 97电影在线观看 | 91精品啪在线观看国产线免费 | 五月天中文字幕 | 蜜臀91丨九色丨蝌蚪老版 | 免费高清在线观看电视网站 | 国产精品视频不卡 | 色婷久久| 免费午夜网站 | 99久久婷婷国产一区二区三区 | 日韩在线电影观看 | 国产毛片久久久 | 欧美成人aa | 一区二区视频在线观看免费 | 亚洲视频久久久 | 麻豆免费视频观看 | 女人久久久久 | 91日韩在线播放 | 在线综合色 | 狠狠色丁香婷婷综合视频 | 五月花激情 | 成人在线观看你懂的 | 免费在线观看国产黄 | 天天插天天操天天干 | 最近免费中文字幕大全高清10 | 日韩精品国产一区 | 成人资源站 | 色妞色视频一区二区三区四区 | 五月婷在线观看 | www.狠狠操| 免费日p视频 | 天天插天天狠天天透 | 国产日本亚洲高清 | 亚洲国产中文字幕在线 | 日韩av免费在线看 | 国产精品视屏 | 人人爽久久久噜噜噜电影 | 国产成人黄色网址 | 国产精品久久网 | 免费在线观看黄网站 | 日韩激情片在线观看 | 天天色天天射天天综合网 | 国产 欧美 在线 | 亚洲成aⅴ人片久久青草影院 | 欧美日韩国产网站 | 亚洲精品高清视频在线观看 | 国产午夜精品一区二区三区四区 | 最近最新mv字幕免费观看 | 日日久视频 | 欧美天堂视频在线 | 天天爱天天操天天爽 | 91精品视频在线观看免费 | 日韩av成人在线观看 | 国产一卡在线 | 色多多污污 | 国产精品久久久久久久久久久久午夜 | 4438全国亚洲精品在线观看视频 | 日本中文字幕网址 | 97视频网址 | 天天综合五月天 | 国产精品免费久久久 | 在线а√天堂中文官网 | 欧美激情视频一区二区三区 | 国产中文字幕视频在线观看 | 亚洲涩涩色 | 国产精品九九九 | www.黄色片.com| 91av福利视频| 免费在线国产黄色 | 91亚瑟视频| 91视频链接 | 国产精在线 | 欧美 国产 视频 | 亚洲精品美女久久17c | 国产成人三级在线 | 日韩精品中文字幕一区二区 | 中文字幕欧美三区 | 西西44人体做爰大胆视频 | www色网站| 三级av在线| 色伊人网 | 天天干天天干天天操 | 欧美福利片在线观看 | 一本一本久久a久久精品牛牛影视 | 成人av资源| 欧美在线视频一区二区三区 | 免费亚洲视频在线观看 | 国产裸体无遮挡 | 园产精品久久久久久久7电影 | 中文字幕免费高 | 超黄视频网站 | 一级电影免费在线观看 | 亚洲四虎 | 成片免费 | 日韩免费三区 | 日韩一区二区三区不卡 | 中文字幕字幕中文 | 蜜臀av夜夜澡人人爽人人桃色 | 天天摸天天舔天天操 | 在线视频日韩一区 | 521色香蕉网站在线观看 | 国产专区精品 | 国产精品毛片完整版 | 日本高清免费中文字幕 | 97电影网站 | 在线看黄色的网站 | 亚洲精选视频在线 | 国产免费亚洲高清 | 国产精品999久久久 久产久精国产品 | 日韩中文幕 | 手机av在线免费观看 | 久草男人天堂 | 五月婷婷在线视频观看 | 一级黄色免费网站 | 99在线观看免费视频精品观看 | 欧美一级免费片 | 国产视频在线一区二区 | 国产中文字幕网 | 日韩一区二区三区免费视频 | 在线免费观看一区二区三区 | 日韩精品在线观看视频 | 国产色影院 | 亚洲欧洲精品在线 | 欧美精彩视频在线观看 | 国产精品淫片 | 91福利在线观看 | 国内小视频| www.亚洲精品在线 | 成人综合婷婷国产精品久久免费 | 91在线播放国产 | 久久精品看| 男女精品久久 | 91禁看片| www色,com | 在线观看的a站 | 亚洲区另类春色综合小说 | 夜夜夜精品| 激情久久婷婷 | 97成人资源站| 中文字幕av日韩 | 韩国中文三级 | 久久精品免费观看 | 中文字幕在线看片 | 亚洲 中文 在线 精品 | 久久国产精品久久精品国产演员表 | 97国产在线播放 | freejavvideo日本免费 | 亚洲午夜精品久久久久久久久久久久 | 亚洲精品色 | av日韩精品 | 国产丝袜一区二区三区 | 99久久精品国产一区二区成人 | 免费看黄视频 | 亚洲精品国 | 日韩免费电影一区二区 | av亚洲产国偷v产偷v自拍小说 | 欧美在线一级片 | 日韩av中文在线 | 日韩综合色 | 国产玖玖精品视频 | 久久久精品国产一区二区三区 | 91天堂在线观看 | 国产精品国产三级国产 | 免费观看成年人视频 | 欧美成年网站 | 极品美女被弄高潮视频网站 | 九九九热精品免费视频观看 | 91丨九色丨丝袜 | 五月婷婷综合在线 | 91手机视频在线 | 人人超碰97 | 日韩理论电影在线观看 | 久久视频二区 | 欧美色图亚洲图片 | 国产特级毛片aaaaaaa高清 | 亚洲精品视频免费看 | 色婷婷88av视频一二三区 | 国产成人福利在线观看 | 日韩区在线观看 | 亚洲欧美成人在线 | 欧美伦理一区 | 亚洲欧美日韩一二三区 | 全久久久久久久久久久电影 | 国产精品av久久久久久无 | 日韩在线视频精品 | 免费在线激情电影 | 99久久久久免费精品国产 | 国产黄在线 | 中日韩欧美精彩视频 | 在线观看黄色的网站 | 免费97视频 | 91香蕉视频黄色 | 操操操人人人 | 色综合亚洲精品激情狠狠 | 麻豆精品91 | 成人午夜剧场在线观看 | 欧美福利精品 | 国产高清视频在线播放一区 | 激情综合五月天 | 色94色欧美 | 久久久在线观看 | 国产专区在线 | 超碰国产97 | 91在线播放国产 | 国产精品自产拍在线观看网站 | 人人澡人人爽 | 欧美成人精品三级在线观看播放 | 五月天视频网 | 国产偷国产偷亚洲清高 | 深爱开心激情网 | 91插插影库| 免费中文字幕 | 亚洲男人天堂2018 | 婷婷九月丁香 | 日韩亚洲精品电影 | www.亚洲精品 | 国产99久久久国产精品免费二区 | 亚洲一级二级 | 欧美久久久久久久久久久 | 六月丁香婷 | 久久久伊人网 | 国产中文字幕在线观看 | 青春草免费在线视频 | 91在线视频播放 | 亚洲资源在线观看 | www.超碰97.com | 亚洲激情av | 欧美日韩高清一区二区 国产亚洲免费看 | 中文乱幕日产无线码1区 | 亚洲国内精品在线 | 五月天婷婷在线视频 | 免费视频91 | 国产涩图 | 国产精品国产三级国产不产一地 | 美女很黄免费网站 | 人人澡人人模 | 亚洲另类视频 | 国产精品黑丝在线观看 | 亚州激情视频 | 夜夜骑首页 | 99精品国产一区二区三区不卡 | 亚洲国产精品传媒在线观看 | 成人丝袜| 婷婷六月丁 | 国产成人精品亚洲a | 婷婷丁香视频 | 操碰av| 成人av一区二区兰花在线播放 | 久久午夜影院 | 免费a现在观看 | 精品在线观看一区二区 | 日韩免费看 | 久久久久亚洲精品成人网小说 | 99在线播放| 97操碰| 月下香电影 | 欧美精品三级在线观看 | 日本中文字幕免费观看 | 91网站免费观看 | 国产aa精品| 玖玖视频免费在线 | 中文字幕 二区 | 日韩中文字幕亚洲一区二区va在线 | 久久久久久久久久亚洲精品 | 日韩免费成人av | 日韩在线观看小视频 | 在线播放精品一区二区三区 | 中文字幕av一区二区三区四区 | 久久99精品久久久久婷婷 | 五月天九九 | 亚洲成人频道 | 在线直播av | 久久久国产精品网站 | a级国产乱理伦片在线观看 亚洲3级 | 日本婷婷色 | 国产一区国产精品 | 九九久久久久99精品 | 97理论片 | 国产激情电影综合在线看 | 在线观看精品国产 | 日本久久免费电影 | 成年人视频在线免费观看 | 日韩一级电影在线观看 | 午夜精品福利一区二区三区蜜桃 | 在线 国产 亚洲 欧美 | 国产1区2区3区精品美女 | 亚洲aⅴ久久精品 | 日日爱999| 麻豆国产网站入口 | 欧美日韩国产二区 | 日韩av影视| 日本激情视频中文字幕 | 日韩三级.com | 欧美成人精品在线 | 日韩va亚洲va欧美va久久 | 精品视频免费久久久看 | 亚洲成人资源网 | 欧美日本一二三 | 成人av资源在线 | 91探花视频 | 九九爱免费视频 | 激情偷乱人伦小说视频在线观看 | 中文字幕在线第一页 | 四虎永久免费在线观看 | avhd高清在线谜片 | 精品主播网红福利资源观看 | 亚洲日日夜夜 | 日本高清久久久 | 91成年人视频 | 国产精品99久久久久久久久久久久 | 亚洲h在线播放在线观看h | 国产精品18久久久久vr手机版特色 | 日韩av片无码一区二区不卡电影 | 国产在线理论片 | 午夜 久久 tv| 国产精品一二 | 人人爽人人片 | 黄色的视频网站 | 亚洲美女在线一区 | 麻豆视频国产 | 96av在线视频| 狠狠干2018| 久久伊人国产精品 | 国产日韩在线一区 | 久草资源在线 | 国产高清免费在线播放 | 天天做天天爱夜夜爽 | 二区三区在线视频 | 国产精品乱码久久久久 | 亚洲男男gⅴgay双龙 | 日韩av手机在线观看 | 免费日韩一区 | 密桃av在线 | 日韩三级久久 | 精品专区 | 国内精品视频一区二区三区八戒 | 久草在线看片 | 97电影院网| 超碰97久久 | h动漫中文字幕 | 久久99国产精品免费网站 | 久久久官网 | 欧美综合在线视频 | 91九色在线播放 | 亚洲黄色av网址 | 日韩激情一二三区 | 国产又黄又爽又猛视频日本 | 黄网在线免费观看 | 色之综合网 | 91亚色在线观看 | 免费在线播放视频 |