python基礎筆記(非系統/自用/參考小甲魚的零基礎入門學習python)上


---恢復內容開始---

1.原始字符串的使用,在字符串前加r就行(用於對\進行自動轉譯)

  >>>str = r'C:\now\wifr'
  'C:\\now\\wifr'
  但在字符串后面不能有空的'\'
  >>>str = r'C:\now\wirf\'
  error
  長字符串的使用,用""" """將字符串包起來
  >>>str = """ xsf,
       xfasf,
        sdasdas"""
  'xsf,\nxfasf,\nsdasdas\n'
(會自動給回車處加\n)

2.isinstance(變量,類型):用於判斷該變量是否為該類型,返回t/f

   id(變量名):用於查看變量的地址

   dir([]):不帶參數時,返回當前范圍內的變量、方法和定義的類型列表;帶參數時,返回參數的屬性、方法列表

3.在變量命名時,不能與系統BIF重名,否則會時原BIF函數無法使用

4.python2版本整形除法‘/’采用地板規則,向下取整,python3版本則保留小數,有‘//'運算負責采用地板規則,‘**’為冪運算(eg:2**3=8)

5.冪運算符,比起左側的一元運算符優先級高,比起右邊的一元運算符優先級低(eg:  -3**2=-9 => -<** =>-(3**2)  3**-1=1/3 => **<- =>3**(-1))

(一元操作符:只有一個操作數的運算符  二元操作符:兩個操作數)

6.python允許a<b<c 等同於 (a<b) and (b<c),其他語言則不允許

7.運算符優先級:**>正負>加減乘除>大於小於等於>and or not

8.python允許esif(等同於else if )if else 搭配比多個if好

9.python的三元操作符: x if 布爾 else y 等同於C的 布爾?x:y

10.斷言assert:當assert關鍵字后邊的條件為假的時候,程序自動崩潰並拋出AssertionError異常

  >>>assert 3>4

   AssertionError

作用:一般來說我們可以用該關鍵字在程序中置入檢查點,當需要確保程序中的某個條件一定為真才能讓程序正常工作的話,assert關鍵字就非常有用了

11.python的for循環可以直接調用迭代器的next方法,會自動的捕獲stoplteration異常,自動結束循環

語法:for 變量 in 表達式(也可以是文件):

          循環體

eg:>>>for i in 'wocao':

      print(i,end = ' ')

  w o c a o 

for常與range(start,stop,step)搭配(start(可有可無,無則從零開始)到stop-1,step是間隔,step為2,則類似1,3,5.。。)

eg:>>>for i in range(5):

      print(i)

  0/n1....4

12.列表(跟數組差不多,但可混可空)。添加可用append()只能添加一個eg:列表名.append(xxx);也可以用exend([,]),可添加多個eg:列表名.extend([xxx,xxxx])。指定位置添加用insert(添加位置,添加內容)。

刪除用remove(具體內容),或del 列表名[下標](del也可直接將整個列表刪除);因為python的列表是用棧(數據結構)來存儲的,所以也可以用pop(索引可有可無)來將棧頂(列表最后)元素彈出

列表分片:列表名[x:y];列表與列表的比較:以首元素為准;列表*int:將列表復制3次存進列表中;判斷元素是否在列表中,用in(只能判斷同一層) eg:xxx in listname 返回t/f,對於listname[xxx,[xxxx,xx],x]   xxxx in listname return False | xxxx in listname[1](嵌套列表所在下標) return True

listname.reverse():翻轉列表      listname.sort(func=排序算法默認歸並,key=算法搭配的關鍵字,reverse=t/f默認f):排序

列表復制:1. listname1=listname[:](分片) 兩個指向不同的內存地址,只是內容一樣,所以原列表改變不影響listname1

     2. listname2=listname 兩個指向同一個內存地址,當原列表發生改變時,listname2也會改變

13.元組tuple(不可變位,不可重新賦值的list):聲明一個元組,tuplename=(,,,,)關鍵是','  tuplename=8, 元組 tuplename=(8) int   2*(8)=16 2*(8,)=(8,8) 

添加元素(通過切片的方式):tuplename=tuplename[:添加位]+(添加的元素,)+tuplename[添加位:]

14.字符串拼接用+,並不是改變原來的字符串,而是將拼接后的字符串貼上一樣的標簽,原來的字符串會被釋放

15.判斷字符串是否為數字可用isdigit()、isnumeric()、isdecimal()方法,三者的區別如下

isdigit()

True: Unicode數字,byte數字(單字節),全角數字(雙字節),羅馬數字
False: 漢字數字
Error: 無

isdecimal()
True: Unicode數字,,全角數字(雙字節)
False: 羅馬數字,漢字數字
Error: byte數字(單字節)

isnumeric()
True: Unicode數字,全角數字(雙字節),羅馬數字,漢字數字
False: 無
Error: byte數字(單字節)

16.format()方法

17.聲明函數:def func_name(xxx='默認值可有可無',xxxx='默認值可有可無',*xxxxx可變(參數個數無限,原理是打包成元組)參數):

        'xxxxx函數文檔,用func_name.__doc__可調出來看,不調用則不顯示'

        #注釋

                       函數體

*args為任意的參數,通過下面代碼將這些參數寫進列表中

 關鍵詞參數:在調用函數時,傳參使用 形參名='實參' 可避免實參順序錯亂導致結果與預期不符 eg:func_name(name='比企谷彩羽’,xxx='xxxx')

python可以返回多個值(以列表或元組的形式)

18.過程:沒有返回值的函數

19.在試圖在函數內部修改全局變量時,python隱蔽機制會在函數中創建一個名字一模一樣的局部變量,從而使修改的結果是修改了局部變量,全局變量不變

但可以通過global關鍵字在函數內修改全局變量    

20.內部函數(嵌套函數):在函數體里面再聲明一個函數,在外層函數體內可以任意的調用內部函數,但出了外層函數,則不能對內部函數直接進行調用

21.閉包:閉包是由函數及其相關的引用環境組合而成的實體(即:閉包=函數+引用環境)(想想Erlang的外層函數傳入一個參數a, 內層函數依舊傳入一個參數b, 內層函數使用a和b, 最后返回內層函數)

.

將外層函數看為全局,則在外層函數里聲明的變量對於內層函數來說就相當於全局變量,所以試圖在內層函數修改外層函數變量時,python會將外層變量屏蔽起來,系統就會報錯:

解決方法:python3之后,可以同過nonlocal關鍵字來解決,而python2則需同過將外層函數變量聲明成容器(list,tuple,str,...),因為容器不是存放在棧里面 

容器:nonlocal關鍵字:  

22.匿名函數:使用lambda關鍵字聲明函數,調用時直接賦值給某個變量就行,當匿名函數不使用時,python的垃圾回收機制會將該函數清理掉

其中x為參數,參數可有多個

23.兩個值得認識的BIF:過濾器filter(function or None,iterable迭代器列表之類的)將迭代器中True的抽取出來

自己寫過濾規則,下面的是將偶數過濾

function參數只需將函數名傳給filter(),左=右

映射map(function,iterable)將iterable根據function進行加工,eg:

24.python系統默認的遞歸(recursion)深度是100層,想要自定義遞歸深度,需

>>>import sys

>>>sys.setrecursionlimit(deepth)

25.字典dict(key->value):字典的標志性符號為{ } eg:

dictname = {key1:value1, key2:value2,...}

聲明之后就可以通過key來索引對應的value:x = dictname[key1]   ==> x == value1

 字典常用方法:

fromkeys(...)  --> dict.fromkeys(S[,v]) -> new dict with keys from S and values equal to v(v defaults to None)

keys() --> dict.keys() 將字典中的key抽出來,常用於for  -->  for each in dictname.keys()

values() -->dict.values() 將字典中的vaules抽出來,常用於for  -->  for each in dictname.values()

items() -->dict.items() 將字典中的(key,value)組合抽出來,常用於for  -->  for each in dictname.items()

keys():values():items():

 

 get()-->dict.get(key)獲取value,比直接dict[key]靈活,當dict[key]不存在時系統會報錯,而get(key)則會返回一個None來免程序報錯

 

clear()-->dict.clear()將字典清空

copy()-->dict.copy()復制字典--> dict2 = dict1.copy() 跟dict3 = dict1的效果一樣,但dict2所在的地址於dict1不同,而dict3與dict1指向同一個地址

26.成員資格操作符:in 和 not in   -->  用來判斷某元素是否存在於某容器中(list,字典,str,tuple...) eg:xxx in xxxx  返回t/f

27.集合(set):集合中的元素是不重復的。創建:直接把一堆元素用花括號括起來;或用set([,,,,])工廠函數來創建

 直接用花括號聲明時,沒有鍵值對的為集合,有則為字典;集合會將重復的值去除;集合無法用下標索引

不可變集合(frozenset):不能增刪改

28.打開文件(open):open(file, mode = '打開模式默認r', buffering = 1, encoding = None, newline = None, closefd = True, opener = None)

在使用write()或writeline()方法時,打開模式需為'w'或‘a',w會覆蓋原來的內容,a則在原內容的末尾添加新內容

若通過open創建了文件沒有執行filename.close()操作,寫入的內容將不被保存

with 語句適用於對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的“清理”操作,釋放資源,比如文件使用后自動關閉/線程中鎖的自動獲取和釋放等。

29.常用模塊: os模塊、os.path模塊(是處理出來的模塊,使用os.path.function)、time模塊、

pickle模塊(將對象轉換成二進制存儲)   

pickle_file = open(’文件名.pkl','注意用wb模式) #創建用來保存二進制的文件,w為寫b指二進制wb對應讀就是rb   

pickle.dump(想要保存的對象,pickle_file) #將對象倒進去

pickle_file_load = open(open創建的文件名,'rb模式') #打開二進制文件

xxxx = pickle.load(pickle_file_load) #將二進制文件轉成對象

30.try - except語句:

try:

  檢測范圍

except Exception_name[as reason(可有可無,用來顯示錯誤原因)]:

  出現異常后的處理代碼

 

PS:try語塊一旦執行到異常處,程序會跳過后面的語句執行,直接執行except中的語句

raise ExceptionType:用於故意拋出異常

30.else與while的配合:

如果if中的語句全部被執行,沒有中途跳出,則else中的語句會被執行;有中途跳出則不會被執行(注意else的縮進是和while同級)

 

 

 

 

 

 

 

 

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM