7.other
Python模塊
認識Python模塊
字節編譯
from-import詳解
認識_name_屬性
自定義模塊
dir()函數
1).認識Python模塊
-什麼是模塊
-如何導入模塊
-sys模塊
什麼是模塊
模塊是函數功能的擴展,模塊是實現一項或多項功能的程序塊。在模塊裏面,可以重用多個函數。
2).字節編譯
-什麼是Python的.pyc文件
-字節編譯與編譯的區別
-.pyc文件的產生
-.pyc文件的使用
什麼是Python的.pyc文件
首先,.pyc文件是指以.pyc爲後綴名的這一類文件。在執行python模塊的時候,有兩種執行方式:一種是先將模塊裏面的內容編譯成二進制語言,然後執行這些二進制語言;另一種是直接執行對應模塊的二進制語言程序。第二種方式省略了編譯這一步,所以執行速度更快。而把模塊編譯成二進制語言程序的這個過程叫做字節編譯,這個過程會產生一個與編譯的模塊對應的.pyc文件。.pyc文件就是經過編譯後的模塊對應的二進制文件。
字節編譯與編譯的區別
把模塊編譯成二進制語言程序的這個過程就叫做字節編譯。python是一種解釋性語言,而不是一種編譯型語言,那麼爲什麼現在又說python中有字節編譯呢?很多人認爲,python中出現字節編譯,那麼python就應該是一種編譯型語言。其實這種觀點是錯誤的。python雖然出現了編譯這個過程,但是python編譯的過程是在python的解釋器中發生的。換句話說,其實每種程序要想讓計算機執行,都只能變成二進制形式,編譯型語言是指在軟件中就有一個獨立的編譯模塊去將程序編譯,而python中字節編譯這部分功能是由解釋器去完成的,所以python仍然是解釋型語言。
.pyc文件的產生
字節編譯這個過程會產生一個與編譯的模塊對應的.pyc文件,.pyc文件就是經過編譯後的模塊對應的二進制文件。
.pyc文件的使用
在python中,.pyc文件最大的作用就是加快了模塊的運行速度。當調用該模塊時,.pyc文件自動被調用。
3).from-import詳解
學會使用from—import
python中導入一個模塊的方法我們可以使用import,但是import只是導入了這個模塊,而並沒有導入該模塊的某個屬性或方法。而我們不僅要導入一個模塊,還要有導入模塊中的對應的一個功能,我們可以使用from—import語句。
學會使用from—import*
在python中使用from—import語句只能一次導入一個模塊的一個功能,我們如果要想一次性把這個模塊的所有功能,也就是所有屬性與方法都導入的話,我們可以使用from—import*語句。
4).認識name屬性
-認識主模塊
-認識name屬性
-name屬性的使用
認識主模塊
python函數中,如果一個函數調用其他函數完成一項功能,我們稱這個函數爲主函數,如果一個函數沒有調用其他函數,這種函數稱爲非主函數。模塊也是如此,如果一個模塊是被直接使用的,而沒有被別人調用,我們稱這個模塊爲主模塊,如果一個模塊被其他模塊調用,這種模塊稱爲非主模塊。
認識_name_屬性
如何區分主模塊和非主模塊之分。如果一個模塊的name屬性的值是main,那麼就說明這個模塊是主模塊,反之亦然。其實我們可以把name看作一個變量,這個變量是系統給出的,這個變量的功能是判斷一個模塊是否是主模塊。
5).自定義模塊
-什麼是自定義模塊
-自定義模塊使用詳解
6).dir()函數
-認識dir()函數
-dir()函數擴展詳解
認識dir()函數
python中有很多模塊,有時候我們會忘記一個模塊有哪些功能。這時,我們可以用dir()函數來查看指定模塊的功能列表
dir()函數擴展詳解
python中dir()函數不僅僅能查看模塊的功能列表,還能查看任意指定對象的功能列表
in:
import pandas as pd #as pd 是給pandas這個模塊引入了一個別名pd
df = pd.DataFrame({'key':['b','b','a','c','a','a','b'],'data1': range(7)})
df.head(5)
out:
in:
from pandas import DataFrame
df1 = DataFrame({'key':['b','b','a','c','a','a','b'],'data1': range(7)})
df1.head(2)
out:
in:
from pandas import *
df2 = DataFrame({'key':['b','b','a','c','a','a','b'],'data1': range(7)})
df2.head(2)
out:
in:
#-*- coding:UTF-8 -*-
#首先我們分別看一下這個模塊在不同場景中的__name__的值
print (__name__)
out:
__main__
in:
#其次我們看一下__name__屬性的常用情況
if __name__=="__main__":
print("It's main")
else:
print("It's not main")
out:
It's main
in:
def myadd(i,j):
k = i + j
return k
#將這段語句保持在new_add.py文件中,並保存在"C:\Users\ben\Anaconda\Lib"這個目錄下即成爲模塊
out:
in:
import myadd as md
s = md.myadd(1,3)
print(s)
out:
in:
import pandas
dir(pandas.Expr.names.__hash__.__doc__)
out:
in:
help(pandas.DataFrame)
out:
in:
d=['a','d']
help(d)
out:
Python 異常處理與文件操作
處理python異常
異常的引發
Finally的使用
文件的操作
1.處理python異常
什麼是python的異常
比如沒有正確縮進會出現異常錯誤,這種狀態就是異常的以一種情形。當發生python異常時,
會把異常的類型和異常的位置打印出來,便於程序員處理。
Print(“錯誤的大寫”)
python異常的處理
假如我們在編程時,知道某些語句可能會導致某種錯誤的發生,而現在我們想在編程的時候就把發生的這種錯誤解決掉,這個時候,我們可以用except語句對可能出錯的部分進行處理。
2.異常的引發
在python中,要想實現讓某種情況下引發某種自定義的異常,可以使用raise語句實現。
3.Finally的使用
什麼是try…finally語句
當一段程序,出現異常的時候,就不會繼續執行下去了。但有時,我們希望不管某段程序發沒發生異常,逗得執行某些操作的時候我們就可以使用try…finally語句實現。
4.文件的操作
創建文件、打開文件、關閉文件、將指定內容寫入文件、讀取文件等
in:
#python異常的處理
#使用try_except語句,假如try出現了某種異常,則執行except下面的語句
#i =77
try:
print(i)
except: #這裏一定要指明異常類型
i = 9
i += 10
print("剛纔i沒定義,處理了異常之後,i的值爲:"+str(i))
out:
剛纔i沒定義,處理了異常之後,i的值爲:19
in:
#處理多種異常,下面的NameError和NameError都是系統裏面定義好了的異常
i = 10
j = 'a'
try:
print (i + j)
except NameError:
i = j =0
print("剛剛i或j沒有進行初始化數據,現在我們將其都初始化爲0,結果是:")
print(i + j)
except NameError:
print("剛剛i與j類型對應不上,我們轉換一下類型即可處理異常,處理後結果是:"+str(i)+str(j))
out:
剛剛i與j類型對應不上,我們轉換一下類型即可處理異常,處理後結果是:10a
in:
#2自定義一個異常並用raise引發
class RhhError(Exception): #按照命名規範,以Error結尾,並且自定義異常需要繼承Exception類
def _init_(self):
Exception._init_(self)
try:
i = 8
if i > 7:
raise RhhError()
except RhhError:
print("RhhError:錯了就是錯了")
out:
RhhError:錯了就是錯了
in:
#try...finally的使用
#假如要實現不管中間是否發生異常,都要輸出一串字符串
try:
print(i)
finally:
print("不管上面是否發生異常,我都必須要輸出")
#第二個例子:要實現一串字符串輸出10次,加入異常發生,需要判斷前面已經輸出了多少次
try:
for i in range(10):
print("我也輸出10次,現在正在輸出中")
finally:
print("此時i的值時:"+str(i)+"--並未完成全部輸出")
out:
8
不管上面是否發生異常,我都必須要輸出
我也輸出10次,現在正在輸出中
我也輸出10次,現在正在輸出中
我也輸出10次,現在正在輸出中
我也輸出10次,現在正在輸出中
我也輸出10次,現在正在輸出中
我也輸出10次,現在正在輸出中
我也輸出10次,現在正在輸出中
我也輸出10次,現在正在輸出中
我也輸出10次,現在正在輸出中
我也輸出10次,現在正在輸出中
此時i的值時:9--並未完成全部輸出
in:
#創建某個文件
import os
os.mkdir(r"E:\temp\newdir")
out:
//寫入和關閉文件——寫入文件分四步:先做好內容,然後建立文件,再寫入,最後關閉
in:
content = '''我是文件的內容
文件內容
待會而要把我寫到文件裏進去'''
out:
in:
#創建txt文件,用open的w模式(可寫),文件不存在就會自動創建
file_robin = open(r"E:\temp\newdir\py1.txt",'w')
#寫入內容
file_robin.write(content)
file_robin.close()
#讀取文件,關鍵點:先打開文件,再進入while循環依次讀取每行
fr = open(r"E:\temp\newdir\py1.txt",'r')
while True:
line = fr.readline()
if len(line) == 0:
break
print(line)
fr.close
#用for方式讀取文件
fr2 = open(r"E:\temp\newdir\py1.txt",'r')
for u in fr2:
print(u)
fr2.close
out:
我是文件的內容
文件內容
待會而要把我寫到文件裏進去
我是文件的內容
文件內容
待會而要把我寫到文件裏進去
<function TextIOWrapper.close>
numpy小例子
in:
import numpy as np
#定義變量
x = np.array([1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0])
y = np.array([2.10,3.90,8.20,1.96,6.30,4.40,7.70,4.30,5.40,8.70,2.50])
#進行轉置,因爲計量經濟學中的向量均爲列向量
X = np.vstack([np.ones(len(x)),x]).T #帶截距的迴歸,這裏使用了捆綁,把len(x)個值爲1的數據捆綁到x數組裏(壓入棧),使得x變成二維數組
Y = y.T
#按步驟計算迴歸係數beta
XX = np.dot(X.T,X) #點乘取逆
XX_inv = np.linalg.inv(XX) #取逆
XY = np.dot(X.T,Y)
beta = np.dot(XX_inv,XY)
beta
out:
array([ 4.012 , 0.17163636])