在python中一共有兩種作用域:全局作用域和函數作用域全局作用域:在全局都有效,全局作用域在程式執行時創建,在程式執行結束時銷毀;所有函數以外的區域都是全局作用域;在全局作用域中定義的變數,都屬於全局變數,全局變數可以在程式的任意位置被訪問; 函數作用域:函數作用域在函數調用時創建,在調用結束時銷 ...
在python中一共有兩種作用域:全局作用域和函數作用域
全局作用域:在全局都有效,全局作用域在程式執行時創建,在程式執行結束時銷毀;所有函數以外的區域都是全局作用域;在全局作用域中定義的變數,都屬於全局變數,全局變數可以在程式的任意位置被訪問;
函數作用域:函數作用域在函數調用時創建,在調用結束時銷毀,函數每調用一次就會產生一個新的函數作用域;在函數作用域中定義的變數,都是局部變數,只能在函數內部被訪問;在函數中為變數賦值時,預設都是為局部變數賦值;如果需要在函數內部修改全局變數,則需要使用global關鍵字來 聲明 使用全局變數。
變數的查找規則:當我們使用一個變數時,會優先在當前作用域中尋找該變數,如果有則使用;如果沒有則繼續去上一級作用域中尋找,如果有則使用;如果依然沒有則繼續去上一級作用尋找,依次類推,直到找到全局作用域,依然沒有找到的話,則會拋出異常;
函數式編程:函數先定義,再使用
一等對象一般都會具有如下特點:(函數)對象是在運行時創建的;(函數)能賦值給變數或者作為數據結構中的元素;(函數)能作為參數傳遞;(函數)能作為返回值返回;
高階函數:高階函數至少要符合以下兩個特點中的一個:接收一個或多個函數作為參數;將函數作為返回值(閉包,通過閉包可以創建一些只有當前函數(嵌套的內部函數)能訪問的變數,可以將一些私有的數據藏到閉包中。形成閉包的條件:1.函數嵌套;2.將內部函數作為返回值返回;3.內部函數必須要使用到外部函數的變數;);
匿名函數:lambda函數表達式(只是函數的簡寫,語法糖),專門用來創建一些簡單的函數,他是函數創建的一種方式;語法:lambda 參數列表:返回值
在定義函數時,可以通過"@"裝飾器,來使用指定的裝飾器,來裝飾當前的函數,可以同時為一個函數指定多個裝飾器,這樣函數將會按照從內向外的順序被裝飾。
尚學堂的Python視頻教程 https://pan.baidu.com/s/1dGCBKx7 密碼:ofml
python對象==========================
對象是記憶體中專門用來存儲數據的一塊區域,對象可以用來存放各種數據(數字,布爾值,代碼),對象由三部分組成:對象的標識id,對象的類型type,對象的值value,當用一個變數去保存變數的時候,保存的是對象的id(記憶體地址),一個對象一旦創建它的id和type就永遠不能改變了,而對象的值value,可變對象的值可以改變,不可變對象的值不可以改變。
面向對象oop:python語言中的所有操作都是通過對象來進行的。面向對象的編程語言,關註的是對象,而不關註過程;對於面向對象的語言來說,一切都是對象;面向對象的編程思想,將所有的功能統一保存到對應的對象中。
慕課網--Python高級編程和非同步IO併發編程 https://www.bilibili.com/video/av26982371/?p=5
第二章:
在python一切皆對象,(在靜態語言java中,有兩個概念:object和class,object只是class的生成的一個實例而已),在python中class也是對象,函數也是對象,python中的代碼和模塊也是對象,python可以動態的修改類的屬性;(在python中,函數和類都是對象,屬於一等公民,這裡的一等公民可以進行以下操作:1、可以賦值給一個變數,2、可以添加到集合對象中,3、可以作為參數傳遞給函數,4、可以當做函數的返回值;)(list是一個集合;)
type、object和class的關係:
type可以用來返回(一個變數指向的)對象的類型,(也可通過type生成一個類,元類編程)。type->class->object:type可以生成class,class可以生成object;(type是用來生成class對象的,我們平時使用的實例,就是自己定義的類或者是內置的類來生成的一些實例。)object是所有對象都要繼承的最頂層的基礎類;(類名.__bases__:查看類的基類),如果一個類沒有繼承任何類的話,預設是繼承自object類的。type本身也是一個類,同時type也是一個對象,type.__bases__是object;type(object)是type,表明object是由type生成一個對象,type和object形成一個環路,object.__bases__是空,最頂層基類object的基類是空;
在python中一個對象有三個特征:1、身份:對象在記憶體中的地址,通過id()函數查看一個對象的身份,任意生成一個對象都會有一個id, 2、類型:任何一個對象都是有類型的, 3、值:比如:a=1 ,1就是a變數的值,1會被python解釋器用int類型來封裝,封裝後用a這個變數指向1這個對象。
python中的常用內置類型:
None:python解釋器在啟動的時候,會用None類型來生成None的對象,a=None b=None:a和b都指向Python解釋器中唯一的None對象,id(a)=id(b)返回true;所以None對象在全局只有一個。
數值類型:int,float,complex(複數),bool;
迭代類型:可以用for迴圈來進行遍歷;
序列類型:list,tuple,str,array,range,bytes/bytearray/memoryview(二進位序列)
映射類型:dict字典,映射類型有key和map,
集合類型:set和frozenset;set和dict在Python里的實現原理是一致的,所以它們在Python里的性能都非常高。
上下文管理類型:with語句;
其他:模塊類型,class和實例,函數類型,方法類型(class裡面定義的函數),代碼類型(代碼本身也會被Python解釋器變成一個對象類型),object類型,type類型,ellipsis類型(省略號的類型),notimplemented類型(做面向對象的高級設計時會用到);
java,C#這類編譯型語言在運行前編譯的時候,就可以做一些類型的檢測,但Python一切皆對象的概念,使得Python沒有編譯過程,那麼很多代碼的錯誤只有在代碼運行起來的時候,才會知道我們的錯誤,這就是動態語言帶來的一些弊端。 (第二章 完結)