python三-----基礎語法
注意:(1)函式可以傳任意型別的引數,但是一旦要保證合法操作
一、語句和變數
1、語句折行
(1)\讓使用者知道解析的是那行程式碼沒有寫完,在下行繼續讀。換行
(2)任何用(),[],{}括起來的程式碼,都是一個程式碼塊
2、對於字串來說,三引號''' '''可以換行,單引號和雙引號不能換行
3、使用 ; 可以把多個語句寫到同一行. 但是強烈不建議這麼做。
二、縮排規範:
1、Python中使用縮排表示語句塊
2、同一個語句塊中的程式碼必須保證嚴格的左對齊(4個空格為一組)(左邊有同樣數目的空格和製表符)。不要使用製表符進行縮排,不同的平臺製表符代表的大小不同,可能會產生差異
三、賦值
1、多重賦值
2、多元賦值:多個變數賦不同的值
交換兩個元素的值
3、作用域和生命週期
(1)Python中, def, class, lamda(我們後⾯面會講) 會改變量的作用域
(2)if, else, elif, while, for, try/catch 不會改變量的作用域
a、說明了函式內部宣告的變數在類外不能訪問
b、說明了函式外部宣告的變數在類內可以訪問
(3)內建函式globals()返回了全域性作用域下都有哪些變量, 內建函式locals()返回了區域性作用域下都有哪些變量
關於Python的變量的生命週期, 這個不需要程式猿操心, Python提供了垃圾回收機制自動識別一個變量的生命週期是否走到盡頭, 並自動釋放空間
(4)return關鍵字函式返回幾個值,就要用幾個返回值去接收:可以使用變數或者佔位符使數量相同,把返回值依次取出來
改進:
4、特殊識別符號
(1)Python使用下劃線(_)作為變量的字首和字尾, 來表示特殊的識別符號。私有化之後,不能被別的檔案訪問。我們也可以強行訪問。
(2)_xxx表示一個 "私有變量", 使用 from module import * 無法匯入。
(3)前後都有_的變數一般是系統定義的名字。我們自己在給變數命名時要避免這種風格,防止和系統變數衝突。
5、文件字串
(1)單行註釋:#
(2)多行註釋:使用三引號('''/''')在函式/類開始位置表示。這個東西也被稱為文件字串。這種註釋的方式應該寫在函式的第一行,如果不是第一行就會出現錯誤。
a、列印函式的說明屬性:
b、用內建函式進入幫助模式(此種方式打印出了函式的函式名,作用域,結束標誌)
c、如果不在第一行寫註釋,則不能正確顯示
(3)函式的註釋:在函式的開頭聲明瞭函式的功能和接收的含義,以及返回的值。
6、模組文件:不光一個函式/類可以有一個文件字串,一個模組也同樣可以
四、物件和型別
1、一個完整的python物件,必須包含以下幾個方面:
a、身份: 每一個物件都有一個唯一的身份標識自己. 實⽤用內建函式id可以看到這個標識的具體的值。
型別: 物件的型別決定了物件儲存什麼樣的值, 可以進行什麼樣的操作, 以及遵守什麼樣的規則. 實用內建函式type可以檢視物件的型別. 本質上就是把物件分類。
值: 表示物件中具體儲存的內容. 有些物件的值可以修改, 有些物件的值不能修改, 這個稱為物件的 "可變性"。
元組和字串初始化之後都不能改變它的值
Python中任何型別的值其實都是一個物件(判定一個東西是不是物件, 就嘗試用id取一下看能否取到)。100 這樣的字面值常量, 也是物件; 一個字元串, 也是物件; 一個函式, 也是物件; 一個型別(type函式的返回值), 其實也是物件; 一個模組, 還是物件;
python中自動接收與回收聲名週期的變數(引用計數原則)
2、Python有⼀一個特殊的型別, 稱為NoneType. 這個型別只有⼀一個物件, 叫做None
(1)NoneType類似於C語言中的void
(2)None類似於C語言的空指標NULL
(3)None這個物件沒啥有用的屬性, 它的布林值為False
布林值為NULL的:
None
False
所有值為0的數字(0, 0.0, 0.0 + 0.0j)
"" (空字串串)
() (空元組)
{} (空字典)
其他情況下, 這些內建物件的布林值就是True。
3、物件值得比較
(1)所有內建型別物件都可以進行比較操作來進行值比較 (在python2中不同得型別也可以進行比較,在python3中只有相同得型別才可以進行比較)
以下是在python2中得出得結論:
(2)比較運算的結果是True或者False
(3)比較運算子包括 ==, !=, <, >, <=, >=
4、物件身份得比較
(1)可以使用id這個內建函式來比較,如果id得值相同,說明指向同一個物件‘
(2)可以通過is關鍵字,位元組進行判定
(3)提供了is not可以直接判定兩個變數名是否指向不同得物件
5、物件型別得比較
(1)兩個物件比較型別是否相同,可以使用內建函式type
(2)使用isinstance
6、型別工廠函式
(1)不能把list強制型別轉化為dict
(2)元組可以構建成字典
(3)可變物件必須是鍵值對,才能轉化為字典
(4)list裡面也是list
總結:list的強制型別轉換,需要關注:a、引入的物件必須是可變的物件;b、迭代的每一個元素裡面只有兩個值,組成鍵值對,一旦不能正常轉換為鍵值對,就會報錯
7、python不支援得型別:
a、char, byte: 可以使用長度為1的字元串, 或者整數代替;
b、指標: Python替你管理記憶體, 雖然id()返回的值接近於指標的地址, 但是並不能主動去修改;
c、int/short/long: 以前版本的Python中也是區分int和long的, 但是後來統一在一起了;
d、記住Python中的整數表示的範圍,只取決於你機器器記憶體的大小.
e、float/double: Python的float其實就是C語言的double. Python設計者認為沒必要支援兩種浮點數。
五、數字和運算:
1、常用內建函式/模組
(1)abs:求絕對值函式:接收一個數,返回一個數得絕對值(不能是字串,只能是數字)
(2)divmod(商取餘):兩個引數:被除數和除數,返回值是商和餘數組成得元組
或者採用兩個變數將這兩個數接受起來
(3)round(x,y)接收兩個引數:第一個引數是要處理的浮點數,第二個引數是保留多少個小數
存在數學庫:
但是,pi值最為一個常量儲存在庫中,存在一個精度範圍,pi在庫中儲存了11位,不是一個無限不迴圈小數:
(4)str強制型別轉換:
(5)sorted 四個引數 第一個引數為可迭代物件(單一物件不用進行排序);第二個引數是cmp代表了排序方法(是一個函式,接收兩個引數,返回一個值);第三個引數key:也是一個排序方法(是一個函式,接收一個引數,返回一個值,根據這個值進行排序);第四個引數:reverse布林值,預設為False,是增序。後面三個引數可以不傳實參,使用預設值。【核心引數是可迭代物件】
使用預設值,排序順序是從大到小
b、指定排序順序
c、指定第二個引數
d、key關鍵字:
六、條件和迴圈
1、同級結構保持左對齊,就能搭配在一起。if的巢狀if語句,只要保持左對齊,就能對應相應那一層的if語句
2、條件表示式
3、和迴圈搭配的else(else不僅可以和if搭夥,還能和while、for搭夥)
A、和for迴圈搭配
此函式遍歷結束之後一定會走else,如果沒有完整的遍歷一遍for迴圈,則不執行
B、和while迴圈搭配
在while迴圈中,如果在中途被打斷,也不能正確的輸出
4、關鍵字賦值:可以把值賦值給指定的引數
函式,未給定一個值的時候,預設使用預設值
a、傳預設值
b、賦值可以賦值給指定的引數
python不支援函式過載。函式的引數不止可以是整數、浮點數、小數,還可以是一切指定的物件[],(),{},甚至可以是函式
函式既可以作為函式的引數,也可以作為函式的返回值
有的引數有預設值,有的引數沒有預設值的時候,有預設值的引數應放在後面、沒有預設值的引數寫在前面
七、引數組(可變長引數組)
可變長引數組:通過將引數名前加一個*號,*之後的內容表示是一個元組
條件:join函式做字串拼接,接受可迭代物件,然後把字串元素拼接起來
(1)可遍歷,也叫可迭代物件
拼接字串不能是非字串,必須是可以拼接的物件
(2)物件元素支援字串化操作
前面加兩個*,表示字典(**代表把不定數額的引數轉化成dict字典)
(3)使用 \t 分割的行文字, 可以很方便的和linux上的一些文字處理工具搭配使用。 比如cut, sort, awk等. 通過在引數名前加兩個星號 **, 星號後面的部分表示傳入的引數是一個字典.。一個*代表會把傳進去的引數組裝成一個元組tuple。這時候呼叫函式就可以按照關鍵字引數的方式傳參了。
有幾個鍵值對寫幾個鍵值對,每個鍵值對之間用逗號分隔開。
(4)函式的返回值
a、通過return關鍵字返回一個物件.
b、如果沒有return語句句, 則返回的是None物件.
c、可以同時返回N個物件, 通過 , 分割(本質上是在返回一個元組).
把元組中對應的值取出來
(5)函式的內建屬性:函式也是一個物件, 通過內建函式 dir 可以看到一個函式中都有哪些屬性。
python自帶的核型變數,前後加上兩個下劃線
函式可以作為函式的引數,函式裡面還可以巢狀函式,但是超過了函式的作用域,則會出現錯誤