1. 程式人生 > >一、開發基礎(1)

一、開發基礎(1)

關系 精度 與或非 實體 lam 打印 獲取 表達式 with

語言

Python

選擇Python是因為Python是一門動態腳本型語言,也有人稱之為膠水語言,實在是因為Python的應用太廣泛了,什麽都能做,但想做好還是要看領域。

由於Python是邊解釋邊運行的,所以其速度肯定不如編譯型語言如C的。

Python的語法簡單,類型不需提前聲明,對類的繼承/多態實現比較好,用縮進控制語句塊,總體來說Python還是很適合做開發入門的,熟悉了業務邏輯後,如果有需要,還可深入其它語言如Java/C#。

Python常用的解釋器是CPython,用C語言實現的,在早期引入了全局解釋鎖/全局線程鎖的概念,屬於歷史遺留問題,至今已成為連Python之父也覺得棘手的問題。

只需要知道,這個全局解釋鎖導致Python的多線程只能實現並發,而無法實現並行,簡而言之就是同時只能有一個線程處於運行中,後面會詳細介紹並發並行與多路復用io的概念。

Python現存的大版本分為2和3,建議直接學3,2現在處於陣痛期,等到更多的庫用3重寫後,相信使用2的人會越來越少,這是發展趨勢。

類型

iterable 可叠代對象,實現了__iter__方法;

iterator 叠代器,iterable調用__iter__方法返回iterator,iterator實現了__next__方法;

generator 生成器,不需要__iter____next__,只要有yield關鍵字即可。

  • 字符串
    • 字符串是str類的實例,支持encode()方法用於編碼成其它如utf8/ascii等;
    • 字符串是不可變類型,創建後就無法改變原字符串,但是可以創建新的字符串替換引用;
    • 字符串常用的方法:
      • 索引
      • 切片
      • 合並字串:‘‘.join(iterable)
      • 分割字串:string.split([char][,num]) 以指定次數按指定字串進行分割,返回list
      • 比較字串:直接==/!=或string.startwith([char][, start[, end]])/endwith
      • 反轉字串:函數/列表reverse方法/切片
      • 查找字串:string.find([char][, start[, end]])/rfind
      • 替換字串:string.replace(old, new[, num])實際是返回一個新的字串,該方法不支持正則
      • 格式化:‘{下標位置:[填充字][對齊符<>^][寬度][千位分隔符,][精度.][類型]‘.format() 例子如‘{0:a^10,.2f}‘.format(2333.33)打印為a2,333.33a
  • 列表
    • 列表是可變類型,支持原處修改,因此要小心將列表作為參數傳入函數;
    • 列表常用方法:
      • 索引、切片
      • append添加任意對象
      • copy淺拷貝,全切片也是淺拷貝
      • remove移除靠前的對象
      • index查找值的索引,若無則報錯,因此最好用in判斷
      • sort排序,內置reverse參數默認False
      • insert/pop/extend 插入/彈出/合並
  • 字典
    • key-value集合,是python中hashtable的實現;
    • dict是無序的,但是從3.5開始,默認的dict是部分有序的,即根據存入鍵值對的順序排序,但是在使用中它是無序的就行了,因為我們不通過下標去索引值;
    • 創建方法:賦值創建d = {‘a‘:1, ‘b‘:2},工廠方法dict(),fromkeys方法d = dict.fromkeys(iterable, defaultvalue)
    • 常用方法:
      • 刪除key-value,直接調用del d[key]或pop(key, default)
      • 遍歷items(),返回key-value元組的列表,keys()返回key列表,values()返回value列表
      • get(key)獲取指定key的值
      • copy()淺拷貝
      • 排序直接調用sorted方法,sorted(d.items(), key=lambda cmp: cmp[0]/cmp[1]),返回鍵值對元組的列表
      • 更新字典update(dict)
      • 解包:a, b, *c = dict.values()
  • 元組
    • 有序不可變類型,創建後則不可原處修改;
    • 常用方法:
      • 索引、切片
      • 解包:a, b, c, ... = tuple
      • 列表支持的查詢操作,元組基本都支持
  • 集合
    • Python中的hashset實現;
    • 常用於過濾列表中的重復元素,list(set(list))
    • 創建 set(iterable) 或 {a, b, c, d}
    • 差集 x - y
    • 並集 x | y
    • 交集 x & y
    • 對稱差集 x ^ y
  • 文件
    • 將文件讀取到內存中作為一個對象進行處理;
    • 常用操作:
      • 創建 open(filename, mode=‘r‘/‘w‘/‘a‘/‘b‘, encoding=None),圖片/視頻等文件必須用‘b‘模式打開
      • 讀取readlines叠代器讀取,readline生成器讀取,read一次性讀取
      • 寫入write一次性寫入,writelines列表寫入
      • 刪除 os.remove(f)
      • 重命名 os.rename(old, new)
  • 操作符
    • a is b, a is not b 引用實體測試,判斷是否具有相同id
    • n = a if x else b 三元選擇表達式
    • 邏輯and/or/not 邏輯與或非
    • 位&、|、^、>>、<<、~ 按位與/或/異或/右移/左移/取反
    • a in b, a not in b 成員關系測試,判斷包含關系
    • 比較 <、>、<=、>=、==、!=
    • 算術+、-、*、/、//、%、** 算術加/減/乘/除/地板除/取余/冪
    • 地板除總是向下取整,截斷除總是忽略小數部分
  • 進制轉換
    • 其它進制轉十進制用int(str, str的進制)
    • 其它進制轉十六進制用hex(str, str的進制)
    • 其它進制轉二進制用bin(str, str的進制)
    • 其它進制轉八進制用oct(str, str的進制)

一、開發基礎(1)