《Python 可以這樣學》

如何學習Python

  • 一定要動手編寫和調試書上的代碼,踏踏實實把基礎掌握好再有針對性地學習自己需要的擴展庫溅蛉,切忌只看不練。
  • 多看他宛,多想船侧,多交流。
  • 理解的越多厅各,需要記憶的就越少镜撩。
  • 切不可把全部精力放在 Python 語言本身的學習上,而是要把主要精力放到自己的專業(yè)和知識學習上队塘,最終再用 Python 把自己的思想或算法準確地表達出來袁梗。

Python 基礎

Python 是一種什么樣的語言

  • 當較新的 Python 版本推出之后,不要急于趕時髦憔古,看到別人用高版本的 Python 也不用自卑遮怜,而是應該在確定自己必須使用的擴展庫也推出了與之匹配的新版本之后再一起進行更新。

Python 開發(fā)環(huán)境

  • 一般來說鸿市,建議在運算符兩側和逗號后面加一個空格锯梁,在不同功能的代碼塊之間增加一個空行即碗。
  • 交互模式一般用來實現(xiàn)一些簡單的業(yè)務邏輯,或者驗證某些功能陌凳。
  • Python 文件擴展名為.py剥懒,GUI 程序可以保存為.pyw
  • 為提高代碼運行速度,同時也對 Python 源代碼進行保密合敦,可以在命令提示符環(huán)境中使用python -OO -m py_compile file.py將 Python 程序file.py偽編譯成為.pyc文件初橘。
  • 命令提示符cls清屏燎窘。

變量宋彼、運算符與表達式

  • 標準庫是 Python 默認安裝的,但需要導入后才能使用其中的對象阳懂。擴展庫則需要手動安裝裸准,然后導入之后才能使用其中的對象展东。

  • 不需要事先聲明變量名及其類型,并且變量的類型是可以隨時發(fā)生改變的炒俱。

  • Python 字符串對象提供了一個方法isidentifier()可以用來判斷指定字符串是否可以作為變量名盐肃、函數(shù)名、類名等標識符权悟。

  • Python 內置對象

    1. 數(shù)字
    2. 字符串
    3. 列表
    4. 字典
    5. 元組
    6. 文件 f = open(file.txt)
    7. 集合 set('abc')砸王,{'a', 'b', 'c'}
    8. 布爾型 True,F(xiàn)alse
    9. None
    10. 編程單元 函數(shù)(def)峦阁,類(class)
  • 可以通過內置函數(shù)help()查看某個函數(shù)的使用幫助谦铃。

  • 可以導入 sys 模塊后使用print(sys.builtin_moudle_names)查看 Python 所有內置模塊名稱。

  • 可以使用help('moudles')查看本機所有可用模塊的名稱榔昔。

  • Python 常用內置函數(shù)

    • 進制轉換

      • bin() 二進制
      • oct() 八進制
      • int() 十進制
      • hex() 十六進制
    • Unicode

      • ord() 字符串轉為 Unicode
      • chr() Unicode 轉為字符串
    • 變量類型轉換

      • bool()
      • float()
      • int()
      • str()
    • 計算

      • abs() 返回絕對值或復數(shù)的模
      • max()
      • min()
      • sum()
    • 其他

      • help() 查看指定方法的使用幫助

      • dir()
        
  查看對象的所有成員

  - `dir(math)` 查看模塊中可用對象
  - `dir('')` 查看字符串類型成員
  - `dir(3+4j)` 查看復數(shù)類型成員

- `type(3)` 查看類型

- `isinstance(3, init)` 判斷類型

- `import this` Python 之禪
  • Python 運算符

    • + 加法驹闰,列表、元組撒会、字符串合并
    • - 減法嘹朗,集合差集
    • * 乘法,序列重復
    • / 真除法
    • // 整商
    • - 相反數(shù)
    • % 余數(shù)诵肛,字符串格式化
    • **
    • < <= > >= 大小比較屹培,集合的包含關系比較
    • == != 相等、不等比較
    • or and not 或怔檩,與褪秀,非
    • in not in 成員測試
    • & | ^ 集合的交集、并集薛训、對稱差集
    • @ 矩陣相乘
  • print(value, ..., sep='', end='\n', file=sys.stout, flush=False)
    
    • sep 指定數(shù)據(jù)之間的分隔符溜歪,默認為空格。
    • file 參數(shù)用于指定輸出位置许蓖,默認為標準控制臺蝴猪,也可以重定向輸出到文件调衰。

模塊的安裝和使用

  • 常用 pip 命令
    • pip install Package 安裝模塊
    • pip list 列出已安裝的所有模塊
    • pip install -upgrade Package 升級模塊
    • pip uninstall Package 卸載模塊
  • pip 可執(zhí)行程序在 Python 安裝目錄的 Scripts 文件夾下。

Python 序列

列表與列表推導式

  • 可以用list()函數(shù)將元組自阱、range 對象嚎莉、字符串、字典沛豌、集合或其他類型的可迭代對象類型的數(shù)據(jù)轉換為列表趋箩。需要注意的是,把字典轉換為列表時默認是將字典的“鍵”轉換為列表加派,如果想把字典的元素轉換為列表叫确,需要使用字典對象的items()方法明確說明。

    >>> list({'a':3, 'b':9, 'c':78})
    ['a', 'b', 'c']
    
    >>> list({'a':3, 'b':9, 'c':78}.items())
    [('a', 3), ('b', 9), ('c', 78)]
    
  • 工廠函數(shù):list()芍锦,tuple()竹勉,set()dict()娄琉。

  • 可以使用del將對象刪除次乓,適用于所有的 Python 對象。也可以用del命令刪除可變序列中的部分元素孽水。

    >>> a = [1, 2, 3]
    >>> del a[0]
    >>> a
    [2, 3]
    
  • 常用的列表對象方法

    • list.list.append(x) 將元素 x 添加至列表 list 尾部

    • list.extend(L) 將列表 L 中的所有元素添加至列表 list 尾部

    • list.insert() 在列表指定位置插入元素

    • list.remove() 刪除在列表中首次出現(xiàn)的元素

    • list.pop(x) 刪除并返回下標為 x 的元素票腰,x 默認為-1

    • list.clear() 刪除列表中的所有元素

    • list.index(x) 返回列表中第一個值為 x 的元素的下標

    • list.count() 返回指定元素在列表中出現(xiàn)的次數(shù)

    • list.reverse() 倒序

    • list.sort(key=None, reverse=False)
      
排序

- `sort()`和`reverse()`是對列表進行原地排序。如果不想丟掉原來的順序可以用內置函數(shù)`sorted()`和 `reversed()`女气。
  • list.copy() 淺復制

  • 成員測試運算符in也可以測試列表中是否存在某個元素杏慰。

  • zip()函數(shù)用于將多個列表中元素重新組合為元組并返回包含這些元組的 zip 對象。

    >>> x = list(range(5))
    >>> x
    [0, 1, 2, 3, 4]
    >>> list(zip(x, [0]*5))
    [(0, 0), (1, 0), (2, 0), (3, 0), (4, 0)]
    
  • enumerate()函數(shù)返回包含若干下標和值的迭代對象炼鞠。

    >>> list(enumerate(x))
    [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
    
  • map()可以將一個函數(shù)依次作用到一個序列上缘滥,并返回一個 map 對象作為結果。

    >>> def add5(v):
    ...     return v+5
    ...
    >>> add5(1)
    6
    >>> list(map(add5, range(5)))
    [5, 6, 7, 8, 9]
    >>>
    
  • filter()將一個單參數(shù)函數(shù)作用到一個序列上簇搅,返回該序列中使得該函數(shù)返回值為 True 的那些元素組成的 filter 對象完域,如果指定函數(shù)為 None软吐,則返回序列中等價于 True 的元素瘩将。

  • [表達式 for 變量 in 序列或迭代對象] 列表推導式在邏輯上相當于一個循環(huán),只是形式更加簡潔凹耙。

    >>> [x*x for x in range(10)]
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
  • 切片返回的是列表元素的淺復制姿现,與列表對象的直接輔助并不一樣。

元組與生成器推導式

  • 元組是不可變序列肖抱。

  • 生成器推導式的結果是一個生成器對象备典,不是列表,也不是元組意述√嵊叮可以根據(jù)需要將其轉化為元組或列表吮蛹,也可以使用生成器對象的

    __next__()
    

    方法或者內置函數(shù)

    next()
    

    進行遍歷,或者直接將其作為迭代器對象來使用拌屏。當所有元素訪問結束以后潮针,如果需要訪重新問其中的元素,必須重新創(chuàng)建該生成器對象倚喂。

    >>> g = (i*i for i in range(10))
    
    # 返回的是生成器對象
    >>> g
    <generator object <genexpr> at 0x00000158DCB9A620>
    
    # 轉為元組
    >>> tuple(g)
    (0, 1, 4, 9, 16, 25, 36, 49, 64, 81)
    
    # 生成器對象已遍歷結束每篷,沒有元素了
    >>> list(g)
    []
    
    # 重新生成
    >>> g = (i*i for i in range(10))
    >>> g.__next__()
    0
    >>> next(g)
    1
    

字典

  • 字典中的鍵不允許重復,值可以重復端圈。

  • dict() 可以通過已有數(shù)據(jù)創(chuàng)建字典焦读。

    >>> keys = ['a', 'b', 'c']
    >>> values = [1, 2, 3]
    >>> dictionary = dict(zip(keys, values))
    >>> dictionary
    {'a': 1, 'b': 2, 'c': 3}
    
  • dict() 可以根據(jù)給定的“鍵:值”來創(chuàng)建字典。

    >>> dict(name='Cat', age=5)
    {'name': 'Cat', 'age': 5}
    
  • dict() 可以給定鍵舱权,創(chuàng)建值為空的字典矗晃。

    >>> dict.fromkeys(['name', 'age'])
    {'name': None, 'age': None}
    
  • dict.update() 將 B 字典的鍵值對都添加到 A 字典,如果有鍵重復會用 B 字典的值覆蓋刑巧。

  • dict.get() 返回字典里指定鍵的值喧兄,如果鍵不存在返回指定值。

  • dict.setdefault() 返回指定鍵對應的值啊楚,不過不存在就添加一個鍵并設置對應值吠冤。

  • 內置函數(shù)globals()locals()分別返回包含當前作用域內所有全局變量和局部變量的名稱及值的字典。

  • 其他對象方法參考 list恭理。

集合

  • 同一個集合內每一個元素都是唯一的拯辙,不允許重復。
  • set() 將可迭代對象轉為集合颜价,如果有重復值則只保留一個涯保。
  • 集合只能包含數(shù)字、字符串周伦、元組等不可變類型(或者說可哈希)的數(shù)據(jù)夕春。
  • set.add() 添加新元素,如果已存在則忽略专挪。
  • set.update() 合并集合及志。
  • set.pop() 隨機刪除并返回一個元素。
  • set.remove() 刪除指定元素寨腔,如果不存在則報錯速侈。
  • set.discard() 刪除指定元素,如果不存在則忽略迫卢。
  • 其他對象方法參考 list倚搬。

序列解包

  • 可以使用序列解包功能對多個變量同時賦值。

    x, y, z = 1, 2, 3
    
  • 很方便地同時遍歷多個序列

    keys = ['a', 'b', 'c']
    values = [1, 2, 3]
    for k, v in zip(keys, values):
        print(k, v)
    
  • 其他

    >>> print(* [1, 2, 3], 4, * (5, 6))
    1 2 3 4 5 6
    
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末乾蛤,一起剝皮案震驚了整個濱河市每界,隨后出現(xiàn)的幾起案子捅僵,更是在濱河造成了極大的恐慌,老刑警劉巖眨层,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件命咐,死亡現(xiàn)場離奇詭異,居然都是意外死亡谐岁,警方通過查閱死者的電腦和手機醋奠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伊佃,“玉大人窜司,你說我怎么就攤上這事『饺啵” “怎么了塞祈?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長帅涂。 經常有香客問我议薪,道長,這世上最難降的妖魔是什么媳友? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任斯议,我火速辦了婚禮,結果婚禮上醇锚,老公的妹妹穿的比我還像新娘哼御。我一直安慰自己,他們只是感情好焊唬,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布恋昼。 她就那樣靜靜地躺著,像睡著了一般赶促。 火紅的嫁衣襯著肌膚如雪液肌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天鸥滨,我揣著相機與錄音,去河邊找鬼爵赵。 笑死吝秕,一個胖子當著我的面吹牛泊脐,可吹牛的內容都是我干的空幻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼容客,長吁一口氣:“原來是場噩夢啊……” “哼秕铛!你這毒婦竟也來了约郁?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤但两,失蹤者是張志新(化名)和其女友劉穎鬓梅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谨湘,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡绽快,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了紧阔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坊罢。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖擅耽,靈堂內的尸體忽然破棺而出活孩,到底是詐尸還是另有隱情,我是刑警寧澤乖仇,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布憾儒,位于F島的核電站,受9級特大地震影響乃沙,放射性物質發(fā)生泄漏起趾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一警儒、第九天 我趴在偏房一處隱蔽的房頂上張望阳掐。 院中可真熱鬧,春花似錦冷蚂、人聲如沸缭保。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艺骂。三九已至,卻和暖如春隆夯,著一層夾襖步出監(jiān)牢的瞬間钳恕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工蹄衷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忧额,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓愧口,卻偏偏與公主長得像睦番,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容