python基础:细节问题梳理
基本數據類型
字符串
1. 多行字符串
2. 原始字符串
序列共同特征
字符串
index訪問
切片
- 拼接
- 數乘
2. 列表
+ index訪問
- 切片
- 拼接
- 數乘
3. 元組
index訪問
切片
- 拼接
- 數乘
注意:序列中不存在減運算
注意:min/mx遵循ascll碼,方法如下:
集合
- 無序,不能使用index以及切片
- 不重復
- 可以使用in/len/min/max
- 特有運算符:差集、交集、并集
注意:序列與集合為空時的表示:
python基本數據類型歸納
分類:
+ 值類型:不可改變,包括str,int,float,tuple
值類型的數據不可改變表現在:數據只可讀不可該,對變量重新賦值是析構原變量后生成新變量,所以從這個意義上來說,值類型數據不允許改變(簡單判斷方法:內存地址沒變就是不可改變)
復雜情況:
可以看出:a[3]是引用類型,可以改變,改變后a[3]內存地址未變,相當于未對元組元素進行改變,如果試圖給a[3]賦值,即改變a[3]內存地址,則報錯。所以可證整個元組不可改變
因此:元組的不可改變指:元祖起始內存ID不變,各個元素的起始ID也不可改變!!!
- 引用類型:可改變,包括list,set,dict
可以看出,元素的內存地址改變了,所以可以改變。
python運算符
+ 算數運算符中的Bool值
int str list tuple
set dict
報錯總結:
- 廣義的比較運算符
str
按ascll碼比較,從左往右比,字符與字符間采用與邏輯
list tuple
序列數據類型軍類似
注意:其他未提到的數據類型如字典等,一般不進行關系運算
- 邏輯運算符及其擴展
特征:運算符兩端為bool類型的數值或變量
對于數值,true/false會自動轉變為數值
- 成員運算符
特殊地:字典
- 身份運算符
is 判斷依據為內存id
- 位運算符
運算優先級
對象三要素:id、value、type
對應三個運算符和方法: is == isinstance
sublime快捷鍵
- package control : Ctrl+shift+P
- 運行python命令行:ctrl + ~
- build:ctrl +B
- 注釋:Ctrl+ /
- 縮進:Ctrl+] 撤銷縮進:Ctrl+[
幾個特殊用法
- print(str,’字符’)
- 循環+else
+ 帶步長的切片
帶步長的range()
pass代碼塊的作用:可以代替正式代碼,后想清楚再填充,并且不會報錯
包、模塊以及導入
- 概念
包:文件夾(通俗)
模塊:某個python文件,里面包含類與函數
- 模塊導入方法
- import module_name [as new_name]
import只能接module_name,后面不能接package_name或者module_name.variable_name…
所以通過import module_name導入模塊后,要使用variable/function/class…必須是這樣的形式:module_name.variable_name/function_name/class_name
相比于import直接導入模塊,from … import 直接導入模塊內元素
從 某個包導入某個模塊
from package_name import * :導入包的所有模塊
import package
import 直接導入包的方法不存在,此寫法實際上會導入package的init模塊,因為init.py本身是一個模塊,他的模塊名叫做package_name
- 特殊情況舉例
要想利用*導入package下的modules,必須在package的init.py中用系統變量all標識。
導入某個package特定module
類似上一個,在all中標識
導入某個module
- 與all的搭配
- 從包中導入多個模塊時(上面已經舉例)
- 從模塊中導入多個元素時
- 與all的搭配
注意:避免循環導入module,即module1導入module2,module2又導入module1;python有避免重復導入module的機制
- __init__.py的作用:可以添加某個package下所有module均需要導入的其他module
上述總結的作用是:在init文件中寫入大量公共import,其他文件或模塊直接 import package_name即可引入所有公共import ,提高工作效率。
插入:round系統函數
3:小數點后三位
序列解包
在函數中的應用
函數
關鍵字參數與默認參數
未完待續。。。
類與對象
一、概覽
二、類變量+實例變量+實例方法+構造函數
- 含義:
類變量:不依附于某一個具體的對象,一般為類的多個實例所共有,比如,sum:對類的實例進行計數統計
實例變量:為對象所特有,如姓名等
優雅的類須嚴格區分二者!
實例方法:為實例服務的方法
構造函數:特殊的實例方法,為對象初始化
- 具體區分
1.
可見,通過系統變量dict,可以查看類或對象的屬性;對象student1不含有類變量sum!!
2.
對象既可以訪問實例變量,也可以向上查找類變量;類當然可以訪問類變量,但不能訪問實例變量
3.
實例方法訪問類變量的兩種方式
實例方法訪問實例變量:當然
對象調用實例方法:當然;類調用實例方法也可以,但意義不大,很雞肋,只不過python提供了這樣一種靈活的使用方式
雖然比較雞肋,但此處解釋了參數self的含義:實例方法中的self指對象,self名稱可以變!
可以看到:無報錯
三、類方法與靜態方法
類方法
- 類方法定義:@classmethod
對象可以調用類方法,不推薦;類可以調用類方法,推薦;
類方法當然能調用類變量:cls.variable,類方法不能調用實例變量;當然cls也可以換為其他符號,比如this
2.靜態方法
- 靜態方法定義:@staticmethod
靜態方法本質上就是個普通函數,但放在類里,可以像方法一樣使用。靜態方法為類與實例提供無差別的方法。
靜態方法不能訪問實例變量,可以通過Student.sum來訪問類變量
把它當普通函數對待
四、成員可見性
1.隱藏變量 隱藏的變量不可以通過類、對象直接訪問;但實例、類方法可以在類內部訪問隱藏變量,外部類、對象可以借助各自的方法實現對隱藏變量的訪問。
五、繼承性與多態性
- 法1
- 法2
可以看出,同名方法會被覆蓋
正則表達式與JSON
一、正則概述
- 兩種實現方法
- 思維導圖
- 用法舉例
re模塊的方法
- findall方法
re.findall(pattern, string, flags)
第三個參數:標志位 re.I表示忽略大小寫 re.S表示元字符’.’可以指代換行符
sub方法
re.sub(pattern, repl, string, count, flags)
repl:replace替換值,可以是函數
count:替換個數
flages:re.I、re.S
- 參數為函數實現動態替換
注意:函數名convert1可以自定義;參數value1也可以自定義
唯一要求:自定義函數參數個數為1,函數必須返回某個替代字符串
group 為match對象的一個方法,用來取出匹配值!!
可以說findall與sub是search函數的高級封裝,封裝了一個一個search的過程
注意group方法的使用;span方法會返回匹配值在字符串中的index!
- group方法使用
直接使用findall更優
- 坑:正則最好在字符串前加r
findall()正則中有分組就會只返回分組!!這種情況下使用search+group()可能更靈活
總結
以上是生活随笔為你收集整理的python基础:细节问题梳理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在ubuntu16.04中安装apach
- 下一篇: python进阶:JSON与枚举