AGS Python開發-Python基礎入門


1.數據類型

整數(int):1,-100
浮點數(float):1.23
字符串(str):'abc',"xyz"
布爾值(bool):True、False
空值:None

2.變量和常量

變量定義格式:變量名=值,示例:checked=True
常量定義格式:常量名=值,示例:PI=3.14

3.字符串與編碼

  1. 字符編碼
    ASCII:一個字節編碼
    Unicode:兩個字節編碼
    UTF-8:可變長編碼

計算機內存統一使用Unicode編碼,保存在磁盤一般使用UTF-8編碼。所以磁盤數據讀取到內存,內存數據寫入到磁盤就涉及到unicode與UTF-8之間的轉換。

  1. python中的字符串
    python中的字符串支持ASCII和Unicode編碼,unicode編碼的字符串使用u"字符串內容"表示。
    unicode轉UTF-8:u"中文".encode("utf-8")
    UTF-8轉unicode:"\xe4\xb8\xad\xe6\x96\x87".decode("utf-8")
  2. 注意事項
    [1] 文件頭注明編碼:# -*- coding: utf-8 -*-
    [2] 源碼文件使用UTF-8 without BOM編碼保存
    [3] 中文字符串賦值時使用unicode編碼

4.復合數據類型

4.1.list和tuple

  1. 定義格式
    list列表:keywords = ["china","map","gis"]
    tuple元組:keywords = ("china","map","gis")
  2. list的基本操作
    訪問:keywords[0]
    增加:keywords.append("service")
    插入:keywords.insert(1,"extent")
    刪除:keywords.pop()keywords.pop(2)
    刪除:keywords.remove("china")
    批量刪除:del keywords[:2]
    取索引號:keywords.index("gis")
    排序:keywords.sort()
    倒排序:keywords.reverse()
    是否存在指定元素:"gis" in keywords
  3. list和tuple的區別
    list中元素可變。
    tuple中元素不可變。
  4. 切片操作
    用來替代循環語句。
    keywords[起始索引號:結束索引號:步長]

不含結束索引號的元素。

4.2.dict

字典是鍵值對集合

  1. 定義
    attrs = {"id":1,"type":"point"}
  2. 基本操作
    訪問:atts["id"]或者atts.get("id")
    刪除:atts.pop("id")
    刪除:del atts["id"]
    所有key:atts.keys()

4.3.set

集合是一個無序不重復元素的集。

  1. 定義
    方式1:uValues = set("a","b","c")
    方式2:uValues ={"a", "b", "c"}
  2. 基本操作
    添加:uValues.add("d")
    刪除:uValues.remove("b")
    刪除重復元素:uValues = set([1,2,2,3,4])

5.數據類型轉換

轉整型:int(value)
轉浮點型:float(value)
轉字符串:str(value)
轉unicode:unicode(value)
轉bool:bool(value)

6.流程控制語句

  1. if語句
if <條件1>:
    print 1
elif <條件2>:
    print 2
else:
    print 3
  1. for語句
for x in 序列:
    print x
  1. while語句
while 條件:
    print 執行
  1. break和continue語句
  2. pass語句
    占位符

7.高級特性

7.1.迭代

  1. list和tuple類型的迭代
    迭代value:for … in
    迭代索引和value:for i, value in enumerate(list)
  2. dict類型的迭代
    迭代key:for key in dict
    迭代value:for value in dict.itervalues()
    迭代key和value:for key ,value in dict.iteritems()
  3. 判斷對象是否可以迭代
from collections import Iterable
canIter = isinstance(obj, Iterable)

7.2.列表推導式

用于快速生成列表。

  1. 方式1:[x*x for x in range(0,20)]
  2. 方式2:[x*x for x in range(0,20) if x%2==0]

集合推導式:s = {x for x in "abracsdasd" if x not in "abc"}
字典推導式:d = {x: x**2 for x in (2,4,6)}

7.3.生成器

列表推導式生成的列表占用內存,生成器生成的列表在調用next時生成。

  1. 方式1
    將列表推導式中的[]更改為()即可。
a = (x*x for x in range(0,20))
a.next()
  1. yield關鍵字
    在需要返回函數的地方使用yield關鍵字。

8.函數

  1. 函數定義
def func_name(arg1):
    if arg1>10:
        return arg1:
    return 0
  1. 默認參數
def power(x, n=2):
    s =1
    while n>0:
        n = n-1
        s = s *x
    return s

默認參數需要使用不可變對象,否則會出現邏輯錯誤。

  1. 可變參數
def calc(*numbers):
    <函數體>

可變參數接收的是tuple類型。

  1. 函數參數
    函數式編程:允許將函數作為參數。
def add(x,y,f):
    return f(x)+f(y)

f是函數

  1. map()函數
    map()函數接收兩個參數,一個是函數,一個是序列,map將傳入的函數依次作用到序列的每個元素,并把結果作為新的list返回。
    效果類似:map(f,[1,2,3]) = [f(1),f(2),f(3)]
  2. reduce()函數
    reduce把一個函數作用在一個序列[x1, x2, x3...]上,這個函數必須接收兩個參數,reduce把結果繼續和序列的下一個元素做累積計算。
    效果類似:reduce(f,[1,2,3]) = f(f(1,2),3)
  3. filter()函數
    filter()函數接收兩個參數,一個函數,一個序列,filter將傳入的函數依次作用于序列的每個元素,并只保留結果中是True的。
  4. sorted()函數
    支持自定義的排序函數作為參數。
  5. lambda表達式
    定義格式:lambda a,b: a+b
  6. 其他常用函數
    dir():顯示模塊定義
    len():返回長度
    type():返回對象的類型
    isinstance():檢驗對象類型
    range():生成數字序列
    help():查詢幫助

9.注釋

#:單行注釋
'''…''':多行注釋
"""…""":doc注釋,在函數名之后的注釋。多行注釋時,第二行應該空出來。

def funcname():
    """函數簡介
 
    函數詳情。
    """
    pass

10.模塊和包

  1. 模塊
    模塊是一個單獨的py文件,模塊名即為文件名。
# fibo.py
def fib(n):
    pass
  1. 模塊導入
    方式1:import語句
import fibo
#調用
fibo.fib(10)

方式2:from 模塊 import 模塊函數

from fibo import fib
#調用
fib(10)
  1. name
    模塊執行:在模塊中增加name判斷。
if __name__ == "__main__":
    #調用模塊定義的內容 
  1. 作用域
    私有函數約定使用__開頭來命名函數。
  2. 第三方模塊
    使用pip安裝。
  3. 模塊搜索路徑
    模塊搜索路徑定義在sys.path中。可動態添加:sys.path.append("newpath"),或者定義環境變量PYTHONPATH。

  4. python使用文件夾定義包,文件夾中必須包含__init__.py,該文件內容可為空,或者定義__all__變量。
    __all__定義了可以導入的模塊列表:
    __all__ = ["point","line"]

11.類

  1. 類定義與實例化
    類定義:
class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
 
    def print_info(self):
        print "%s,%s" % (self.name,self.age)

類的實例化:lisa = Person("Lisa",25)

類中的方法第一個參數是self。

  1. 私有屬性定義
    約定私有屬性使用一個下劃線_開頭命名。
  2. @property定義屬性get和set方法
class Student(object):
    @property
    def name(self):
        return self.__birth
 
    @name.setter
    def name(self, value):
        self.__name = value
  1. 可變類型的屬性定義
class Mapping:
    def __init__(self,value):
        self.value = value
        self.items_list = []
  1. 多繼承
class subClass(parent1,parent2):
    pass

12.異常處理

  1. try語句
try:
    <執行>
except ValueError as e:
    <異常處理>
finally:
    <執行完的處理>
  1. 自定義異常類
    直接或間接繼承Exception類。
class MyError(Exception):
    #覆蓋父類
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)
  1. 錯誤記錄與調試
    使用logging模塊,記錄日志信息。

13. 編碼原則

  1. 使用4個空格縮進
  2. 使用文檔注釋
  3. 類名使用駝峰命名,函數和方法使用小寫和下劃線。類中的方法第一個參數使用self。

13.IO編程

13.1.文件操作

  1. 讀取文件
    基本流程:打開-->讀取-->關閉。
try:
    f = open("c:\\text.txt","r")
    print f.read()
except IOError,e:
    print e
finally:
    if f:
        f.close()

簡寫方式,由python自動調用close()方法:

with open("c:\\text.txt","r") as f:
    print f.read()
  1. 讀取模式
    r(只讀)、b(二進制)、w(寫) 、a(追加)、r+(讀寫)
f = open("c:\img.jpg", "rb")
f.read()

windows平臺上讀取文本文件時,會在行尾自動添加行結束符,對JPEG之類文件的讀取會破壞結構,建議一切以二進制打開。

  1. 字符編碼
    讀取GBK編碼的文本文件:
f = open("c:\\gbktext.txt","rb")
u = f.read().decode("gbk")
print u

讀取utf-8編碼的文本文件:

f = open("c:\\uft8text.txt","rb")
u = f.read().decode("utf-8")
print u

寫入utf-8編碼的文本文件:

f = open("c:\\uft8text.txt","w")
f.write(u"新增加".encode("utf-8"))
f.close()

推薦方法,調用codecs模塊:

import codecs
with codecs.open("c:\\gbktext.txt","r","gbk") as f:
    f.read()

一般原則:內部使用unicode編碼,外部使用各自編碼。

  1. 常用方法
    read():一次性讀取到內存
    read(size):讀取指定字節的內容
    readline():讀取一行
    readlines():讀取所有行
    write():寫入

13.2.目錄操作

  1. os模塊
    讀取所有環境變量:os.environ
    讀取指定環境變量:os.getenv("PATH")
    讀取當前目錄的絕對路徑:os.path.abspath(".")
    路徑拼接:os.path.join("c:\\demo","text.txt")
    創建目錄:os.mkdir("c:\\demo")
    刪除目錄:os.rmdir("c:\\demo")
    拆分路徑和文件:os.path.split("c:\\demo\\text.txt")
    拆分擴展名:os.path.splitext("c:\\demo\\text.txt")
    文件重命名:os.rename("old.txt","new.txt")
    刪除文件:os.remove("new.txt")
    目錄判斷:os.path.isdir(path)
    文件判斷:os.path.isfile(path)

14.常用的Python標準庫

  1. 操作系統接口:os和shutil
  2. 命令行參數:sys.argv
  3. 正則表達式:re
  4. 數學:math和random
  5. 日期和時間:datetime、time
  6. 數據壓縮:zlib、gzip、bz2、zipfile、tarfile
  7. xml操作:xml.dom、xml.sax
  8. json操作:json
  9. 進程與線程:multiprocessing、Queue、Pipes、Threading
  10. 日志:logging

參考資料

[1] Python2.7教程
[2] Python入門指南
[3] Python2.7字符編碼
[4] 官方文檔

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 基礎1.r''表示''內部的字符串默認不轉義2.'''...'''表示多行內容3. 布爾值:True、False(...
    neo已經被使用閱讀 1,719評論 0 5
  • 兩本不錯的書: 《Python參考手冊》:對Python各個標準模塊,特性介紹的比較詳細。 《Python核心編程...
    靜熙老師哈哈哈閱讀 3,386評論 0 80
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 現在的我是一個師范院校的“準畢業生”,大四。 我所學的專業是新聞學,屬于非師范類專業,未來的就業方向想來也跟老師...
    紅塵念念閱讀 418評論 2 4
  • 如果你想要嘗試在工程中安轉cocoapods,那么網上的資料太多了,但是如果你想要刪除掉cocoapods,那么怎...
    沒有黑眼圈de熊貓閱讀 1,720評論 1 6