python基礎學習(不瞭解或瞭解深淺)
一、識別符號
Python中以下開頭的識別符號是有特殊意義的,一般避免使用:
- 以單下劃線開頭的識別符號(如_width)表示不能直接訪問的類屬性,另外也不能通過“from xxx import *”匯入
- 以雙下劃線開頭的識別符號(如__add)表示類的私有成員
- 以雙下劃線開頭和結尾的是Python裡的專有標識(如__init__表示建構函式)
二、變數
- 變數的型別可以隨時變化,使用內建函式type()可以返回變數的型別。
- 允許多個變數指向同一個值,使用id()可以返回變數所指的記憶體地址。
三、基本資料型別
1、字串型別
字串通常使用單引號(' ')、雙引號(" ")、或者三引號(''' '''或""" """)括起來。
單引號和雙引號的字串必須在一行上,三引號內的字串可以分佈在連續的多行上。
2、資料型別轉換
函式 | 作用 |
---|---|
int(x,base=10) | 將x轉換成整數型別 |
float |
將x轉換成浮點數型別 |
complex(real[,imag]) | 建立一個複數 |
str(x) | 將x轉換成字串 |
repr(x) | 將x轉換成表示式字串 |
eval(x) | 計算在字串中的有效python表示式,並返回一個物件 |
chr(x) | 將整數x轉換成一個字元 |
ord(x) | 將一個字元x轉換成它對應的ASCll碼值 |
hex(x) | 將一個整數x轉換成一個十六進位制的字串 |
oct(x) | 將一個整數x轉換成一個八進位制的字串 |
四、序列(第七章因為未儲存不見了後面補上)
1、切片:sname[start:end:step]
如果想要複製整個序列,可以將引數start和end省略,但是中間的冒號不能省,如str[:]
2、乘法(Multiplying)
可以實現初始化指定長列表的功能,如emptylist=[None]*5
函式 | 作用 |
---|---|
list() | 將序列轉換為列表 |
str() | 將序列轉換為字串 |
sum() | 計算元素和 |
sorted() | 對元素進行排序 |
reversed() |
反向序列中的元素 |
enumerate() |
將序列組合為一個索引序列,多用在for迴圈中 |
八、流程控制
(1)選擇語句
使用not語句:if x is not None 是最好的寫法,if not x 必須清楚x等於None、False、空字串、0、空列表、空字典、空元組時才對判斷沒有影響。
(2)迴圈結構語句
九、字典
字典中的鍵必須唯一,不允許同一鍵出現兩次,如果出現兩次則後一個值會被記住。
(1)字典的建立——dict()函式
1、通過對映函式建立字典
dictionary = dict(zip(list1,list2))
引數說明:
- dictionary:表示字典名稱
- zip()函式:通過將多個列表或元組對應位置的元素組合成元組並返回包含這些內容的zip物件,也可以使用tuple()函式將zip物件轉換為元組,還可以使用list()函式將其轉換為列表。
- list1:一個列表,用於指定要生成字典的鍵。
- list2:一個列表,用於指定要生成字典的值。
- 返回值:如果list1和list2的長度不同,則與最短的列表長度相同。
2、通過給定的鍵值對建立字典
dictionary = dict(key1=value1,key2=value2,...,keyn=valuen)
引數說明:
- dictionary:表示字典名稱。
- key1,key2,...,keyn:表示元素的鍵,必須是唯一的,並且不可變。
- value1,value2,...,valuen:表示元素的值,可以是任何資料型別,不是必須唯一的。
十、集合
集合的所有元素放在一對大括號{}中,兩個相鄰元素間使用逗號分割,特點:唯一且無序。
集合最好的應用就是去重,因為每個元素是唯一的。
十一、函式
(1)函式的建立和呼叫
pass語句表示空語句,它不做任何事情,起到佔位符的作用。
可以使用...(三個連續的點)來省略程式碼。
# pass語句
def func():
pass
# ...省略程式碼
def func():
...
(2)引數傳遞
可以使用函式名.__default__檢視函式的預設值引數的當前值
(3)變數的作用域
當局部變數與全域性變數重名時,對函式體的變數進行賦值後,不影響函式體外的變數。
message = "唯有在被追趕的時候,你才能真正地奔跑"
print("函式體外:message=", message)
# 輸出:函式體內:message=唯有在被追趕的時候,你才能真正地奔跑
def f_demo():
message = "命運給予我們的不是失望之酒,而是機會之杯。"
print("函式體內:message=", message)
# 輸出:函式體內:message = 命運給予我們的不是失望之酒,而是機會之杯。
f_demo()
print("函式體內:message=",message)
# 輸出:函式體內:message=唯有在被追趕的時候,你才能真正地奔跑
內建函式 | 作用 |
---|---|
dict() | 用於建立一個字典 |
help() | 用於檢視函式或模組用途的說明 |
dirt() |
不帶引數時返回當前範圍內的變數、方法和定義的型別列表 帶引數時返回引數的屬性、方法列表 |
hex() | 用於將10進位制整數轉換成16進位制,以字串形式表示 |
next() | 返回迭代器的下一個專案 |
divmod() | 把除數和餘數運算結果結果起來,返回一個包含商和餘數的元組 |
id() | 用於獲取物件的記憶體地址 |
sorted() | 對所有可迭代的物件進行排序操作 |
ascii() | 返回一個表示物件的字串,但是對於字串非ASCII字元則返回通過repr()函式使用\x,\u,\U編碼的字元 |
oct() | 將一個整數轉換成8進位制字串 |
bin() | 返回一個整數int或者長整數long int的二進位制形式 |
open() | 用於開啟一個檔案 |
str() | 將物件轉化為字串形式 |
sum() | 對序列進行求和計算 |
filter() | 用於過濾序列,返回由符合條件元素組成的新列表 |
format() | 格式化字串 |
len() | 返回物件長度或專案個數 |
list() | 用於將元組轉換成列表 |
range() | 返回一個可迭代物件 |
zip() | 用於將可迭代的物件中對應的元素打包成一個元組,然後返回由元組組成的物件 |
compile() | 將一個字串編譯為位元組程式碼 |
map() | 根據提供的函式對指定序列做對映 |
reversed() | 返回一個反轉的迭代器 |
round() | 返回浮點數x的四捨五入 |
十二、類和物件
(1)訪問限制
為了保證類內部的某些屬性或方法不被外部所訪問,可以在屬性或方法名前面新增下劃線、雙下劃線或首尾加雙下劃線。
- __foo__:首尾雙下劃線表示定義特殊方法,一般是系統定義名字,如__init__()
- _foo:以單下劃線開頭的表示保護型別的成員,只允許類本身或子型別進行訪問,但不能使用from module import *語句匯入,可以通過例項名訪問。
- __foo:雙下劃線表示私有型別的成員,只允許定義該方法的類本身進行訪問,而且不能通過類的例項進行訪問,但是可以通過“類的例項名._類名__xxx”方式訪問。
class Swan:
'''天鵝類'''
__neck_swan = '天鵝的脖子很長'
def __init__(self):
print("__init__():", Swan.__neck_swan)
swan = Swan()
print("加入類名:", swan._Swan__neck_swan)
(2)@property(裝飾器)
語法格式:
@property
def methodname(self):
block
引數說明:
- methodname:用於指定方法名,該名稱最後將作為建立的屬性名。
- self:必要引數,表示類的例項。
- block:方法體,實現具體的功能。
1、建立用於計算機的屬性
通過@property將一個方法轉換為屬性,從而實現用於計算的屬性,將方法轉換為屬性後,可以直接通過方法名來訪問方法,而不需要再新增一對小括號()。通過@property轉換後的屬性不能重新賦值否則會報錯。
2、為屬性新增安全保護機制
預設情況下建立的類屬性或例項,是可以在類體外進行修改的,如果想要其不能在類體外修改,可以將其設為私有,但是設為私有之後也不能獲取它的值,如果要建立一個可以讀取但不能修改的屬性,就可以使用@property實現。
class Tvshow:
def __init__(self, show):
self.__show = show
# 將方法轉化為屬性
@property
def show(self):
return self.__show
tvshow = Tvshow("正在播放《戰狼2》")
print("預設:",tvshow.show)
# 下面將報錯
tvshow.show = "正在播放《紅海行動》"
print("修改後:",tvshow.show)
(3)繼承
1、基本語法
語法格式:
class ClassName(baseclasslist):
'''類的幫助資訊'''
statement
引數說明:
- ClassName:用於指定類名
- baseclasslist:用於指定要繼承的基類,可以有多個類名之間用逗號隔開
- '''類的幫助資訊''':用於指定類的文件字串,提示資訊。
- statement:類體。
2、派生類中呼叫基類的__init__方法
在派生類中定義__init__()方法後不會自動呼叫基類的__init__()方法。要在派生類中使用基類的__init__()方法必須進行初始化,即需要在派生類中使用super()函式呼叫基類的__init__()方法。
class Fruit:
def __init__(self, color = "綠色"):
Fruit.color = color
def harvest(self):
print("水果原來是:" + Fruit.color + "的!")
class Apple(Fruit):
def __init__(self):
# 如果不新增此語句將會報錯
super().__init__()
print("我是水果")
apple = Apple()
apple.harvest()
十三、模組
(1)使用from...import 語句匯入模組
在使用import語句匯入模組時,每執行一條import語句都會建立一個新的名稱空間(namespace),並且在該名稱空間中執行與.py檔案相關的所有語句。
如果不想在每次匯入模組時都建立一個新的名稱空間,而是將具體的定義匯入到當前的名稱空間中,就可以使用from...import語句,使用from...import語句匯入模組後不需要再新增字首,直接通過具體的變數、函式和類名等訪問即可。
在匯入模組時,如果使用萬用字元*匯入全部定義後要檢視具體匯入了哪些定義,可以通過dir()函式來檢視。
(2)模組搜尋目錄
當使用import語句匯入模組後,預設情況下會按照以下順序進行查詢:
- 在當前目錄(即執行的python指令碼檔案所在目錄)下查詢。
- 到PYTHONPATH(環境變數)下的每個目錄中查詢。
- 到Python的預設安裝目錄下查詢。
以上各個目錄的具體位置儲存在標準模組sys的sys.path變數中。
十四、檔案操作
(1)基本檔案操作
檔案物件的seek()方法將檔案的指標移動到新的位置。
file.seek(offset[,whence])
引數說明:
- file:表示已經開啟的檔案物件。
- offset:用於指定移動的字元個數,與whence引數有關。
- whence:用於指定從什麼位置開始計算。值為0表示從檔案頭開始計算,值為1表示從當前位置開始計算,值為2表示從檔案尾開始計算,預設為0。
對於whence引數,如果開啟檔案時沒有使用b(即rb)模式,那麼只允許從檔案頭開始計算相對位置,否則從檔案尾將會報錯。
在使用seek()方法時,offset的值是按一個漢字佔兩個字元、英文和數字點佔一個字元計算的。