您好,登錄后才能下訂單哦!
這篇文章主要介紹關于python基礎知識的整理,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
近些年python語言非常流行,許多開發者都會學習一些python相關知識,為大家整理了python的一些基礎知識,希望對大家有一定的幫助。
注:下文Python代指Python3。
基本信息
和Javascript一樣,面向對象、解釋型、動態數據類型
一切皆為對象(Object
),包含原始數據類型也由內置構造函數創建,高階對象為Object
單行注釋使用#標識,多行注釋同多行字符串
靠縮進約束邏輯分支,無大括號等多余運算符
支持多行單語句、單行多語句
變量無需聲明,必須賦值才會正式聲明
有自己的模塊系統
文件以.py結尾。
基本構成
Python中一切皆對象,數字、字符串、元組、列表、字典、函數、方法、類、模塊等等都是對象。
不同的編程語言以不同的方式定義“對象”。 某些語言中,它意味著所有對象必須有屬性和方法;另一些語言中,它意味著所有的對象都可以子類化。
在Python中,定義是松散的,某些對象既沒有屬性也沒有方法,而且不是所有的對象都可以子類化。 簡單可以解釋為:Python 中的一切都可以賦值給變量或者作為參數傳遞給函數。
所有對象都有三個共同特征:
身份:即對象數據(非變量)在內存中的唯一id,可以通過函數id(obj)
得到
類型:對象的類型決定了對象可以保存什么類型的值,有哪些屬性和方法,可以進行哪些操作,遵循怎樣的規則。可以使用內建函數type()
來查看對象的類型
值:對象所表示的數據
大部分 Python 對象有屬性、值或方法,使用句點.標記法來訪問屬性。 最常見的屬性是函數和方法,一些 Python 對象也有數據屬性,如:類、模塊、文件等。
數據存儲
字符串、數字數據在內存中均為引用類型,即棧內存保存數據本身,堆內存維護一個變量池,如下實例:
# 開辟內存存儲數據'hello',并創建變量a,并將a的指針指向此數據 a = 'hello' # 開辟內存存儲數據'world',并更改變量a的指針,銷毀數據'hello' a = 'world' # 開辟內存存儲數據"hello world!",并同時創建三個變量,將三個變量的指針同時指向此數據 b = c = d = "hello world!" # 多個變量賦值,同上,分別先后對應 e, f, g = 1, 2, 'python'
實際上變量a
在首次聲明并賦值時,棧區開辟內存存儲'hello'
字符串, a
再次賦值時,棧區重新開辟內存存儲數據'world'
字符串,同時將變量a
的指針指向數據'world'
,銷毀數據'hello'
。
其他數據類型,類似;如列表、字典:
a = [1,2,3,4] # 變量a的指針不改變 a[0] = 5 # 變量a的指針改變 a = [2,3,4,5]
變量a
更改列表子數據時,列表本身的指針和位置不會改變,但將a
本身重新賦值時,則同上:原列表數據銷毀、指針指向新列表數據。
Python中支持刪除變量對對象的引用,使用del
語句,如下:
a = 10 b = 20 c = 30 d = [1,2,3,4] del a del b, c del d[0]
對象比較
==
操作符用于測試兩個被引用的對象的值是否相等
is
用于比較兩個被引用的對象是否是同一個對象
類型比較
type(obj)
判斷數據類型
isinstance(object, classinfo)
判斷實例是否屬于某類
緩存和內存回收機制
緩存機制
Python 緩存了某些不變的對象對其進行復用,而不是每次創建新的對象。 在 Python 中變量都是指向某一對象的引用,當多個變量都引用了相同的對象,稱為共享引用。
如下代碼:
# 由于變量僅是對對象數據的一個引用,因此改變 a 并不會導致 b 的變化 a = 1 b = a a = 0 print(a) # 0 print(b) # 1 # 對 a = [1, 2, 3] b = a a[0] = 0 print(a) # [0, 2, 3] print(b) # [0, 2, 3]
內存回收機制
每一個對象有兩個標準的頭部信息:
類型標識符:標識對象數據類型
引用的計數器:用于決定是否需要對對象進行回收
計數器記錄了當前指向該對象引用的數目,一旦對象的計數器為 0
,即不存在對該對象的引用,則這個對象的內存空間會被回收,和Javascript中基本一致, 可以通過sys模塊中的getrefcount()
函數查詢一個對象計數器的值。
import sys sys.getrefcount(1) # 實測python的編譯過程和打印乃至getrefcount這個函數本身都會對目標對象造成多余的引用計數
數據類型
數字 Numbers
三種類型:
int
:整型 int(num)
float
:浮點型 float(num)
complex
:復數型 complex(a, b)
運算相關:
數學常量...
數學函數...
隨機數函數...
三角函數...
字符串 String
方法:str()包含一堆內建函數
三種符號表示方式(三引號保持原有格式):
'str
'
"str
"
'''str
'''
"""str
"""
兩種操作/讀取方式:
下標:str[0]
中括號:str[:]
示例:
var1 = 'Hello World!' print ("已更新字符串 : ", var1[:6] + 'Surmon!') # 已更新字符串 : Hello Surmon!
列表 List
簡單說:類似數組,可嵌套,可作為堆棧使用
基本格式:['str', 1, ['hello']]
,擁有各種類似數組操作的方法,訪問方式可使用下標、中括號[index:index]
。
元組 Tuple
簡單說:類似列表,但只讀。
基本格式:('', '')
,和列表類似,擁有只讀特性,可拼接,擁有基本操作方法。
集合 Sets
簡單說:是一個無序不重復元素的序列
基本格式:{ }
字面量 或 set()
方法,創建一個空集合必須用set()
而不是{ }
字面量,因為{ }
字面量是用來創建一個空字典。
復雜說:類似于數學中的集合,可以進行成員關系測試(交、差、并、補集),還可以用來去重。
BTW:類似于Jvascript中的Set數據結構。
字典 Dictionary
簡單說:就是對象
與Javascript并無太大異樣,多了一些方法,和一些方法名稱的不同,僅可通過obj[key]
訪問成員。
迭代器和生成器
就是Javascript中的Generator和yield,一句話的話就是:交出函數(運算)的執行權,即暫停執行。
兩個參考鏈接:
# 阮一峰 - Javascript 中的 Generator
# Python3 中的迭代器和生成器
函數
普通函數基本沒區別,區別的地方: 函數形參可以加一個*將函數所有不固定參數合并在一個元組,若參數為空,則返回一個空元組。
類
和Jvascript比的話,就是ES5中的構造函數,ES6中的class。
它用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。
對象是類的實例。就是面向對象啦,上下文不再是this
,而是類函數中的首參(一般定義為self
)。
類的專有方法:
__init__
: 構造函數,在生成對象時調用(對應ES6中的constructor)
__del__
: 析構函數,釋放對象時使用
__repr__
: 打印,轉換
__setitem__
: 按照索引賦值
__getitem__
: 按照索引獲取值
__len__
: 獲得長度
__cmp__
: 比較運算
__call__
: 函數調用
__add__
: 加運算
__sub__
: 減運算
__mul__
: 乘運算
__div__
: 除運算
__mod__
: 求余運算
__pow__
: 稱方
包和模塊
Python中,包為最大內聚單位,當然它只是抽象的,它可能是個文件夾或是其他whatever,他的意義就是更好地管理模塊的命名空間。
假設現在有個模塊的名稱是A.B, 那么他表示一個包A中的子模塊B。 就好像使用模塊的時候,你不用擔心不同模塊之間的全局變量相互影響一樣,采用package.moduleName
這種形式也不用擔心不同庫之間的模塊重名的情況。
Python中以文件為模塊單位,模塊中又可以區分不同的類、方法、對象或任何其他數據,和Node.js中的模塊大同小異。
核心語句:
import ...
from ... import ...
核心對象和模塊
File
:對文件的操作
OS
:處理文件和目錄
json
:對json
數據的處理
時間:time
、calendar
多線程
多線程類似于同時執行多個不同程序,多線程運行有很多優點。
線程分為:
內核線程:由操作系統內核創建和撤銷
用戶線程:不需要內核支持而在用戶程序中實現的線程
Python3中線程相關的兩個模塊:
_thread
(原thread,已廢棄)
threading
一般可以使用函數或者用類來包裝線程對象。
以上是關于python基礎知識的整理的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。