Python基礎知識學習
Python是一種解釋型、面向物件、動態資料型別的高階程式設計語言。Python由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年。像Perl語言一樣, Python 原始碼同樣遵循 GPL(GNU General Public License)協議。
python函式函式通過def關鍵字定義,形如
python def function (arg1,arg2,...): ... fuction(1,2,...) #call function
DocStrings文件字串
DocStrings文件字串是一個重要工具,用於解釋文件程式。
``` python def function(): ''' say something here! ''' pass ... print function.__doc__ #呼叫doc ```
*DocStrings文件字串 使用慣例 它的首行以大寫字母開始簡述功能,第二行空行,第三行為函式的具體描述*
python模組Python 模組(Module),是一個 Python 檔案,以 .py 結尾,包含了 Python 物件定義和Python語句。
模組讓你能夠有邏輯地組織你的 Python 程式碼段。把相關的程式碼分配到一個模組裡能讓你的程式碼更好用,更易懂。模組能定義函式,類和變數,模組裡也能包含可執行的程式碼。以下是載入方法:
import方法(全部引入)
import modules
注意:一個模組只會被匯入一次,不管你執行了多少次import。這樣可以防止匯入模組被一遍又一遍地執行。
from ... import方法(部分引入)
Python 的 from 語句讓你從模組中匯入一個指定的部分到當前名稱空間中。語法如下:
from modname import name1[, name2[, ... nameN]]
from ... import*語句
匯入模組內所有內容,並不建議使用。
Python模組搜尋路徑
當你匯入一個模組,Python 解析器對模組位置的搜尋順序是:
當前目錄
如果不在當前目錄,Python 則搜尋在 shell 變數 PYTHONPATH 下的每個目錄。
如果都找不到,Python會察看預設路徑。UNIX下,預設路徑一般為/usr/local/lib/python/。模組搜尋路徑儲存在 system 模組的 sys.path 變數中。變數裡包含當前目錄,PYTHONPATH和由安裝過程決定的預設目錄。
函式一個排好序的字串列表,內容是一個模組裡定義過的名字。
返回的列表容納了在一個模組裡定義的所有模組,變數和函式。
特殊字串變數__name__指向模組的名字,__file__指向該模組的匯入檔名。
據呼叫地方的不同,globals()和locals()函式可被用來返回全域性和區域性名稱空間裡的名字。
如果在函式內部呼叫 locals(),返回的是所有能在該函式裡訪問的命名。 如果在函式內部呼叫 globals(),返回的是所有在該函式裡能訪問的全域性名字。 兩個函式的返回型別都是字典。所以名字們能用 keys() 函式摘取。
包是一個分層次的檔案目錄結構,它定義了一個由模組及子包,和子包下的子包等組成的 Python 的應用環境。簡單來說,包就是資料夾,但該資料夾下必須存在 _init_.py 檔案, 該檔案的內容可以為空。_init_.py用於標識當前資料夾是一個包。
常用模組
系統相關的資訊模組: import sys sys.argv 是一個 list,包含所有的命令列引數. sys.stdout sys.stdin sys.stderr 分別表示標準輸入輸出,錯誤輸出的檔案物件. sys.stdin.readline() 從標準輸入讀一行 sys.stdout.write("a") 螢幕輸出a sys.exit(exit_code) 退出程式 sys.modules 是一個dictionary,表示系統中所有可用的module sys.platform 得到執行的作業系統環境 sys.path 是一個list,指明所有查詢module,package的路徑.
作業系統相關的呼叫和操作: import os os.environ 一個dictionary 包含環境變數的對映關係 os.environ["HOME"] 可以得到環境變數HOME的值 os.chdir(dir) 改變當前目錄 os.chdir('d:\outlook') 注意windows下用到轉義 os.getcwd() 得到當前目錄 os.getegid() 得到有效組id os.getgid() 得到組id os.getuid() 得到使用者id os.geteuid() 得到有效使用者id os.setegid os.setegid() os.seteuid() os.setuid() os.getgruops() 得到使用者組名稱列表 os.getlogin() 得到使用者登入名稱 os.getenv 得到環境變數 os.putenv 設定環境變數 os.umask 設定umask os.system(cmd) 利用系統呼叫,執行cmd命令
內建模組(不用import就可以直接使用)常用內建函式: help(obj) 線上幫助, obj可是任何型別 callable(obj) 檢視一個obj是不是可以像函式一樣呼叫 repr(obj) 得到obj的表示字串,可以利用這個字串eval重建該物件的一個拷貝 eval_r(str) 表示合法的python表示式,返回這個表示式 dir(obj) 檢視obj的name space中可見的name hasattr(obj,name) 檢視一個obj的name space中是否有name getattr(obj,name) 得到一個obj的name space中的一個name setattr(obj,name,value) 為一個obj的name space中的一個name指向vale這個object delattr(obj,name) 從obj的name space中刪除一個name vars(obj) 返回一個object的name space。用dictionary表示 locals() 返回一個區域性name space,用dictionary表示 globals() 返回一個全域性name space,用dictionary表示 type(obj) 檢視一個obj的型別 isinstance(obj,cls) 檢視obj是不是cls的instance issubclass(subcls,supcls) 檢視subcls是不是supcls的子類
型別轉換 chr(i) 把一個ASCII數值,變成字元 ord(i) 把一個字元或者unicode字元,變成ASCII數值 oct(x) 把整數x變成八進位制表示的字串 hex(x) 把整數x變成十六進位制表示的字串 str(obj) 得到obj的字串描述 list(seq) 把一個sequence轉換成一個list tuple(seq) 把一個sequence轉換成一個tuple dict(),dict(list) 轉換成一個dictionary int(x) 轉換成一個integer long(x) 轉換成一個long interger float(x) 轉換成一個浮點數 complex(x) 轉換成複數 max(...) 求最大值 min(...) 求最小值 ------資料結構
在python中有三種內建的資料結構--列表、元組和字典。
列表(list)list是處理一組有序專案的資料結構,即你可以在一個列表中儲存一個序列的專案。
列表是一種可變的資料型別。
python listname = [item1.item2,item3] listname.sort() listname.append(item4) del listname[0]元組(Tuples)
元組與列表極其類似,只不過元組和字串一樣是不可變 即使你不能修改元組。元組通過圓括號中用逗號分割的專案定義。
元組最通常的用法是用在列印語句中,下面是一個例子:
print '%sis %d' % (name,age)
字典(Dictionary)字典有鍵和值二元組,鍵是不可變的物件,字典的值可以任意。鍵值對在字典中以這樣的方式標記
d ={key1:value1,key2:value2}
序列(Sequence)序列是列表,元組,字串的總稱,它的特點在於兩個操作--索引操作符 (indexing/subscription)、切片操作符(slicing)
list[-1],list[0],list[1],list[3] list[0;2] #0到1的 不包含2 list[2:] #2以後 list[:] #全部引用
當你建立一個物件並給它賦一個變數的時候,這個變數僅僅引用那個物件,而不是表示那個物件本身
!也就是說,變數名只是指向計算機中儲存那個物件的記憶體。這被稱作名稱到物件的繫結。
```python #!/usr/bin/python #-- coding=utf-8 -- print 'Simple Assignment' shoplist = ['apple','mango','carrot','banana'] mylist = shoplist #簡單的賦值 只是引用變數名 del shoplist[0] del mylist[0] print 'shoplist is',shoplist print 'mylist is',mylist print 'Coping by making full slice' mylist = shoplist[:] del mylist[0] print 'shoplist is',shoplist print 'mylist is',mylist ``` Simple Assignment shoplist is ['carrot', 'banana'] mylist is ['carrot', 'banana'] Coping by making full slice shoplist is ['carrot', 'banana'] mylist is ['banana']
很明顯,普通引用只是名稱的繫結,3而只有完整切片才是真正意義上的複製。所以我們在簡單引用後一定要考慮是否可以更改,因為操作可能影響到源物件。
面向物件程式設計注意在python中即使是整型也會被視為物件,這與C++和Java(1.5以前),在它們那兒整數是原始的內建型別。
在python中秉承一切皆物件的原則。
欄位(Filed):屬於某個物件或類的變數
方法(Method):屬於類的函式
屬性(Attribute):上者綜合
-self
類方法與普通函式的區別所在,將類函式引數項前面用self修飾。與C++中this作用類似。
python class Person: def say_hi(self): print('Hello,how are you?')
Python中 特殊意義的類函式名稱
init 方法
該方法會在類的物件被例項化(Instantiated)時立即執行。這一方法可以用作初始化操作。
python class Person: def __init__(self,name) self.name = name def say_hi(self): print('Hello,my name is',self.name) p = Person('Swaroop') p.say_hi()
特殊變數命名方法
1、 _xx 以單下劃線開頭的表示的是protected型別的變數。即保護型別只能允許其本身與子類進行訪問。若內部變數標示,如: 當使用“from M import”時,不會將以一個下劃線開頭的物件引入 。
2、 __xx 雙下劃線的表示的是私有型別的變數。只能允許這個類本身進行訪問了,連子類也不可以用於命名一個類屬性(類變數),呼叫時名字被改變(在類FooBar內部,__boo變成_FooBar__boo,如self._FooBar__boo)
3、 __xx__定義的是特列方法。使用者控制的名稱空間內的變數或是屬性,如init , __import__或是file 。只有當文件有說明時使用,不要自己定義這類變數。 (就是說這些是python內部定義的變數名)
在這裡強調說一下私有變數,python預設的成員函式和成員變數都是公開的,沒有像其他類似語言的public,private等關鍵字修飾.但是可以在變數前面加上兩個下劃線"_",這樣的話函式或變數就變成私有的.這是python的私有變數軋壓(這個翻譯好拗口),英文是(private name mangling.) **情況就是當變數被標記為私有後,在變數的前端插入類名,再類名前新增一個下劃線"_",即形成了_ClassName__變數名.**