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