學(xué)習(xí)筆記——Python:第一階段

1. 語(yǔ)言特點(diǎn)

  • 面對(duì)對(duì)象
  • 解釋性
  • 免費(fèi)開源
  • 可移植性
  • 膠水語(yǔ)言:可以調(diào)用C語(yǔ)言
  • 豐富的庫(kù)
  • 代碼規(guī)范性
  • 支持函數(shù)式編程
  • 動(dòng)態(tài)類型:不會(huì)檢查數(shù)據(jù)類型障簿,在變量聲明無(wú)需指定數(shù)據(jù)類型

2. 應(yīng)用場(chǎng)景

  • 桌面應(yīng)用開發(fā):wxPython儡羔、Tkinter...
  • Web應(yīng)用開發(fā):Django喇颁、Flask寸齐、Tornado...
  • 自動(dòng)化運(yùn)維
  • 數(shù)據(jù)可視化:Matplotlib
  • 網(wǎng)絡(luò)爬蟲
  • 人工智能
  • 大數(shù)據(jù)
  • 游戲開發(fā)

3. 語(yǔ)法基礎(chǔ)

3.1. 標(biāo)識(shí)符——命名規(guī)則:
  • 區(qū)分大小寫
  • 首字符不能是數(shù)字垮刹,可以是下劃線或字母
  • 關(guān)鍵字不能作為標(biāo)識(shí)符
  • 不能使用Python內(nèi)置函數(shù)作為自身標(biāo)識(shí)符
  • $祥国、#不能構(gòu)成標(biāo)識(shí)符:room#铁坎、$Name屬于非法標(biāo)識(shí)符
3.2. 關(guān)鍵字

Python語(yǔ)言中有33個(gè)關(guān)鍵字往核,只有三個(gè)首字母大寫:False箫爷、TrueNone,其他全部小寫。

3.3. 變量和常量

Python是動(dòng)態(tài)類型語(yǔ)言虎锚,不能定義真正意義的常量硫痰。

3.4. 語(yǔ)句
  • 一行代碼表示一條語(yǔ)句,語(yǔ)句結(jié)束可以加分號(hào)窜护,但沒(méi)必要
  • 多個(gè)變量賦值可以用鏈?zhǔn)浇Y(jié)構(gòu):a = b = c =10效斑,但沒(méi)必要
  • ifforwhile內(nèi)代碼塊不通過(guò)大括號(hào)界定柱徙,而是通過(guò)縮進(jìn)
    if (a > b):
        print(a)
    
  • 考慮到不同編輯器Tab鍵縮進(jìn)程度存在區(qū)別缓屠,編程規(guī)范建議采用4個(gè)空格代替Tab鍵
3.5. 模塊
  • import <模塊名>:使用模塊元素時(shí)需加模塊名為前綴
  • from <模塊名> import <代碼元素>
3.6. 包(package)命名空間
  • 通過(guò)目錄的方式組織眾多的模塊,用來(lái)管理和分類模塊
  • 包含__init__.py文件(可以為空文件)护侮,闡釋該目錄文件夾屬性是包
  • 同名的模塊可以放在不同的包下敌完,以避免名稱沖突

4. Python編碼規(guī)范

4.1. 命名規(guī)范
  • 包名:全部小寫字母,通過(guò)點(diǎn)連接分隔羊初,不推薦使用下劃線滨溉;包名應(yīng)具有唯一性;推薦采用公司或組織域名的倒置长赞,如com.apple.quicktime.v2晦攒。
  • 模塊名:全部小寫字母,如果是多個(gè)單詞構(gòu)成得哆,可以用下劃線隔開脯颜,如dummy_threading
  • 類名:采用大駝峰法命名贩据,如SplitViewController伐脖。
  • 異常名:異常屬于類,命名同類命名乐设,但應(yīng)該使用Error作為后綴,如FileNotError绎巨。
  • 變量名:全部小寫字母近尚,如果是多個(gè)單詞構(gòu)成,可以用下劃線隔開场勤。如果變量應(yīng)用于模塊或函數(shù)內(nèi)部戈锻,則變量名可以單下劃線開頭;如果變量類內(nèi)部私有使用變量名可以雙下劃線開頭和媳。不要命名雙下劃線開頭和結(jié)尾的變量格遭,這是Python保留的。另外留瞳,避免使用小寫L拒迅、大寫O和大寫I作為變量名
  • 函數(shù)名和方法名:同變量命名,如balance_account璧微、_push_cm_exit作箍。
  • 常量名:全部大寫字母,多個(gè)單詞構(gòu)成通過(guò)下劃線隔開前硫,如YEARWEEK_OF_MONTH胞得。
4.2. 注釋規(guī)范
  • 文件注釋:在每個(gè)文件開頭添加注釋,采用多行注釋屹电。通常包括:版權(quán)信息阶剑、文件名、所在模塊危号、作者信息牧愁、歷史版本信息、文件內(nèi)容和作用等葱色。(給能編輯源代碼的人看的)
    #
    # 版權(quán)所有 2015 ****有限公司
    # 許可信息查看LICENSE.txt文件
    # 描述:
    #  實(shí)現(xiàn)日期基本功能
    # 歷史版本:
    #  2015-7-22:創(chuàng)建
    #  2015-8-20:添加socket庫(kù)
    #  2015-8-22:添加math庫(kù)
    #
    
  • 文檔注釋:文檔字符串递宅,注釋內(nèi)容能夠生成API幫助文檔,可以使用Python官方提供的pydoc工具從Python源代碼文件中提取這些信息苍狰,也可以生成HTML文件办龄。所有公有的模塊、函數(shù)淋昭、類和方法都應(yīng)該進(jìn)行文檔注釋俐填。(生成API幫助文檔給人看)
    文檔注釋推薦使用一對(duì)三重雙引號(hào)(""")包裹起來(lái),注意不推薦使用三重單引號(hào)(''')翔忽。
  • 代碼注釋:注釋太多 = 代碼質(zhì)量差
  • TODO注釋:有些地方不能確定英融,或未完成。
    # TODO 有待解決
    
4.3. 導(dǎo)入規(guī)范
  • 導(dǎo)入語(yǔ)總是放在文件頂部歇式,位于模塊注釋和文檔注釋之后驶悟,模塊全局變量和常量之前
  • 每一個(gè)導(dǎo)入語(yǔ)句只能導(dǎo)入一個(gè)模塊
    推薦使用:
    import re
    import struct
    import binascii
    
    不推薦使用:
    import re, struct, binascii
    
    但是from import后面可以多個(gè)代碼元素
    from codeop import CommandCompiler, compile_command
    
  • 導(dǎo)入順序:從通用到特殊,標(biāo)準(zhǔn)庫(kù)→第三方庫(kù)→自己模塊材失,每一組之間有一個(gè)空行痕鳍,且組中模塊按照英文字典順序進(jìn)行排序
    # 標(biāo)準(zhǔn)庫(kù)
    import io
    import os
    import pkgutil
    import sys
    import time
    
    from html import unescape   # 第三方庫(kù)
    
    from com.pkg1 import example    # 自定義庫(kù)
    
    Pycharm快捷鍵:Ctrl+Alt+O,可自動(dòng)識(shí)別排版
4.4. 代碼排版:包括空行龙巨、空格笼呆、斷行和縮進(jìn)等
  • Pycharm快捷鍵:Ctrl+Alt+L册舞,可自動(dòng)進(jìn)行格式排版
  • 空行:
    import語(yǔ)句塊前后保留兩個(gè)空行宙刘;
    ②函數(shù)聲明之前保留兩個(gè)空行;
    ③類聲明之前保留兩個(gè)空行被饿;
    ④方法聲明之前保留一個(gè)空行秸弛;
    ⑤兩個(gè)邏輯代碼塊之前應(yīng)該保留一個(gè)空行铭若。
  • 空格:
    ①賦值符號(hào)=前后各有一個(gè)空格洪碳;
    a = 10
    c = 10
    
    ②所有的二元運(yùn)算符都應(yīng)該使用空格與操作數(shù)分開;
    a += c + d
    
    ③一元運(yùn)算符:算法運(yùn)算符取反-和運(yùn)算符取反~奥喻;
    b = 10
    a = -b
    y = ~b
    
    ④括號(hào)內(nèi)不要有空格偶宫,包括:()[]环鲤、{}纯趋;
    doque(cat[1],{dogs:2},[])   # 推薦用法
    doque(cat[ 1 ],{ dogs:2 },[ ])  # 不推薦
    
    ⑤不要在逗號(hào)、分號(hào)冷离、冒號(hào)前面有空格吵冒,而是要在他們后面有一個(gè)空格,除非該符號(hào)已經(jīng)是行尾西剥。
    # 推薦
    if x == 88:
        print x, y
    x, y = y, x
    # 不推薦
    if x == 88 :
        print x , y
    x , y = y , x
    
    ⑥參數(shù)列表痹栖、索引或切片的左括號(hào)前不應(yīng)有空格;
    # 推薦
    doque(1)
    dogs['key'] = list[index]
    # 不推薦
    doque (1)
    dogs ['key'] = list [index]
    
  • 縮進(jìn):4個(gè)空格常被作為縮進(jìn)排版的一個(gè)級(jí)別瞭空。默認(rèn)情況下一個(gè)制表符等于8個(gè)空格揪阿,且不同的IDE工具中一個(gè)制表符與空格對(duì)應(yīng)的個(gè)數(shù)會(huì)有不同,所以盡量不要使用制表符縮進(jìn)
  • 斷行:一行代碼最多79個(gè)字符咆畏。對(duì)于文檔注釋和多行注釋時(shí)一行最多72個(gè)字符南捂,超過(guò)需斷行(若包含URL地址則不受限制)
    # 在逗號(hào)后面斷開
    bar = long_function_name(name1, name2,
                name3, name4)
    def long_function_name(var_one, var_two,
                var_three, var_four):
    # 在運(yùn)算符前面斷開
    name1 = name2 * (name3 + name4
                - name5) + 4 * name6
    # 盡量不要使用續(xù)行符(\),當(dāng)有符號(hào)(包括:大括號(hào)旧找、中括號(hào)和小括號(hào))則在括號(hào)中斷開溺健,這樣可以不使用續(xù)行符。
    def long_function_name(var_one, var_two,
                var_three, var_four):
        return var_one + var_two + var_three \ 
            + var_four
        # 推薦加入括號(hào)換行
        return (var_one + var_two + var_three
            + var_four)
    

5. 數(shù)據(jù)類型

在Python中所有的數(shù)據(jù)類型都是類钮蛛,每一個(gè)變量都是類的“實(shí)例”鞭缭。沒(méi)有基本數(shù)據(jù)類型的概念,所以整數(shù)魏颓、浮點(diǎn)和字符串也都是類岭辣。
Python有6種標(biāo)準(zhǔn)數(shù)據(jù)類型:數(shù)字、字符串甸饱、列表易结、元祖、集合和字典柜候。

5.1. 數(shù)字類型

包括整數(shù)類型、浮點(diǎn)類型躏精、復(fù)數(shù)類型和布爾類型

  • 整數(shù)類型:Python中整數(shù)類型為int渣刷,范圍只受計(jì)算機(jī)硬件的限制。表示方式如下:
    ①二進(jìn)制數(shù):以0b或0B為前綴矗烛,注意0是阿拉伯?dāng)?shù)字
    ②八進(jìn)制數(shù):以0o或者0O為前綴辅柴,第一個(gè)字符是阿拉伯?dāng)?shù)字0箩溃,第二個(gè)字符是英文字母o或O
    ③十六進(jìn)制數(shù):以0x或0X為前綴,注意0是阿拉伯?dāng)?shù)字
  • 浮點(diǎn)類型:Python中浮點(diǎn)類型為float
  • 復(fù)數(shù)類型:Python中復(fù)數(shù)類型為complex碌嘀,例如1+2j表示的是實(shí)部1涣旨、虛部2的復(fù)數(shù)
  • 布爾類型:Python中布爾類型為bool,只有兩個(gè)值:TrueFalse
    任何類型數(shù)據(jù)都可以通過(guò)bool()函數(shù)轉(zhuǎn)換為布爾值股冗,“沒(méi)有的”霹陡、“空的”值會(huì)轉(zhuǎn)換為False,反之轉(zhuǎn)換為True
5.2. 數(shù)字類型相互轉(zhuǎn)換
  • 隱式類型轉(zhuǎn)換:多個(gè)數(shù)字類型數(shù)據(jù)之間可以進(jìn)行數(shù)學(xué)計(jì)算止状,由于參與進(jìn)行計(jì)算的數(shù)字類型可能不同烹棉,此時(shí)會(huì)發(fā)生隱式類型轉(zhuǎn)換。

    a = 1 + True
    
  • 顯式類型轉(zhuǎn)換:int()怯疤、float()bool()函數(shù)

    int(19.4)
    float(5)
    bool(2)
    
5.3. 字符串類型
  • 字符串表示方式:
    ①普通字符串:采用單引號(hào)'或雙引號(hào)"包裹起來(lái)的字符串
    ②原始字符串:在普通字符串前加r浆洗,字符串中的特殊字符不需要轉(zhuǎn)義,按照字符串的本來(lái)“面目”呈現(xiàn)

    a = "Hello \n world"
    print(a)
    a = r"Hello \n world"
    print(a)
    

    ③長(zhǎng)字符串:字符串中包含了換行縮進(jìn)等排版字符集峦,可以使用三重單引號(hào)'''或三重雙引號(hào)"""包裹起來(lái)

    a = '''Hello
        world'''
    print(a)
    
  • 字符串格式化:format()方法伏社,字符串格式化控制符,以及占位符{}

    name = 'Mary'
    age = 18
    money = 1234.5678
    
    "{0}芳齡是{1:d}歲塔淤。".format(name, age)
    "{0}今天收入是{1:10.2f}元摘昌。".format(name, money)
    
  • 字符串查找
    str.find(sub[,start[,end]])
    str.rfind(sub[,start[,end]])

    source_str = "THere is a string accessing example."
    len(source_str)
    source_str.find('r')
    source_str.rfind('r')
    source_str[16]
    
  • 字符串與數(shù)字相互轉(zhuǎn)換
    ①字符串轉(zhuǎn)換為數(shù)字
    int()float()
    ②數(shù)字轉(zhuǎn)換為字符串
    str()

6. 運(yùn)算符

6.1. 算數(shù)運(yùn)算符
  • 一元運(yùn)算符:取反運(yùn)算符-

  • 二元運(yùn)算符:加減乘除、取余%凯沪、冪**以及地板除法//

    3 % 2
    10 ** 2
    3 // 2  # 比商小的最大整數(shù)第焰,此處結(jié)果為1
    
6.2. 關(guān)系運(yùn)算符

有6種:==!=妨马、>挺举、<>=<=

6.3. 邏輯運(yùn)算符

有3種:與and烘跺、或or湘纵、非not

6.4. 位運(yùn)算符
  • 位反~~x:將x的值按位取反
  • 位與&x&y:x與y位進(jìn)行位與運(yùn)算
  • 位或|x|y:x與y位進(jìn)行位或運(yùn)算
  • 位異或^x^y:x與y位進(jìn)行位異或運(yùn)算
  • 有符號(hào)右移>>x>>a:x右移a位,高位采用符號(hào)位補(bǔ)位
  • 左移<<x<<a:x左移a位滤淳,低位用0補(bǔ)位
6.5. 賦值運(yùn)算符

用于簡(jiǎn)寫梧喷,主要包括:+=-=脖咐、*=铺敌、/=%=屁擅、**=偿凭、//=&=派歌、|=弯囊、^=痰哨、<<=>>=

6.6. 其他運(yùn)算符
  • 同一性測(cè)試運(yùn)算符:isis not
    注意:==is區(qū)別
    ==:測(cè)試兩個(gè)對(duì)象內(nèi)容是否相等
    is:測(cè)試兩個(gè)對(duì)象是否是同一個(gè)對(duì)象
  • 成員測(cè)試運(yùn)算符:innot in
6.7. 運(yùn)算符優(yōu)先級(jí)

7. 控制語(yǔ)句

7.1. 分支語(yǔ)句

if結(jié)構(gòu):

  • if結(jié)構(gòu):

    if 條件:
        語(yǔ)句組
    
  • if-else結(jié)構(gòu):

    if 條件:
        語(yǔ)句組1
    else:
        語(yǔ)句組2
    
  • elif結(jié)構(gòu),類似switch語(yǔ)句:

    if 條件1:
        語(yǔ)句組1
    elif 條件2:
        語(yǔ)句組2
    elif 條件3:
        語(yǔ)句組3
    ...
    elif 條件n:
        語(yǔ)句組n
    else:
        語(yǔ)句組n+1
    
  • 三元運(yùn)算符替代品——條件表達(dá)式

    表達(dá)式1 if 條件 else 表達(dá)式2
    
7.2. 循環(huán)語(yǔ)句

whilefor

  • while語(yǔ)句
    while 循環(huán)條件:
        語(yǔ)句組
    [else:
        語(yǔ)句組]
    
  • for語(yǔ)句
    for 迭代變量 in 序列:
        語(yǔ)句組
    [else:
        語(yǔ)句組]
    
    for num in range(1, 10):
        print('{0} * {0} = {1}'.format(num, num * num))
    
7.3. 跳轉(zhuǎn)語(yǔ)句

break匾嘱、continuereturn

  • break語(yǔ)句:遇到break跳出循環(huán)體

    for item in range(10):
        if item == 3:
            break
        
        print('Count is: {0}'.format(item))
    # 打印 0斤斧、1、2
    
  • continue語(yǔ)句:遇到continue語(yǔ)句結(jié)束當(dāng)次循環(huán)霎烙,continue之后的語(yǔ)句不再執(zhí)行撬讽,接著執(zhí)行下次循環(huán)

    for item in range(10):
        if item == 3:
            continue
        
        print('Count is: {0}'.format(item))
    # 打印 0-9,除了3
    
  • whilefor中的else語(yǔ)句:whilefor正常循環(huán)結(jié)束時(shí)走的else語(yǔ)句

    while i * i < 10:
        i += 1
        print('{0} * {0} = {1}'.format(i, i * i))
    else:
        print('While Over!')
    # 打印 0-9吼过,除了3
    
7.4. 使用范圍

范圍在Python中類型是range锐秦,表示一個(gè)整數(shù)序列,創(chuàng)建范圍對(duì)象使用range()函數(shù)盗忱,range()函數(shù)語(yǔ)法如下:
range([start,]stop[,step])

注意:start≤整數(shù)序列取值<stop酱床,步長(zhǎng)step可以為負(fù)數(shù),可以創(chuàng)建遞減序列

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末趟佃,一起剝皮案震驚了整個(gè)濱河市扇谣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闲昭,老刑警劉巖罐寨,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異序矩,居然都是意外死亡鸯绿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門簸淀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瓶蝴,“玉大人,你說(shuō)我怎么就攤上這事租幕∠鲜郑” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵劲绪,是天一觀的道長(zhǎng)男窟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)贾富,這世上最難降的妖魔是什么歉眷? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮颤枪,結(jié)果婚禮上姥芥,老公的妹妹穿的比我還像新娘。我一直安慰自己汇鞭,他們只是感情好凉唐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霍骄,像睡著了一般台囱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上读整,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天簿训,我揣著相機(jī)與錄音,去河邊找鬼米间。 笑死强品,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屈糊。 我是一名探鬼主播的榛,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逻锐!你這毒婦竟也來(lái)了夫晌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤昧诱,失蹤者是張志新(化名)和其女友劉穎晓淀,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盏档,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凶掰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜈亩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懦窘。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖勺拣,靈堂內(nèi)的尸體忽然破棺而出奶赠,到底是詐尸還是另有隱情,我是刑警寧澤药有,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布毅戈,位于F島的核電站,受9級(jí)特大地震影響愤惰,放射性物質(zhì)發(fā)生泄漏苇经。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一宦言、第九天 我趴在偏房一處隱蔽的房頂上張望扇单。 院中可真熱鬧,春花似錦奠旺、人聲如沸蜘澜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鄙信。三九已至瞪醋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間装诡,已是汗流浹背银受。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸦采,地道東北人宾巍。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像渔伯,于是被迫代替她去往敵國(guó)和親顶霞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容