python基礎(chǔ)(一)

基礎(chǔ)語法:

一.馮諾依曼體系架構(gòu):

五大部件:
  • CPU:包括運(yùn)算器和控制器,CPU只和一件設(shè)備,內(nèi)存打交道。

  • 運(yùn)算器:是完成各種數(shù)學(xué)運(yùn)算的,邏輯運(yùn)算,數(shù)據(jù)傳輸?shù)葦?shù)據(jù)加工處理。數(shù)據(jù)是通過總線傳輸,總線則是使用電信號傳輸。

  • 控制器:是用于控制程序的執(zhí)行。

  • 存儲器:用于記憶程序和數(shù)據(jù),例如內(nèi)存(缺點(diǎn):掉電易失數(shù)據(jù))

  • 輸入設(shè)備:將數(shù)據(jù)或者程序數(shù)據(jù)傳輸?shù)接?jì)算機(jī)中,例如鍵盤,鼠標(biāo)。

  • 輸出設(shè)備:將數(shù)據(jù)或者程序的處理結(jié)果展示給用戶,例如顯示顯示器,打印機(jī)。

  • CPU有三級cache,寄存器,cpu臨時(shí)要計(jì)算的數(shù)據(jù)存儲在寄存器中,寄存器的頻率和CPU幾乎同頻率的運(yùn)算頻率,多級緩存則逐級遞減。


高級語言和低級語言之間需要一個(gè)轉(zhuǎn)換的工具:編譯器,解釋器。

編譯語言:把源代碼轉(zhuǎn)換成目標(biāo)機(jī)器的CPU指令。例如:C,C++。
解釋語言:解釋后轉(zhuǎn)換成字節(jié)碼,運(yùn)行在虛擬機(jī)上,解釋器執(zhí)行中間代碼(bytecode)。例如:java,python,C#等語言。

二.程序:算法 + 數(shù)據(jù)結(jié)構(gòu)

  • 數(shù)據(jù)是一切程序的核心

  • 數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)在計(jì)算機(jī)中的類型和組織方式

  • 算法是處理數(shù)據(jù)的方式,算法有優(yōu)劣之分

  • 算法運(yùn)行時(shí)間并不以秒為單位,算法運(yùn)行時(shí)間是從其增速的角度度量的。

python語言類型:

python是動態(tài)語言、強(qiáng)類型語言。
python中:賦值即定義,如果一個(gè)變量已經(jīng)定義,賦值相當(dāng)于重新定義。(動態(tài)語言的特性)

語言的分類:
  1. 靜態(tài)編譯語言:
    事先聲明變量類型,類型不能再改變
    編譯時(shí)檢查
  2. 動態(tài)編譯語言:
    不用事先聲明類型,隨時(shí)可以賦值為其他類型
    編程時(shí)不知道是什么類型,很難推斷。
  3. 強(qiáng)類型語言:
    • 不同類型之間的操作,必須先強(qiáng)制類型轉(zhuǎn)換為同一類型。例:print('a'+1)
      弱類型語言:
    • 不同類型之間操作,自動隱式轉(zhuǎn)換,Javascript中console.log(1,+'a')

重點(diǎn):什么是動態(tài)語言,什么是強(qiáng)類型語言,強(qiáng)弱怎么區(qū)分?
強(qiáng)弱是一個(gè)相對概念,用一個(gè)字符串加上一個(gè)數(shù)字就可判定。


python解釋器:
  • 官方Cpython:c語言開發(fā),廣泛的python解釋器

  • IPython:一個(gè)交互式,功能增強(qiáng)的Cpython

  • PyPy:python語言寫的python解釋器,JIT(jist type)技術(shù),動態(tài)編譯python代碼。(效率比cpython高)。

  • Jython:python的源代碼編譯成java的字節(jié)碼,跑在JVM上。

  • IronPython:與Jython類似,運(yùn)行在.net平臺上的解釋器,python代碼被編譯成.net的字節(jié)碼。
    重點(diǎn):你知道那些python解釋器?

運(yùn)算符優(yōu)先級:
  • 算術(shù)運(yùn)算符 > 位運(yùn)算符 > 身份運(yùn)算符 > 成員運(yùn)算符 > 邏輯運(yùn)算符 > 賦值運(yùn)算符
  • 單目運(yùn)算符 > 雙目運(yùn)算符

(JVM、PVM)內(nèi)存管理:
  1. 變量無須事先聲明,也不需要指定類型(動態(tài)語言的特性)
  2. python編程中一般無須關(guān)心變量的存亡,一般也不用關(guān)心內(nèi)存的管理。
  3. python使用引用技術(shù)記錄所有對象的引用數(shù):
    • 當(dāng)對象引用數(shù)變?yōu)?,它就可以被垃圾回收(GC)的自動回收機(jī)制回收(不建議手動管理,會影響性能)
    • 計(jì)數(shù)增加:
      賦值給其他變量就增加引用計(jì)數(shù),例如:x=3;y=x.
    • 計(jì)數(shù)減少:
      函數(shù)運(yùn)行結(jié)束時(shí),局部變量就會被自動銷毀,對象引用計(jì)數(shù)減少
      變量被賦值給其他對象。例如:x=3,y=x(3的計(jì)數(shù)加一),x=4(4的計(jì)數(shù)加一,3的計(jì)數(shù)減一)

    注意:有關(guān)性能的時(shí)候,就要考慮變量的引用問題,切記盡量不要手動干預(yù),但是該釋放內(nèi)存,還是盡量不釋放內(nèi)存,看需求。
    注意:垃圾回收還有包括規(guī)整,即碎片整理

  • 共享引用:多個(gè)變量引用一個(gè)對象
    • ==是判斷內(nèi)容是否相等
    • is是判斷是否指向同一內(nèi)存空間,使用id來查看內(nèi)存地址
    • 界限為256,256以下的整數(shù)已被python緩存
    • 判斷一個(gè)東西有多少在引用:
    import sys
    sys.getrefcount(4)
    
False等價(jià)

布爾值,相當(dāng)于bool(value)

  • 空集合
  • 空字符串
  • 空字典
  • 空列表
  • 空元組
  • none對象
  • 0
列表、鏈表、隊(duì)列、棧的區(qū)別

重點(diǎn)
下列四者區(qū)別和特點(diǎn)

  • 內(nèi)存是線性編址的。
  1. 列表list:
    一個(gè)隊(duì)列,一個(gè)排列整齊的隊(duì)伍
    列表中的個(gè)體稱作元素,由若干個(gè)元素組成列表
    元素可是是任意對象(數(shù)字,字符串,列表,元組,對象)
    列表內(nèi)元素有順序,可以使用索引。
    列表可以是一個(gè)可迭代對象
    列表是可變的,連續(xù)的內(nèi)存中的順序結(jié)構(gòu),通過偏移量在查詢(檢索起來快)
    “有順序”“可索引”“可變”“可迭代”“線性結(jié)構(gòu)”
    盡量不要使用remove和insert,比較耗時(shí)

  2. 鏈表:有序的在內(nèi)存中分布散落,
    查詢比列表慢,插入比列表快

  3. queue:隊(duì)列,先進(jìn)先出
    不是為了遍歷

  4. stack:棧,后進(jìn)先出

元組修改

一般對于返回None的都意味著沒有新的產(chǎn)生,就都是就地修改

元組:一個(gè)有序的元素組成的集合,不可變對象
元組 + 元組,元組*數(shù)字,返回一個(gè)新元組。并不是改變原先的元組
元組是只讀的

字符串:是一個(gè)字面常量,不可變,可迭代


運(yùn)算符判斷
-> 結(jié)果
6 or 2 > 1 -> 6
0 or 5 < 4 -> False
5 < 4 or 3 -> 3
2 > 1 or 6 -> True
3 and 2 > 1 -> True
0 and 3 > 1 -> 0
2 > 1 and 3 -> 3
3 > 1and 0 -> 0
print(1 or 2) -> 1
print(0 or 100) -> 100
print(1 and 2) -> 2
print(bool(2)) -> True
print(bool(-2)) -> True
print(bool(0) -> False

方法:

  • x or y x為 (True) 非零,則返回x
  • x and y x (True)非零,則返回y
  • 非零轉(zhuǎn)換成bool True
  • 0轉(zhuǎn)換成bool是False

拓展:while 1 的效率要比 while True高,因?yàn)門ure要先轉(zhuǎn)換成1,然后再轉(zhuǎn)化成二進(jìn)制
網(wǎng)絡(luò)傳輸,big:大端模式,

低字節(jié)放在高地址上就是大端模式
高字節(jié)放到低地址上就是小端模式
Windows小端模式 mac大端模式

python上下文:使用with方法不用每次都手動關(guān)閉文件

with open("file.xxx") as f:
    for line in f.readlines():
        print(line)

使用二進(jìn)制寫文件可以使用一個(gè)模塊
寫:pickle.dump(word,file)
讀:pickle.load(file)


封裝和解構(gòu):
  1. 封裝:
    將多個(gè)值使用逗號分隔,結(jié)合在一起
    本質(zhì)上返回了一個(gè)元組,只是省略了小括號
    t1 = (1,2) # 定義為元組
    t2 = 1,2 #將1,2封裝成元組

  2. 解構(gòu)
    把右邊的元素解開,并順序的賦給其他變量
    左邊接納的變量數(shù)要和右邊解開的元素個(gè)數(shù)一致
    使用*變量名接收,但不能單獨(dú)使用,被*變量名收集后組成一個(gè)列表
    例如: head,*mid,tail = "abcdefghijklmnopqrstuvwxyz"

例:

temp = a
a = b
b = temp
等價(jià)于
a , b = b , a

等號右邊使用了封裝,而左邊使用了解構(gòu)

set和線性結(jié)構(gòu)
  • 線性結(jié)構(gòu)的查詢時(shí)間復(fù)雜度是O(n),即隨著數(shù)據(jù)規(guī)模的增大而增大
  • set、dict等結(jié)構(gòu),內(nèi)部使用hash值作為key,時(shí)間復(fù)雜度為O(1),查詢時(shí)間與數(shù)據(jù)規(guī)模無關(guān)。
  • set的元素要求必須可哈希
    可變的數(shù)據(jù)結(jié)構(gòu)不可哈希
    元素不可索引
    set可以迭代
  • 線性結(jié)構(gòu):
    • 可迭代 for ... in
    • len()可以獲取長度
    • 通過下標(biāo)可訪問
    • 可以切片
  • 包括:列表、元組、字符串、bytes、bytearray
    不可變對象:元素、字符串、bytes
  • 可hash對象:
    數(shù)值型:int、float、complex
    布爾型:True、False
    字符串:string、bytes
    tuple,None
    以上都為不可變類型
  • 可變類型:list,dict,bytearray
  • 可迭代對象
    • 能夠通過迭代一次次返回不同的元素的對象。
    • 所謂相同,不是指值是否相同,而是元素在容器中是否是同一個(gè),例如列表中值可以重復(fù)的,['a', 'a'],雖然這個(gè)列表有2個(gè)元素,值一樣,但是兩個(gè)'a'是不同的元素
    • 可以迭代,但是未必有序,未必可索引
    • 可迭代對象有:list、tuple、string、bytes、bytearray、range、set、dict、生成器等
    • 可以使用成員操作符in、not in,in本質(zhì)上就是在遍歷對象

字典的遍歷和移除:不能直接遍歷刪除字典,要使用一個(gè)容器記錄一個(gè)這個(gè)字典的key,然后通過遍歷key來從字典中刪除。

權(quán)限判定可以將弄成集合加載到內(nèi)存中進(jìn)行集合計(jì)算,速度要比在數(shù)據(jù)庫中操作對比快得多。比如說微博的redis

  • OrderedDict
    有序字典可以記錄元素插入的順序,打印的時(shí)候也是按照這個(gè)順序輸出打印
    3.6版本的Python的字典就是記錄key插入的順序(IPython不一定有效果)

  • 應(yīng)用場景:

    • 假如使用字典記錄了N個(gè)產(chǎn)品,這些產(chǎn)品使用ID由小到大加入到字典中
    • 除了使用字典檢索的遍歷,有時(shí)候需要取出ID,但是希望是按照輸入的順序,因?yàn)檩斎腠樞蚴怯行虻?/li>
    • 否則還需要重新把遍歷到的值排序
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 〇、前言 本文共108張圖,流量黨請慎重! 歷時(shí)1個(gè)半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識的框架詳細(xì)梳理了一遍。 ...
    Raxxie閱讀 19,580評論 17 410
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 6,333評論 0 10
  • 開始python基礎(chǔ)之前,跟大家分享一個(gè)經(jīng)驗(yàn)(英語大神可以忽略),我也是一個(gè)英語渣渣,當(dāng)初剛剛接觸python的時(shí)...
    菠蘿仔GIS閱讀 4,222評論 0 1
  • 每每看見深秋飄落的五彩嬪紛的秋葉,一種“舍”的況味油然而生,它們義無反顧的離開生長了一年的枝椏,從鮮嫩到干枯...
    孫大丫閱讀 343評論 0 0
  • 1.“麥克.林治,你決定好,要進(jìn)行這次時(shí)間躍遷的實(shí)驗(yàn)了嗎?” “是的,喬.阿瑟博士,我有個(gè)問題:為什么只能去未來的...
    今天不加班啦閱讀 235評論 0 0

友情鏈接更多精彩內(nèi)容