allen22BeiJingpersonInfo('all" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python學習筆記(一)

系統 2038 0

這里主要是總結學習過程中遇到的一些問題和注意事項


文章目錄

  • 關于函數參數問題
    • 默認參數
    • 可變參數
    • 關鍵參數
  • 關于函數作為返回值
  • 關于Function 和 Method理解


  1. 關于函數參數問題

    默認參數

    函數參數可以有默認參數,而默認參數使用不當很容易掉坑里。

                    
                      
                        def
                      
                      
                        personInfo
                      
                      
                        (
                      
                      name
                      
                        ,
                      
                      age 
                      
                        =
                      
                      
                        22
                      
                      
                        ,
                      
                      city 
                      
                        =
                      
                      
                        'BeiJing'
                      
                      
                        )
                      
                      
                        :
                      
                      
                        print
                      
                      
                        (
                      
                      name
                      
                        ,
                      
                      age
                      
                        ,
                      
                      city
                      
                        )
                      
                      
    
    personInfo
                      
                        (
                      
                      
                        'allen'
                      
                      
                        )
                      
                      
                        # ==> allen 22 BeiJing        
                      
                      
    personInfo
                      
                        (
                      
                      
                        'allen'
                      
                      
                        ,
                      
                      city 
                      
                        =
                      
                      
                        'SH'
                      
                      
                        )
                      
                      
                        # ==> allen 22 SH
                      
                      
    personInfo
                      
                        (
                      
                      
                        'allen'
                      
                      
                        ,
                      
                      
                        18
                      
                      
                        )
                      
                      
                        # ==> allen 18 BeiJing
                      
                    
                  

    以上函數執行的時候,沒有問題,很正常。在看一下下面的函數

                    
                      
                        def
                      
                      
                        add_end
                      
                      
                        (
                      
                      L 
                      
                        =
                      
                      
                        [
                      
                      
                        ]
                      
                      
                        )
                      
                      
                        :
                      
                      
    L
                      
                        .
                      
                      append
                      
                        (
                      
                      
                        'END'
                      
                      
                        )
                      
                      
                        print
                      
                      
                        (
                      
                      L
                      
                        )
                      
                      
    
    add_end
                      
                        (
                      
                      
                        [
                      
                      
                        1
                      
                      
                        ,
                      
                      
                        2
                      
                      
                        ,
                      
                      
                        3
                      
                      
                        ]
                      
                      
                        )
                      
                      
                        # ==> [1, 2, 3, 'END']
                      
                      
    add_end
                      
                        (
                      
                      
                        )
                      
                      
                        # ==> ['END']
                      
                      
    add_end
                      
                        (
                      
                      
                        )
                      
                      
                        # ==> ['END', 'END']
                      
                    
                  

    我們看到默認值是 [] ,為什么調用兩次之后 add_end() 之后會出現 ['END', 'END'] 這樣的結果,原因是 [] 是可變對象,如果學過c++的同學可能很容易理解,在里的 L 是一個指針,指向一塊地址,而這塊地址的內容在多次調用 add_end() 之后內容發生變化,而指針所指向的地址未發生變化。這里我們需要注意: 定義默認參數要牢記一點:默認參數必須指向不可變對象
    修改上述例子:

                    
                      
                        def
                      
                      
                        add_end
                      
                      
                        (
                      
                      L
                      
                        =
                      
                      
                        None
                      
                      
                        )
                      
                      
                        :
                      
                      
                        if
                      
                       L 
                      
                        is
                      
                      
                        None
                      
                      
                        :
                      
                      
    		L 
                      
                        =
                      
                      
                        [
                      
                      
                        ]
                      
                      
    	L
                      
                        .
                      
                      append
                      
                        (
                      
                      
                        'END'
                      
                      
                        )
                      
                      
                        print
                      
                      
                        (
                      
                      L
                      
                        )
                      
                    
                  

    可變參數

    在參數前面加一個 * 號,函數內部參數 param 接收到一個tuple。同樣Python允許你在list或tuple前面加一個 * 號,把list或tuple的元素變成可變參數傳進去

                    
                      
                        def
                      
                      
                        printParam
                      
                      
                        (
                      
                      
                        *
                      
                      param
                      
                        )
                      
                      
                        :
                      
                      
                        for
                      
                       x 
                      
                        in
                      
                       param
                      
                        :
                      
                      
                        print
                      
                      
                        (
                      
                      x
                      
                        )
                      
                      
    
    printParam
                      
                        (
                      
                      
                        1
                      
                      
                        ,
                      
                      
                        2
                      
                      
                        ,
                      
                      
                        3
                      
                      
                        )
                      
                      
                        # ==> 1,2,3
                      
                      
    printParam
                      
                        (
                      
                      
                        [
                      
                      
                        1
                      
                      
                        ,
                      
                      
                        2
                      
                      
                        ,
                      
                      
                        3
                      
                      
                        ]
                      
                      
                        )
                      
                      
                        # ==> [1,2,3]
                      
                      
    printParam
                      
                        (
                      
                      
                        *
                      
                      
                        [
                      
                      
                        1
                      
                      
                        ,
                      
                      
                        2
                      
                      
                        ,
                      
                      
                        3
                      
                      
                        ]
                      
                      
                        )
                      
                      
                        # ==> 1,2,3
                      
                    
                  

    關鍵參數

    關鍵參數
    ** +參數,如 **kw , kw 將獲得一個dict.

                    
                      
                        # 關鍵字參數
                      
                      
                        def
                      
                      
                        person
                      
                      
                        (
                      
                      name
                      
                        ,
                      
                      age
                      
                        ,
                      
                      
                        **
                      
                      kw
                      
                        )
                      
                      
                        :
                      
                      
                        print
                      
                      
                        (
                      
                      
                        'name:'
                      
                      
                        ,
                      
                      name
                      
                        ,
                      
                      
                        'age:'
                      
                      
                        ,
                      
                      age
                      
                        ,
                      
                      
                        'kw:'
                      
                      
                        ,
                      
                      kw
                      
                        )
                      
                      
                        ;
                      
                      
    
    person
                      
                        (
                      
                      
                        'yy'
                      
                      
                        ,
                      
                      
                        22
                      
                      
                        )
                      
                      
    person
                      
                        (
                      
                      
                        'yy'
                      
                      
                        ,
                      
                      
                        22
                      
                      
                        ,
                      
                      city 
                      
                        =
                      
                      
                        'BJ'
                      
                      
                        ,
                      
                      addr 
                      
                        =
                      
                      
                        'CY'
                      
                      
                        )
                      
                    
                  

    命名關鍵參數
    和關鍵字參數**kw不同,命名關鍵字參數需要一個特殊分隔符*, 后面的參數被視為命名關鍵字參數。有一種情況,如果函數定義中已經有了一個可變參數,后面跟著的命名關鍵字參數就不再需要一個特殊分隔符 了。

                    
                      
                        # 命名關鍵字參數
                      
                      
                        # 和關鍵字參數**kw不同,命名關鍵字參數需要一個特殊分隔符*,*后面的參數被視為命名關鍵字參數
                      
                      
                        def
                      
                      
                        student
                      
                      
                        (
                      
                      name
                      
                        ,
                      
                      age
                      
                        ,
                      
                      
                        *
                      
                      
                        ,
                      
                      city
                      
                        ,
                      
                      grade
                      
                        )
                      
                      
                        :
                      
                      
                        print
                      
                      
                        (
                      
                      
                        'name:%s,age:%d,city:%s,grade:%s'
                      
                      
                        %
                      
                      
                        (
                      
                      name
                      
                        ,
                      
                      age
                      
                        ,
                      
                      city
                      
                        ,
                      
                      grade
                      
                        )
                      
                      
                        )
                      
                      
    
    student
                      
                        (
                      
                      
                        'DH'
                      
                      
                        ,
                      
                      
                        12
                      
                      
                        ,
                      
                      city
                      
                        =
                      
                      
                        "BeiJing"
                      
                      
                        ,
                      
                      grade 
                      
                        =
                      
                      
                        'A'
                      
                      
                        )
                      
                      
                        #==> name:DH,age:12,city:BeiJing,grade:A
                      
                      
    student
                      
                        (
                      
                      
                        'DH'
                      
                      
                        ,
                      
                      
                        12
                      
                      
                        )
                      
                      
                        #==> 提示缺少 'city' and 'grade' 參數     
                      
                      
                        # 如果函數定義中已經有了一個可變參數,后面跟著的命名關鍵字參數就不再需要一個特殊分隔符*了:
                      
                      
                        def
                      
                      
                        student2
                      
                      
                        (
                      
                      name
                      
                        ,
                      
                      age
                      
                        ,
                      
                      
                        *
                      
                      args
                      
                        ,
                      
                      city
                      
                        ,
                      
                      grade
                      
                        )
                      
                      
                        :
                      
                      
                        print
                      
                      
                        (
                      
                      
                        'name:%s,age:%d,city:%s,grade:%s, args:'
                      
                      
                        %
                      
                      
                        (
                      
                      name
                      
                        ,
                      
                      age
                      
                        ,
                      
                      city
                      
                        ,
                      
                      grade
                      
                        )
                      
                      
                        ,
                      
                      args
                      
                        )
                      
                      
    
    student2
                      
                        (
                      
                      
                        'DH'
                      
                      
                        ,
                      
                      
                        12
                      
                      
                        ,
                      
                      
                        1
                      
                      
                        ,
                      
                      
                        2
                      
                      
                        ,
                      
                      
                        3
                      
                      
                        ,
                      
                      
                        4
                      
                      
                        ,
                      
                      city
                      
                        =
                      
                      
                        "BeiJing"
                      
                      
                        ,
                      
                      grade 
                      
                        =
                      
                      
                        'A'
                      
                      
                        )
                      
                      
                        #==> name:DH,age:12,city:BeiJing,grade:A, args: (1, 2, 3, 4)
                      
                    
                  
  2. 關于函數作為返回值

    我們來看一個函數

                    
                      
                        def
                      
                      
                        count
                      
                      
                        (
                      
                      
                        )
                      
                      
                        :
                      
                      
    	fs 
                      
                        =
                      
                      
                        [
                      
                      
                        ]
                      
                      
                        for
                      
                       i 
                      
                        in
                      
                      
                        range
                      
                      
                        (
                      
                      
                        1
                      
                      
                        ,
                      
                      
                        4
                      
                      
                        )
                      
                      
                        :
                      
                      
                        def
                      
                      
                        f
                      
                      
                        (
                      
                      
                        )
                      
                      
                        :
                      
                      
                        return
                      
                       i 
                      
                        *
                      
                       i
    		fs
                      
                        .
                      
                      append
                      
                        (
                      
                      f
                      
                        )
                      
                      
                        return
                      
                       fs
    
    
                      
                        for
                      
                       f 
                      
                        in
                      
                       count
                      
                        (
                      
                      
                        )
                      
                      
                        :
                      
                      
                        print
                      
                      
                        (
                      
                      f
                      
                        (
                      
                      
                        )
                      
                      
                        )
                      
                      
                        //=
                      
                      
                        =
                      
                      
                        >
                      
                      
                        9
                      
                      
                        9
                      
                      
                        9
                      
                    
                  

    看看這個函數,輸出結果跟我們預想的1,4,9不符合。這是因為變量 i 在循環3次之后, i 已經變成3了,因此結果是9,9,9
    注意:返回閉包時牢記一點,返回函數不要引用任何循環變量,或者后續會發生變化的變量
    上個函數我們做個改變

                    
                      
                        def
                      
                      
                        count
                      
                      
                        (
                      
                      
                        )
                      
                      
                        :
                      
                      
                        def
                      
                      
                        f
                      
                      
                        (
                      
                      j
                      
                        )
                      
                      
                        :
                      
                      
                        def
                      
                      
                        g
                      
                      
                        (
                      
                      
                        )
                      
                      
                        :
                      
                      
                        return
                      
                       j 
                      
                        *
                      
                       j
    		
                      
                        return
                      
                       g
    	fs 
                      
                        =
                      
                      
                        [
                      
                      
                        ]
                      
                      
                        for
                      
                       x 
                      
                        in
                      
                      
                        range
                      
                      
                        (
                      
                      
                        1
                      
                      
                        ,
                      
                      
                        4
                      
                      
                        )
                      
                      
                        :
                      
                      
    		fs
                      
                        .
                      
                      append
                      
                        (
                      
                      f
                      
                        (
                      
                      x
                      
                        )
                      
                      
                        )
                      
                      
                        ;
                      
                      
                        return
                      
                       fs
    
                    
                  
  3. 關于Function 和 Method理解

                    
                      
                        class
                      
                      
                        Student
                      
                      
                        (
                      
                      
                        object
                      
                      
                        )
                      
                      
                        :
                      
                      
                        def
                      
                      
                        set_age
                      
                      
                        (
                      
                      self
                      
                        ,
                      
                      age
                      
                        )
                      
                      
                        :
                      
                      
    		self
                      
                        .
                      
                      age 
                      
                        =
                      
                       age
    
    
                      
                        def
                      
                      
                        set_name
                      
                      
                        (
                      
                      self
                      
                        ,
                      
                      name
                      
                        )
                      
                      
                        :
                      
                      
    	self
                      
                        .
                      
                      name 
                      
                        =
                      
                       name
    
    Student
                      
                        .
                      
                      set_name 
                      
                        =
                      
                       set_name
    
                      
                        print
                      
                      
                        (
                      
                      
                        type
                      
                      
                        (
                      
                      Student
                      
                        .
                      
                      set_name
                      
                        )
                      
                      
                        )
                      
                      
                        #==> 
                        
                      
                      
                        print
                      
                      
                        (
                      
                      
                        type
                      
                      
                        (
                      
                      Student
                      
                        .
                      
                      set_age
                      
                        )
                      
                      
                        )
                      
                      
                        #==> 
                        
                      
                      
    
    s 
                      
                        =
                      
                       Student
                      
                        (
                      
                      
                        )
                      
                      
                        print
                      
                      
                        (
                      
                      
                        type
                      
                      
                        (
                      
                      s
                      
                        .
                      
                      set_name
                      
                        )
                      
                      
                        )
                      
                      
                        #==> 
                        
                      
                      
                        print
                      
                      
                        (
                      
                      
                        type
                      
                      
                        (
                      
                      s
                      
                        .
                      
                      set_age
                      
                        )
                      
                      
                        )
                      
                      
                        #==> 
                        
                      
                    
                  

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 黄色的网站在线观看 | 婷婷色在线播放 | 亚洲午夜久久久精品影院视色 | 国内精品久久久久久久影视麻豆 | 调教师鞭打总裁奴男男 | 亚洲天堂久久精品 | 久久精品小视频 | 香蕉eeww99国产在线观看 | 91久久爱 | 日本高清视频不卡 | 在线观看日韩精品 | 这里只有久久精品 | 香蕉视频在线观看视频 | 精品a视频 | 高清国产一区 | 日本国产精品 | 欧美精品一级毛片 | 日本久久精品免视看国产成人 | 愉拍精品视频在线观看 | 中文字幕亚洲一区二区v@在线 | 国产一区二区免费 | 国产成人精品一区 | 亚洲 中文 欧美 日韩 在线人 | 精品久久久久久婷婷 | 91精品国产视频 | 欧美大吊视频 | 99热精品在线播放 | 色就色综合 | 天天视频国产精品 | 国产或人精品日本亚洲77美色 | 国产玖玖玖精品视频 | 免费观看欧美一级高清 | 大毛片a大毛片 | 久久伊人影视 | 久久精品国产99国产精品澳门 | 亚洲情区| 狠狠噜噜 | 草久视频在线 | 日本韩国欧美在线 | 老妇激情毛片免费中国 | 婷婷亚洲视频 |