<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                **函數的參數** 函數定義中的參數有以下幾種: * 必需參數(位置參數) * 默認參數 * 關鍵字參數 * 不定長參數 * 不定長關鍵字參數 **必需參數(位置參數)** * 必需參數(位置參數)必須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣。 我們定義一個打招呼的函數 ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- def myHello(yourname,myname): '''定義招呼,需要依次傳入對方的名字以及你的名字''' print("Hello",yourname,"my name is",myname) #第一次調用 myHello('lisa','airvip') #第二次調用 myHello() ~~~ 第一次調用,正確輸出 ~~~ Hello lisa my name is airvip ~~~ 第二次調用,報了 缺少位置參數的錯誤 ~~~ Traceback (most recent call last): File "./test.py", line 10, in <module> myHello() TypeError: myHello() missing 2 required positional arguments: 'yourname' and 'myname' ~~~ **默認參數** * 默認參數在調用時可以傳入也可以不傳入 * 默認參數在函數定義時必須在位置參數之后 我們修改下打招呼的函數 ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- def myHello(yourname,myname = 'airvip'): '''定義招呼,需要依次傳入對方的名字以及你的名字''' print("Hello",yourname,"my name is",myname) #第一次調用 myHello('lisa','air') #第二次調用 myHello('lisa') ~~~ 第一次調用與第二次調用都會正確輸出 ~~~ Hello lisa my name is air Hello lisa my name is airvip ~~~ 可以看出添加了默認參數的函數調用相比只有位置參數的函數調用輕松多了。 **關鍵字參數** * 關鍵字參數是相對于函數調用來說的,我們用位置參數的例子來說明。 * 使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為 Python 解釋器能夠用參數名匹配參數值。 ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- def myHello(yourname,myname): '''定義招呼,需要依次傳入對方的名字以及你的名字''' print("Hello",yourname,"my name is",myname) #第一次調用 myHello('lisa','airvip') #第二次調用 myHello('airvip','lisa') #第三次調用 使用關鍵字 myHello(myname='airvip',yourname='lisa') ~~~ 調用結果 ~~~ #第一次調用 Hello lisa my name is airvip #第二次調用 Hello airvip my name is lisa #第三次調用 使用關鍵字 Hello lisa my name is airvip ~~~ 我們不難發現,第一次調用與第三次調用返回的結果是一樣的,然而第二次調用是沒有使用關鍵字(定義函數時的形參),得到了與第一次和第三次調用不一樣的結果。 **不定長參數** * 在函數處理是可能不確定有幾個參數,我們就可以定義成不定長參數。 * 習慣上使用 *args 來表示不定常參數,當然你也可以使用其他前面加星的變量表示不定長參數。 * 如果在函數調用時沒有指定參數,它就是一個空元組。我們也可以不向函數傳遞未命名的變量。 * 不定長參數允許你傳入 0 個或任意個參數,這些可變參數在函數調用時自動組裝為一個 tuple。 以多個數字求和為例 ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- def mySum(*args): sum = 0 for i in args: sum += i print(sum) #調用 mySum() #打印0 mySum(1,2,3) #打印6 mySum(*(1,2,3)) #打印6 mySum(*[1,2,3]) #打印6 ~~~ **不定長關鍵字參數** * 習慣上使用 **kwargs 來表示不定長關鍵字參數,當然你也可以使用其他前面加雙星的變量表示不定長關鍵字參數。 * Python 解釋器會把通過 **kwargs 傳入的參數變成一個 dict 形式。 以收集用戶信息為例 ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- def userInfo(name,sex='男',*args,salary,**kwargs): '''用戶信息收集''' print('用戶信息'.center(20,'*')) info = """ 姓名:{_name} 性別:{_sex} 特征:{_args} 收入:{_salary} 其他: {_kwargs} """.format(_name = name,_sex = sex,_args = args,_salary = salary,_kwargs = kwargs) print(info) userInfo('airvip','男','喜歡女','長得帥',salary='1000000',address='山東') ~~~ 調用結果 ~~~ ********用戶信息******** 姓名:airvip 性別:男 特征:('喜歡女', '長得帥') 收入:1000000 其他: {'address': '山東'} ~~~ 在 Python 中定義函數時,使用 必需參數(位置參數)、默認參數、不定長參數、關鍵字參數和不定長關鍵字參數,這5種參數的組合。但是參數定義的順序必須是: 必需參數(位置參數)、默認參數、不定長參數、關鍵字參數和不定長關鍵字參數。 總結: 1. 使用了不定長參數默認參數就失效 2. *args 不定長參數,args 接收的是一個 tuple 3. **kwargs 不定長關鍵字參數,kwargs 接收的是一個 dict 4. 不定長參數既可以直接傳入:func(1, 2, 3),又可以先組裝 list 或 tuple ,再通過 *list 或 * tuple 傳入 5. 不定長關鍵字參數既可以直接傳入:func(a=1, b=2),又可以先組裝 dict,再通過 **dict傳入 **再談默認參數** 默認參數很有用,但是使用不當又會產生不可思議的錯誤。 下面來探討這個使用默認參數的例子 給列表末尾添加結束字符串: ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- def list_over(L = []): L.append('Over') return L #第一次調用 print(list_over([1,2,3])) #第二次調用 print(list_over([1,2,3])) #第三次調用 print(list_over()) #第四次調用 print(list_over()) ~~~ 調用結果 ~~~ [1, 2, 3, 'Over'] [1, 2, 3, 'Over'] ['Over'] ['Over', 'Over'] ~~~ 我們理想的結果是 第一次調用結果 等于 第二次調用 第三次調用結果 等于 第四次調用 然而,第三次調用結果 不等于 第四次調用 ,這是為什么呢? 因為 L 也是一個變量,該變量默認指向不變的內存地址空間,每次調用該函數,如果改變了該地址空間的值,則下次調用時,默認參數變量的內容就變了,但是該默認變量的指向沒有發生改變,就造成了異常的結果。 所以,默認參數必須指向不變對象! 那問題來了,那該函數如何修改呢? ~~~ def list_over(L = None): if L == None: L = [] L.append('Over') return L ~~~ 這樣無論使用默認參數調用多少次都不會改變默認變量 L 指向的內存空間的值了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看