python筆記24(回顧、複習)

来源:https://www.cnblogs.com/cuiyongchao007/archive/2020/03/06/12424220.html
-Advertisement-
Play Games

一、內容回顧 面向對象 單例模塊 單例模塊:設計模式 單例的應用場景 logging模塊 記錄日誌的 記錄錯誤、操作日誌 給程式員看的:①統計使用;②用來做故障排除的(debug);③記錄錯誤,完成優化代碼的。 logging.basicconig:①使用方便,②不能實現,編碼問題;不能同時向文件和 ...


一、內容回顧

面向對象

類變數
方法
:靜態方法
:類方法
:綁定方法
:屬性property

單例模塊

單例模塊:設計模式

單例的應用場景

__new__(self):實例創建,在init之前工作

logging模塊

  • 記錄日誌的

  • 記錄錯誤、操作日誌

  • 給程式員看的:①統計使用;②用來做故障排除的(debug);③記錄錯誤,完成優化代碼的。

  • logging.basicconig:①使用方便,②不能實現,編碼問題;不能同時向文件和屏幕上輸出。

  • logging.debug,logging.warning

  • logger對象:

    複雜:
    ①創建一個logger對象;
    ②創建一個文件操作符;
    ③創建一個屏幕操作符;
    ④創建一個格式;
    給logger對象綁定文件操作符
    給logger對象綁定屏幕操作符
    給文件操作符設定格式
    給屏幕操作符設定格式
    用logger對象來操作。
    import logging
    logger=logging.getLogger()
    fh=logging.FileHandler('log.log')
    sh=logging.StreamHandler()
    logger.addHandler(fh)
    logger.addHandler(sh)
    formatter=logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
    sh.setFormatter(formatter)
    fh.setFormatter(formatter)
    logger.warning('message')

collections模塊

from collections import OrderedDict
odic=OrderedDict([('a',1),('b',2),('c',3)])
print(odic)
# # odic['k']='k1'
# # odic['k1']='k2'
for k,v in odic.items():
    print(k,v)
#模塊namedtuple
#創建一個類,這個類沒有辦法,所有屬性的值都不能修改
from collections import namedtuple
Course=namedtuple('course',['name','price','teacher'])
python=Course('python',1980,'lexm')
print(python)
print(python.name)
=======================
course(name='python', price=1980, teacher='lexm')
python

====
只讀屬性:t屬性不能修改
import time
t=time.localtime()
print(t)

項目開發規範

補充

  • 棧:Stack,先進先出,lifo
  • 隊列:Queue,先進先出是隊列,fifo

反射

hasattr
setattr
getattr
class A:
    @staticmethod
    def func():
        print('12345')
    
getattr(A,)
delattr

通過對象來獲取實例變數、綁定方法

通過類 來獲取類變數,類方法、靜態方法

通過模塊名來獲取模塊中的任意變數(普通變數,函數,類)

通過文本件來獲取本文件中的任意變數。

getttr(sys.modules[__name__],'變數名')

抽象類/介面類

就是給子類一個規範,讓子類必須按照抽象類的規範實現方法。

class Foo:
    def func(self):
        raise NotImplementedError

 class Son(Foo):
    pass

s=Son()
s.func()

模塊和包

模塊:py文件寫好了的,對程式員直接提供某方面功能的文件。

import,from import

什麼是包:

文件夾,存儲多個py文件的文件夾。

如果導入的是一個包的化,這個包里的模塊預設是不能用的。

需要完成__init__.py文件的內容。

導入一包相當於執行init.py文件中的內容。

項目規範

bin  start
#import os,sys
#base_path=os.path.dirname(os.path.dirname(__file__))#當前文件
#sys.path.append(base_path)
#from src import core
conf  setting
src  業務邏輯
student.py
from src import core
core.py
from conf import settings
db  數據文件
lib  擴展文件
log  日誌文件

模塊總結

os:操作系統(作業:計算文件夾大小,考慮絕對路徑)
os.path.getsize('d:\code\s21')
#文件
#文件
#路徑
#listdir,walk

sys
#sys.path 模塊搜索路徑,一個模塊是否能被導入,全看sys.path中是否有這個模塊所在的路徑。
#sys.argv,獲取命令行參數,python c://aaa.py remove 文件路徑
#sys.module,存儲了當前程式中用到的所有模塊,反射文件中內容。
json,支持所有語言
#序列化,將其他類型轉換成str/bytes類型
#json格式:
#1所有的字元串都是雙引號
#2最外層只能是列表或者字典
#3只支持int float str list dict bool
#4存在字典的key只能是str
#5不能連續load多次
pickle,只支持py
#1所有的數據類型都可以寫到文件中
#2支持連續load多次
random(作業,發紅包,沒一個人搶到金額概率一樣,共計200元,小數的不准確性(print(random.uniform(1,5)))
import random
random.choice([1,2,3,4])#隨機抽取一個
random.sample([1,2,3,4,5],3)#抽取多個
#randint
#choice
#sample                                                
#shuffle,洗牌,演算法

time
#time時間戳
#sleep()讓程式暫停ns
hashlib(作業,檢驗文件的一致性,文件,視頻,圖片)
#md5
#sha
#import hashlib
#hashlib.md5('xxl'.encode())--如果使用sha演算法時,將此處md5改成sha
#md5.update('str'.encode())
#print(md5.hexdigest())

datetime
from datetime import datetime
dt=datetime.now()
print(datetime.timestamp(dt))
#now()
#utc()
#strftime('%Y-%m-%d')獲取到一個datetime對象
#timedelta(days=140),時間的加
#fromtimestamp(時間戳)時間戳轉datetime
#timestamp(datetime對象),datetime轉時間戳
pickle
shutil
#import
shutil.make_archive()壓縮文件,shutil.unpack_archive()解壓文件,shutil.retree()刪除目錄,shutil.move(),移動文件

#importlib
#import importlib
#importlib.import_module('模塊名')
#print(os.path.isdir('xxx')),判斷是否為目錄,isfile,是否為文件                                                
copy
getpass,在命令行密文顯示
                                                
copy
                                                
logging
#兩種配置方式:basicconfig,logger
 collections
 #OderdDict,namedtuple,deque,defaultDict
  functools
 #reduce(add,iterable)                                               
                                                
                                                
                                                

面向對象

三大特性:封裝,繼承,多態
#封裝:
①廣義的封裝:類中的成員
②狹義的封裝:私有成員,__名字,只有在類的內部使用,類的外部不能調用。
#繼承,所有的查找名字(調用方法和屬性)都是先找自己,自己沒有找父類
#如果自己和父類都有,希望自己和父類都調用,super()指定類名直接調用
①父類,基類,超類
②派生類,子類
③多繼承,查找順序,深度優先,廣度優先
④單繼承,子類可以使用父類的方法
#多態
-一個類表現出來的多種狀態,多個類表現出相似的狀態
-user類,用戶類
-vip_user
-svip_user
①鴨子類型
#vip_user,svip_user
#list,tuple
基礎概念:
#什麼是類:具有相同方法和屬性的一類事物
#什麼是對象,實例:一個擁有具體屬性值和動作的具體個體
#實例化:從一個類得到一個具體對象的過程
#實例
#實例化
組合:
#一個類的對象作為另一個類對象的實例變數
類成員:類變數,綁定方法,
特殊成員:類方法classmethod
靜態方法:staticmethod
屬性:property

特殊成員
雙下方法,魔術方法,內置方法
#__str__
__new__,構造方法
__init__,初始化方法
__dict__
__call__,對象加括弧就能使用
__enter__,__exit__,with上下文管理
__getitem__
__setitem__
__delitem__
__add__,兩個對象相加
__iter__
__dict__

相關內置函數:isinstance,對象和類
issubclass,類和類
type,類型,類=type(對象)
super遵循mro順序查找上一個類的

新式類和經典類:
py2繼承object就是新式類
#預設是經典類
py3都是新式類,預設繼承object

新式類:
#繼承object
支持super
多繼承,廣度優先
mro方法

經典類:
#py2中不繼承object
#沒有super語法
#多繼承深度優先
沒有mro方法


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 定義和用法 sort() 方法用於對數組的元素進行排序。 語法 ~~~ arrayObject.sort(sortby) ~~~ | 參數 | 描述 | | | | | sortby | 可選。規定排序順序。必須是函數。 | 返回值 對數組的引用。請註意,數組在原數組上進行排序,不生成副本。 說明 ...
  • 實例 在數組中讀取元素: citrus 結果輸出: 定義和用法 slice() 方法可從已有的數組中返回選定的元素。 slice()方法可提取字元串的某個部分,並以新的字元串返回被提取的部分。 註意: slice() 方法不會改變原始數組。 瀏覽器支持 所有主要瀏覽器都支持slice()。 語法 a ...
  • 實例 數組中添加新元素: fruits 結果輸出: 定義和用法 push() 方法可向數組的末尾添加一個或多個元素,並返回新的長度。 註意: 新元素將添加在數組的末尾。 註意: 此方法改變數組的長度。 提示: 在數組起始位置添加元素請使用 "unshift()" 方法。 瀏覽器支持 所有主要瀏覽器都 ...
  • 定義和用法 pop() 方法用於刪除並返回數組的最後一個元素。 語法 ~~~ arrayObject.pop() ~~~ 返回值 arrayObject 的最後一個元素。 說明 pop() 方法將刪除 arrayObject 的最後一個元素,把數組長度減 1,並且返回它刪除的元素的值。如果數組已經為 ...
  • 定義和用法 join() 方法用於把數組中的所有元素放入一個字元串。 元素是通過指定的分隔符進行分隔的。 語法 ~~~ arrayObject.join(separator) ~~~ | 參數 | 描述 | | | | | separator | 可選。指定要使用的分隔符。如果省略該參數,則使用逗號 ...
  • `hasOwnProperty() true false`。 該方法屬於 對象,由於所有的對象都"繼承"了Object的對象實例,因此幾乎所有的實例對象都可以使用該方法。 IE 5.5+、FireFox、Chrome、Safari、Opera等主流瀏覽器均支持該函數。 語法 JavaScript: ...
  • google模式下: ie模式下: 火狐模式下: FILTER(ie模式);background: moz linear gradient(火狐模式);background: webkit gradient(谷歌模式)。 以上是為了區別不同瀏覽器的不同效果,我把色碼區別開了。為了相容所有瀏覽器的相同 ...
  • 目 錄 1. 概述... 2 2. 原有結構(帶kafka)... 2 3. 改造後的結構(去掉kafka)... 3 4. 對比... 4 1. 概述 我們主要面向鋼鐵行業工業互聯網公有雲和私有去建設,偏向PAAS層和SAAS層應用,框架是支撐這個體系建設。現在我們的公有雲的IAAS資源層使用的是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...