標籤:datetime 中文 文本 版本 取整 readlines ror nes 失效
everything is possible ---nothing is impossible
摘要:輸入輸出、條件與迴圈,檔案操作,異常,模組與包,python特性、linux基礎與git
1基礎文法:
1:輸入與輸出:
1,修改不可變資料會拋出TypeError錯誤
2,print預設調用了sys.stdout.write方法:向控制台輸出字串
3,input擷取使用者輸入,都是字串
Python2有raw_input,input。Input擷取到的是輸入的類型
2:條件循壞:
1,有個匿名函數--------------------------------------,2.1
2,range與xrange的區別是:功能相同,xrange只有使用才會開闢記憶體,效能好
3,字典在整個代碼塊中,只要字典名相同,則值全部相同,修改類似於淺拷貝
4,range(5,0,-1):5 4 3 2 1
3:檔案操作
1,讀取資料:通過代碼製作一個產生器,切片讀取拼接。也可以使用linux的split切割成小檔案,在合成
2,檔案操作的read:讀取整個檔案,受記憶體限制。Readline讀取下一行,使用產生器的方法,readlines:讀取整個檔案到一個迭代器供我們遍曆。
3,對os的yunyong----------------------3.4
4:異常
1,except後還會執行finally方法,可以使用raise拋出異常
2,except:#捕獲所有異常
Except 《異常名》:#捕獲指定異常
Except 《異常名1》,《異常名2》: #捕獲異常1或異常2
Except 《異常名》,《資料》: # 捕獲指定異常及其附加的資料
Except 《異常1》,《異常2》,《資料》: # 捕獲異常及資料
5:模組與包
1,1:常用的python標準庫
os作業系統
time時間
random隨機
pymysql連結資料庫
threading線程
multiprocessing進程
queue隊列
2第三方庫:
django和flask
requests請求
virtualenv虛擬環境
selenium----------------------------不知道
scraoy-----------------------------不知道
xadmin--------------------------------不知道
celery非同步啟動任務
re正則
hashlib-------------------------------不知道
md5--------------------------------不知道
常用的科學計算庫:Numpy,Scipy,Pandas
2,賦值、淺拷貝和深拷貝的區別
1賦值:就是簡單的對象引用,和c++不同(僅僅是名稱不同)
可以用id()查看兩者的記憶體位址
2淺拷貝:會建立新的對象,對原對象的第一層對象的引用
切片操作:b = a[:] 或者 b = [x for x in a]
工廠函數:b = list(a)
copy函數:b = copy.copy(a)
3深拷貝:不僅建立新的對象,對內部所有對象都開闢了新的記憶體。不可變的對象則是引用,減少開銷(原子類型的資料)
3,__init__和__new__的區別
__init__:對象建立後初始化
__new__:對象建立之前建立一個對象,並將該對象返回給init
4,python中產生隨機數
import random
random.random():產生0-1之間的隨機浮點數
random.uniform(a, b):產生a,b之間的隨機浮點數
random.randint(a, b):產生a,b之間的隨機整數
random.randrange(a , b, step):在指定的集合[a, b)中,以step為基數,隨機區一個數
random.choice(sequence):從特定的序列中隨機區一個元素,元素可以是字串,列表,元祖等
random.shuffle(alist):隨機排列列表
5,使用datetime模組,判斷哪年哪月那日是這一年的第幾天----5-5
1. import datetime
2. def dayofyear():
3. year = input("請輸入年份:")
4. month = input("請輸入月份:")
5. day = input("請輸入天:")
6. date1 = datetime.date(year=int(year),month=int(month),day=int(day))
7. date2 = datetime.date(year=int(year),month=1,day=1)
8. return (date1 - date2 + 1).days
6,隨機排列列表:random.shuffle(列表)
7,os.path和sys.path的區別
os.path:對系統路徑檔案的操作
sys.path:對python解譯器的系統內容參數的操作(動態修改解譯器搜尋路徑)
8,python中os模組的常見方法
os.remove():刪除檔案
os.rename():重新命名檔案
os.walk():組建目錄樹下的所有檔案名稱
os.chdir():改變目錄
os.mkdir/makedirs():建立目錄、多層目錄
os.rmdir/removedirs():刪除目錄、多層目錄
os.listdir():列出指定目錄的檔案
os.getcwd():獲得當前工作目錄
os.chmod():改變目錄許可權
os.path.basename():去掉目錄路徑,返迴文件名
os.path.dirname():去掉檔案名稱,返回目錄路徑
os.path.join():將分離的各部分組合成一個路徑名
os.path.split():返回(dirname(),basename())元組
os.path.splitext():(返回filename,extension)元組
os.path.getatime\ctime\mtime:分別返回最近訪問、建立、修改時間
os.path.getsize():返迴文件大小
os.path.exists():是否存在
os.path.isabs():是否為絕對路徑
os.path.isdir():是否為目錄
os.path.isfile():是否為檔案
9,Python中sys的常用方法
sys.argv:命令列參數list,第一個元素是程式本身路徑
sys.modules.keys():返回所有已經匯入的模組列表
sys.exc_info():擷取當前正在處理的一場類,exc_type、exc_value、 exc_traceback,當前處理的異常資訊
sys.exit(n):退出程式,正常退出時exit(0)
sys.hexversion:擷取python解釋程式的版本值,16進位格式
sys.version:擷取python解釋程式的版本資訊
sys.maxint:最大的int值
sys.maxunicode:做大的unicode值
sys.modules:返回系統匯入的模組欄位,key是模組名,value是模組
sys.path:返回模組的搜尋路徑,初始化時使用PYTHONPYTH環境變數的值
sys.paltform:返回作業系統平台的名稱
sys.stdout:標準輸出
sys.stdin:標準輸入
sys.stderr:錯誤輸出
sys.exc_clear():用來清除當前線程所出現的當前的獲最近的錯誤資訊
sys.exec_prefix:返回平台獨立的python檔案安裝的位置
sys.byteorder:本地位元組規則的指標,big-endian 平台的值是‘big‘,little-endian 平台的值是‘little‘
sys.copyright:記錄python著作權相關的東西
sys.api_version:解譯器的C的API版本
sys.version_info:元組則體用一個更簡單的方法來使你的程式具備python版本要求功能
10,unittest是什嗎?
在python中unittest是單元測試架構,他擁有——支援共用搭建、自動化的測試。在測試中暫停代碼、將不同測試迭代成一組等功能
11,模組和包是什麼
(1) 模組是搭建程式的一種方式,每一個python代碼檔案都是一個模組,並可以應用其他的模組,比如對象和屬性
(2) 一個包包含許多python代碼的檔案夾是一個包。一個包可以包含模組和子檔案夾
6:Python特性
1,Python是強語言還是弱語言類型
Python是強型別的動態指令碼語言
強型別:不允許不同類型想家
動態:不是痛顯示資料類型聲明,切確定一個變數的類型是在第一次給他賦值的時候
指令碼語言:一般也是解釋型語言,運行代碼只需要一個解譯器,不需要編譯
2,解釋型語言,編譯型語言
電腦不能直接理解進階語言,只能直接理解機器語言,所以必須要吧進階語言翻譯成機器語言電腦才能執行進階語言編寫的程式
(1) 解釋型語言:在運行程式的時候才會進行翻譯。
(2) 編譯型語言:寫的程式在執行之前,需要一個專門的編譯過程,把程式編譯成機器語言(可執行檔)
3,Python中的日誌
Python內建logging模組,調用logging.basicConfig()方法,配置需要的日誌等級和相應的參數,Python解譯器會按照配置的參數產生相應的日誌。
4,Python是如何進行類型轉換的
內部封裝了轉換函式,list-tuple tuple(list) int(str)num字元
5,Python2與Python3的區別
(1) 核心類差異
(2) 廢棄類差異
(3) 修改類差異
(4) 第三方工具包差異
(5) 工具安裝問題
6,Python程式的運行方面,有什麼手段可以提升效能
① 使用多進程,充分利用機器的多核效能
② 對於效能影響較大的部分代碼,可以使用c或者c++編寫
③ 對於IO阻塞造成的效能影響,可以你用IO多工來解決
④ 盡量使用Python的內建函數
⑤ 盡量使用局部變數
7,python中的範圍
Python中變數的作用於總是在代碼中被賦值的地方所決定的,單號Python遇到一個變數的化,他會按照這個順序進行搜尋:
1本地範圍Local
2當前範圍被嵌入的本地範圍Enclosing locals
3全域/模組範圍Global
4內建範圍Built-in
8,什麼是Python
(1) Python是一種變成語言,他有對象、模組、線程、異常處理、和自動記憶體管理,可以加入其他語言的對比
(2) Python是一種解釋型語言,Python代碼運行之前不需要解釋
(3) Python是動態類型語言,在聲明變數時,不需要說明變數的類型
(4) Python適合物件導向的變成,因為它支援通過組合與繼承的方式定義類
(5) 在Python語言中,函數是第一類對象。
(6) Python代碼編寫快,但是運行速度比編譯型語言通常要慢
(7) Python用途廣泛,常備叫做‘膠水語言’,,可協助其他語言和組件改善健全狀態
(8) 使用Python,程式員可以專註於演算法和資料結構的設計,而不用處理底層的細節
9,什麼是Python的自省
Python具有的一種能力,是程式員物件導向的語言所寫的程式在運行時,能夠獲得對象的類Python型,Python是一種解釋型語言,為程式員提供了極大的靈活性和控制力
10,什麼是Python的命名空間
在python中,所有的名字都存在於一個空間中,他們在改空間中存在和被操作——這就是命名空間。
就像一個盒子,每一個變數名字都對應裝著一個對象,當查詢變數的時候會從該盒子裡面尋找相應的對象。
11,你所遵循的代碼規範是什嗎?
12,PEP8規範
(1) 變數
① 常量:大寫加底線。比如USER_CONSTANT
② 私人變數:小寫和一個前置底線。_private_value
python中不存在私人變數一說,就是和習慣,不希望被外部類訪問到
③ 內建變數:小寫,兩個前置底線和兩個後置底線。__class__
兩個前置底線會導致變數在解釋期間被更名,這是為了避免內建變數和其他變數產生衝突。使用者定義的變數要嚴格避免這種風格
(1)
(2) 函數和方法,總體而言,小寫和底線
① 私人方法:小寫和一個前置底線
這個並不是真的私人存取權限,和變數一樣,不要使用雙底線
② 特殊方法:小寫和兩個前置底線,兩個後置底線
這種方法值應用與特殊函數,比如操作符重載等
③ 函數參數:小寫和底線,預設(參數)值等號兩邊無空格
(3) 類:
① 類總是使用駝峰格式命名,即所有單字首大寫其餘字母小寫。雷鳴應該簡明,精確,並足以從中理解類所完成的工作。常見的一個方法是使用表示其類型或者特性的尾碼,例如:SQLEngine,Mimetypes杜宇積累而言,可以使用一個Base或者Abstract首碼
(4) 模組和包
① 出特使模組__init__之外,模組名稱都使用不帶底線的小寫字母
② 若是他們實現一個協議,那麼通常使用lib為尾碼,例如:import smtplib,import os,import sys
(5) 關於參數
① 不要用斷言實現靜態類型的檢測,斷言可以用於檢查參數
② 不要濫用*args和**kwargs。會破壞函數的健壯性,會使標籤名變得模糊,而且代碼嘗嘗開始在不應該的地方構建小的參數解析器
(6) 其他
① 使用has或者is首碼命名布爾元素。is_connect=True
② 用複數形式命名序列。numbers=[‘user_1’, ‘user_2’]
③ 用顯示名稱命名字典。person_address={‘user_1’: ‘10 road WD’, ‘user_2’: ‘20 street huafu’}
④ 避免通用名稱。諸如list,dict,sequence或者element之類的
⑤ 避免現有名稱。諸如os,sys這種系統已經存在的名稱應該避免
(7) 一些數字
① 一行列數:PEP8規定為79列,不要超過滿屏時編輯器的顯示列數
② 一個函數:不要超過30行代碼,即可顯示在一個螢幕類
③ 一個類:不要超過過200行代碼,不要有超過10個方法。
④ 一個模組:不要超過500行
(8) 驗證指令碼
① 可以安裝一個pep8指令碼用於驗證你的代碼風格是否符合pep8
7,linux基礎和git
1,linux區分一個檔案還是檔案夾:
ls -F:檔案後是 * 檔案夾後是 /
2,日誌以什麼格式,存放在哪兒
日誌以文本可以儲存在/var/log目錄下尾碼名為.log
3,linux查看某個服務的連接埠:netstat -anp | grep service_name
4,ubuntu設定開機自啟動一個程式
① 直接修改/etc/re0.d~/etc/rc6.d和/ect/rcS.d檔案夾的內容,S開頭的表示啟動,K開頭的表示不啟動
5,在linux中find和grep的區別
① grep是一種強大的文本搜尋工具,它能使用正則表達示搜尋文本,並把匹配的行列印出來,Global Regular Expression Print,表示全域正則表達示版本,他的使用許可權是所有使用者。
② linux下的find:
1) 功能:在目錄結構中搜尋檔案,並執行指定的操作,此命令提供了相當多的尋找條件,功能很強大。
2) 文法:find其實目錄尋找條件搜尋
3) 說明:find命令從指定的起始目錄開始,遞迴的搜尋器各個子目錄,尋找滿足尋找條件的檔案並對之採取相關的操作
4) 簡單的說,grep是尋找匹配條件的行,find是搜尋匹配條件的檔案
6,linux重新導向命令:
① 重新導向>:linux允許將命令之I型那個結果重新導向到一個檔案,本應顯示在終端上的內容儲存到指定檔案中,如ls > test.txt(如果檔案不存在則建立,存在則覆蓋)
② 重新導向>>:這個是將輸出內容追加到目標檔案中。如果檔案不存在,建立檔案,存在則追加到那個檔案的末尾,該檔案中的緣由內容不受影響
7,軟連結和永久連結的區別
軟連結類似windows的捷徑,當刪除源檔案時,那麼軟連結也失效了。永久連結可以理解為源檔案的一個別名,多個別名所代表的是同一個檔案。當rm一個檔案時,那麼此檔案的永久連結數減1,當永久連結數為0時,檔案被刪除
8,10個常用的linux命令
① pwd:顯示工作路徑
② ls:查看目錄中檔案
③ cd /home :進入’/home’目錄
④ cd .. 返回上一級目錄
⑤ cd ../.. 返回上兩級目錄
⑥ mkdir dir1 建立一個叫做dir1的目錄
⑦ rm -f file1 刪除一個叫做file1的檔案,-f忽略不存在的檔案,不給提示
⑧ rmdir dir1 刪除一個叫做dir1的目錄
⑨ groupadd group_name 建立一個新使用者組
⑩ groupdel group_name 刪除一個使用者組
? tar -cvf archive.tar file1 建立一個非壓縮的tarball
? tar -cvf archive.tar file1 file2 dir1 建立一個包含了 ‘file1‘, ‘file2‘ 以及 ‘dir1‘的檔案檔案
? tar -tf archive.tar 顯示一個包中的內容
? tar -xvf archive.tar 釋放一個包
? tar -xvf archive.tar -C /tmp 將壓縮包釋放到 /tmp 目錄下
? tar -cvfj archive.tar.bz2 dir1 建立一個 bzip2 格式的壓縮包
? tar -xvfj archive.tar.bz2 解壓一個 bzip2 格式的壓縮包
? tar -cvfz archive.tar.gz dir1 建立一個 gzip 格式的壓縮包
? tar -xvfz archive.tar.gz 解壓一個 gzip 格式的壓縮包
9,linux的關機命令有哪些
reboot 重啟
shutdown -r now 重啟作業系統,shutdown會給別的使用者提示
shutdown -h now 立刻關機,其中now相當於時間為0的狀態
shutdown -h 10:25 系統在今天的20.25關機
shutdown -h +10 系統十分鐘後自動關機
init 0 關機
init 6 重啟
10,git合并檔案有衝突如何處理?
① git merge衝突之後,根據提示找到衝突的檔案,解決衝突,如果檔案有衝突,那麼會有類似的標記
② 修改完成之後,執行git add 衝突檔案名稱
③ git commit 注意:沒有-m選項,進去類似於vim的操作介面,把conflict相關的行刪除掉直接push就可以了,因為剛剛已經執行過相關merge操作了
Python基礎文法1