python基礎

第1課 安裝
    
    軟件準備
        python-3.5.1.exe
        pycharm-community-4.5.4.exe

    安裝 python-3.5.1.exe
        勾選add python 3.5 to path 選項
        然後選自定義安裝
        該頁面全部選中,進入到下一頁面
        勾選第一個,第五個會自動勾選,下一步安裝即可,可調整目錄
        看是否安裝成功,在cmd中輸入python,可以看到版本
        
        python安裝完成後,pip也會自動安裝完成,
        查看方式 pip --version
        pip相當於手機的應用市場,管理python使用的軟件包
        pip就是包管理工具

    
    安裝git
        默認是一路下一步,但是有些步驟要知道
        
        勾選如下選項
        windows explorer integration
            simple context menu
                git bash here
                git gui here

        run git from windows command prompt

        checkout windows-style, commit unix-style line endings

    安裝完成後
        如果只有一個版本的話,直接在cmd中運行python

        print("aaa") #回車即可
        exit() #退出python

        交互只能運行一行,如果要運行很多行,要創建文件

        創建test.py,用editIDLE來編輯,這是python自帶的
        
        print("hello")
        for i in range(2):
            print i
        
        運行 python tp.py,運行是在相應的目錄下

        如果有多個版本的話
        py -2 tp.py #以python第二個版本運行
        py -3 tp.py #以python第三個版本運行


第2課 常量和變量
    
    常量:值不能改變
        數字常量:1 100 3.5
        字符串常量:'a' "123"
            '''
            可跨多行
            '''    #3個引號是保留原來3引號字符串中的格式
        布爾值常量:True False
        高級類型常量:[] {}


    變量:值能改變
        通過等號改變它的值,也就是賦值

        a=1
        a=20 #改變了值
        a="hi" #改變了類型
        
        變量的命名:只能包含數字、字母和下劃線。
                    數字不能開頭
                    區分大小寫

                    Aname和aname是不同的變量
                    12name是非法變量名

第3課 數值計算
    
    基礎四則
        1+2
        9-7
        23*45
        7/8
        2**3 #表示2的3次方
        在Python3中: 7 / 2 == 3.5 , 即整數除以整數,得到的是浮點數。

    真假判斷
        1 > 2
        9 < 7
        23 >= 45
        7 <= 8
        2 == 3
        True != False
    
    邏輯運算
        not 條件
            真假值反轉
        條件A and 條件B
            A,B均爲真才真
        條件A or 條件B
            A,B一個爲真極爲真
        
    可通過括號改變運算順序
    一種簡寫
        a=a+1 等價於 a+=1
        a=a-1 等價於 a-=1
    
第4講 列表與For循環
    
    列表:一排
        [1,2,3]
        ["a","b","c"]
        [True, 1, "a"]

    列表取值
        a=[1,"a","3","6","google"] #從0開始
        a[1]是"a"
        a[-1]是"google"
        a[1:4]是["a",3,6] #[) 是前閉後開的區間

    列表添加刪除值
        a.insert(0,"fir") #插入第0個元素
        del a[2] #刪除第2個元素
        a.append("ch") #插入最後

    列表的遍歷
        for item in a:
            print(item)

第5講 控制流
    
    控制代碼的執行順序

    if語句
        if score>90:
            is_best=True
        elif score>80:
            is_better=True
        else:
            failed=True
    
    break和continue
        row=[1,2,3,4,5]
        for item in row:
            if item == 2:
                continue
            if item == 4:
                break
    
    while 條件
        #do something
        
        例子
        a=[1,2,3,4,5]
        while len(a) > 0: #a還有元素
            if a[-1] == 4:
                continue
            else
                print( a.pop() ) #打印出列表最後一個元素
        
第6講 函數
    
    函數定義:
        def clean_room():
            clean_table()
            clean_floor()
            clean_trash()
        
    形參:
        def clean_room(room_name):
            clean_table(room_name)
            clean_floor(room_name)
            clean_trash(room_name)
    
        clean_room("主臥")
    
    位置參數:
        def clean_room(room_name, level):
            #clean code

        clean_room("主臥", 2)
    
    關鍵字參數:
        def clean_room(room_name, level):
            #clean code
        
        clean_room(level=2, room_name="主臥") #明確指明給哪個參數賦值
    
    默認參數:
        def clean_room(room_name, level=2):
            #clean code
        
        clean_room(room_name="主臥") #level默認傳2
    
    返回值
        def clean_room(room_name, level=2):
            #clean code
            finished=True
            return finished #如果沒有值會返回NULL
        
        success = clean_room(room_name="主臥")
        
    多值返回
        def clean_room(room_name, level=2):
            #clean code
            finished=True
            error_msg = "沒有清潔劑了"
            return finished, error_msg
        
        success, msg = clean_room(room_name="主臥") #需要定義兩個變量進行接收

    文檔字符串
        def clean_room(room_name, level=2):
            '''這個函數用來清理房間          #這是註釋,必須放在函數定義的下面,說明功能
            '''
            finished=True
            #clean code
            error_msg = "沒有清潔劑了"
            return finished, error_msg
    
第7講課 模塊
    
    模塊:以.py結尾的文件稱爲模塊

    包:可包含包和模塊,但是其中要包含一個文件, __init__.py
    
    文件夾可包含模塊和文件夾,文件夾與包同級,差別在於文件夾沒有 __init__.py文件

    例子1:
        test包下文件
            __init__.py  #該文件就是一個空文件
            input.py
                def get_input():
                    print("input")
            parse.py
                from .input import get_input  #同包的調用
                    def do_parse():
                        get_input()
                        print("parse")
        
        tp.py--與test包平級
            from test.parse import do_parse  #不同包的調用
                do_parse()
        
    
    例子2:目錄結構如下
        server.py
        models.py
        deps---------tools.py
                |
                -----__init__.py
                |
                -----adapter--------__init__.py
                               |
                               -----xml.py
                               |
                               -----json.py (class JsonAdapter)

    
        server.py中要使用到JsonAdapter, 那麼導入的語句應該是:
        from deps.adapter.json import JsonAdapter

    說明:模塊被導入時,代碼會運行一次,放到緩存中
          再次導入,不會再運行

    小技巧
        1 dir(模塊)  -- 查看這個模塊,具體的使用需要再學習
        2 模塊有一個內置變量 __name__
          一般情況下值爲相對引用路徑,如"lib.parse"
          在入口模塊中值爲"__main__"
          if __name__=="__main__"
            #do something
        
第8講 高級數據類型
    
    元組
        1 與列表很相似,定義爲
            (1, "123", 56)
        
        2 不同是,原組是不能改變的,類似於常量
            a=["a", 1, 2]
            a.append(3)
            但是原組是不能增加或刪除元素的
        
        3 (2)其實是2,(2,)就是原組
        
    字典
        字典定義爲
        {
            "123":123,
            456:"hello"
        }
        是一種映射的關係

        a={"123":123,456:"hello"}
        a["123"] #字典取值,得123
        a[456]="world" #字典設置值

    字符串
        字符串其實是一個特殊的列表,列表中每個元素是一個字符

        a="hello lilei"
        a[:5] #"hello",這是字符串切片 字符串本質是常量,可以查詢,不能修改
        a="hello %s" % "lilei" #佔位符替換
        a="%s %s" % {"hello", "lilei"}
        a="%{verb}s %{name}s" % {"verb":"hello", "name":"lilei"} #字符串中替換變量的使用

    有關函數
        當一個函數返回多個值的時候,它實際上返回了一個原組,如 a,b=fun()
        a,b=(1,2)
        
        #元組傳參
        param=(1,2)
        add(* param)
        與
        add(1,2)一樣
        
        #字典傳參
        param={"a":1,"b":2}
        param(**param) -->  param(a=1, b=2)
    

第9課 類和對象
    
    定義一個貓類
        class Cat:
            leg_cnt = 4 #類屬性
            def __init__(self, cat_name):
                self.name=cat_name
            def change_name(self, cat_name):
                self.name=cat_name
            def climb(self):
                print("cat %s climb a tree" %self.name)
    
    使用Cat這個類
        tom = Cat("Tom") #self由python自動傳遞
        tom.change_name("ATom")
        tom.climb()
        tom.leg_cnt == 4 #訪問類屬性

    類的繼承
        class PersianCat(Cat):
            def __init__(self, cat_name):
                super().__init__(cat_name)
            def jump(self):
                print("try jump")
        
        jack = PersianCat("jack")
        jack.jump()
        jack.climb()


第10課 文件處理
    
    寫入文件
        poem='''\
        Programming is fun
        When the Work is done
        if you wanna work also fun:
            use Python!
        '''

        # '''\ 這個斜線表示讓結尾的換行符失效。
        # '''表示按文本自身的格式

        f=open('poem.txt', 'w') #w(重新寫入) r a(追加) 該文件寫入當前文件夾
        f.write(poem) #write text to file
        f.close()

    讀取文件
        f=open('poem.txt') #默認是r
        while True:
            line = f.readline()
            if len(line) == 0:
                break
            print(line, end="")
            #print內容後面默認會增加一個\n
            #這裏end禁止結尾加\n,改爲加""
        f.close()

    讀寫文件的簡便方式
        #write
        with open('poem.txt', 'w') as f:
            f.write(poem)

        #read
        with open('poem.txt') as f:
            while True:
                line = f.readline()
                if len(line) == 0:
                    break
                print(line, end="")

        #說明:離開with語句會自動關閉文件


第11課 異常處理
    
    Exception--AssertError ValueError--異常對象
    
    格式
    try:
        一段可能出錯的代碼
    except ValueError as e:
        print(e) #處理這個異常
    except Exception:
        處理其餘所有的異常
    else:
        沒有異常的處理代碼

    
    說明:try下面的三段代碼只有一段會執行

    格式:
    try:
        一段可能出錯的代碼
    finally:
        最後一定會執行的代碼,例如
        f.close()
    
    格式:拋出異常
    raise e

    例子:
    try:
        int("a")
    except ValueError as e:
        print(e) #打印異常
        raise e #加上這句讓是拋出異常,讓外面來處理


====補充課程====

第一課 裝飾器

    具體內容參見ppt

    

        

    
    1 函數可作爲參數進行傳遞,函數就是變量,類型爲函數
        def make_list(a, b)
            return [a,b]

        def add(a, b)
            return a+b

        def play_with_number(do_func, a, b)
            return do_func(a, b)

        print(play_with_number(add, 2, 1))
        print(play_with_number(make_list, 2, 1))

    2 函數可以作爲返回值返回
        import random

        def random_action(): #函數裏面定義兩個函數
            def make_list(a, b):
                return [a, b]

            def add(a, b):
                return a+b

            actions = [make_list, add]
            return random.choice(actions) #隨機返回一個函數

        action=random_action()
        print(action(2,1))

    3 函數可以使用外層空間的變量,圖片中畫星星的變量都可以使用
        import random

        def random_action(n): #注意n的使用
            def make_list(a, b):
                return [a, b] * n

            def add(a, b):
                return (a+b) * n

            actions = [make_list, add]
            return random.choice(actions)

        action=random_action(3)
        print(action(2,1))    

    4 根據上面3點性質,以函數爲參數,並返回一個函數
      輸入函數A ---- 函數(增強) ---- 輸出函數B
      這個 函數(增強) 就是裝飾器

    5 裝飾器的使用--打印函數的調用參數
        增強函數的使用@符號
        
        原始
            DEBUG = True

            def print_args(funcA):
                def funcB(a, b):
                    if DEBUG:
                        print(a, b)
                    return funcA(a, b)
                return funcB

            def make_list(a, b):
                return [a, b]

            action = print_args(make_list)
            action(1,2)
        
        裝飾
            DEBUG = True

            def print_args(funcA):
                def funcB(a, b):
                    if DEBUG:
                        print(a, b)
                    return funcA(a, b) #調用函數A
                return funcB

            @print_args  #我的理解 make_list 作爲參數傳給 print_args,表示該函數增強了
            def make_list(a, b):
                return [a, b]

            make_list(1,2) #這是增強了的 make_list 的函數
        
        原始與裝飾的邏輯一樣,只是寫法不一樣
        
    6 適配參數
        
            
    7 位置參數與關鍵字參數 1
        函數定義
            def function_name(a,b,c,d,g,e,f="a"):
                pass
            def function_name(*args, **kwargs): #第一個參數是位置參數,第二個參數是關鍵字參數
                pass
                #args是原組(1,3,4,6) kwargs是字典{"e":2,"f":"a","g":True}
        函數調用:
            function_name(1,3,4,6,e=2,f="a",g=True)
            #調用時 有=號的寫到沒有=號的後面
            #普通參數不能亂序,關鍵字參數可以亂序
        
    8 位置參數與關鍵字參數 2
        傳入不確定個數個參數
        function_name(1,3,4,6,e=2,f="a",g=True)
        
        pos_args=(1,3,4,6)
        name_args={"e":2,"f":"a","g":True}
        function_name(*pos_args, **name_args)
        
    9 可接收任何可能的參數
        DEBUG = True

        def print_args(funcA):
            def funcB(*pos_args, **name_args):
                if DEBUG:
                    print(pos_args, name_args)
                return funcA(*pos_args, **name_args)
            return funcB

        @print_args
        def make_list(a, b):
            return [a, b]

        @print_args
        def add(a, b, c=3):
            return a + b + c

        make_list(1,2)
        add(1,2,3)
        
        

第二課 刪除文件中的空行和空白

    "  123  ".strip() #"123"
    " \r 123567  \n ".strip() #"123567"
    "  \r 123 567 \n".strip() #"123 567"

    strip()是生成新的字符串

    "123abc32".strip("123") #字符串兩遍過濾123,結果爲"abc"
    
    去空行代碼 vim trans.py
    with open("more", "r") as f:
        for line in f.readlines():
            line = line.strip()
            if len(line) > 0:
                print(line)
    執行
    python3 trans.py

    輸到另外文件中
    python trans.py > less
    vim less #less這個文件有內容

    亂碼問題
    result = []
    with open("more", "r") as f:
        for line in f.readlines():
            line = line.strip() #加上.decode("utf-8") 這句也是亂碼
            if len(line) > 0:
                result.append(line)
    print(result) #打印出來的結果爲亂碼,這就需要看編碼問題
        
第三課 內置變量
    
    print "a.py"+__name__ #輸出爲a.py__main__
    
    在b.py中
    print "b.py"+__name__

    在a.py中
    import b
    print "a.py"+__name__

    運行a的結果爲
    b.py:b #模塊名,在引入的時候就執行了
    a.py:__main__

    在b.py中調整
    if __name__ == "__mian__"
        print "b.py"+__name__


第四課 類方法和靜態方法
    
    結合ppt看

    例子1:類方法
        class Cat():
            total_count=0 #類屬性
            
            def __init__(self, name):
                self.name=name
                self.born_one()

            def say_hello(self):
                print("I'm %s, hello" % self.name)

            @classmethod
            def born_one(cls): #類方法
                cls.total_count += 1

        tom = Cat("tom")
        lily = Cat("lily")

        tom.say_hello()
        lily.say_hello()

        print(Cat.total_count) #打印結果爲2

    例子2:靜態方法
        class Cat():
            total_count=0
            def __init__(self, name):
                self.name=name

            def say_hello(self):
                print("I'm %s, hello" % self.name)

            @staticmethod
            def get_leg_count(): #靜態方法
                return 4

        print(Cat.get_leg_count())


    對象有的類沒有,類有的對象也有
    靜態方法就是類方法
        
    
第五課 查看軟件包信息
    
    在windows下無法查看目前,是不是需要安裝所需的開發包??

    #查看源代碼
    import django
    django.__file__
    cd 進入 查看源代碼

    #查看版本
    import django
    django.VERSION
    MYSQLdb.__version__
    
    #查看django都有哪些屬性,便於查看
    dir(django)

第六課 with的使用
    
    結合ppt看
    
例子1:簡單應用,無異常情況
    
    class UserFile():
        
        def __init__(self, path, mode): #構造函數
            self.path = path
            self.mode = mode
        
        def __enter__(self): #返回對象
            return self

        def write(self, text): #實際定義的函數
            print(text) #簡單輸出
        
        def __exit__(self, exc_type, exc_value, exc_tb): #是否有異常
            pass
    
    with UserFile('/tmp/a.txt', 'w') as f:
        f.write("hello world") #打印出 hello world
        

例子2:簡單應用,有異常情況,注意代碼中最好不要有中文

    class UserFile():
        
        def __init__(self, path, mode):
            self.path = path
            self.mode = mode
        
        def __enter__(self):
            return self

        def write(self, text):
            print(text)
        
        def __exit__(self, exc_type, exc_value, exc_tb):
            print(exc_type)
            print(exc_value)
            print(exc_tb)
            return True #True表示不會拋出異常,
                        #False 或 什麼都不寫,表示拋出異常讓python來處理
    
    with UserFile('/tmp/a.txt', 'w') as f:
        f.write("hello world")
        int("hello") #將值轉化成整數,如果不能轉則拋出異常
    
    #接拋出的異常
    try:
        with UserFile('/tmp/a.txt', 'w') as f:
            f.write("hello world")
            int("hello") #將值轉化成整數,如果不能轉則拋出異常
    except ValueError:
        print("我捕獲到了異常") #這裏接到拋出的異常,不會繼續向上拋出



發佈了52 篇原創文章 · 獲贊 22 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章