亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Python傳入?yún)?shù)的幾種方法

 更新時間:2019年05月16日 10:46:59   作者:abc_12366  
這篇文章主要介紹了Python傳入?yún)?shù)的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Python傳入?yún)?shù)的方法有:位置參數(shù)、默認參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)、和命名關(guān)鍵字參數(shù)、以及各種參數(shù)調(diào)用的組合

寫在前面

Python唯一支持的參數(shù)傳遞方式是『共享傳參』(call by sharing)

多數(shù)面向?qū)ο笳Z言都采用這一模式,包括Ruby、Smalltalk和Java(Java的引用類型是這樣,基本類型按值傳遞)

共享傳參是指函數(shù)的各個形式參數(shù)獲得實參中各個引用的副本;也就是說,函數(shù)內(nèi)部的形參是實參的別名(alias)

這種方案的結(jié)果是,函數(shù)可能會修改作為參數(shù)傳入的可變對象,但是無法修改那些對象的標識(即不能把一個對象替換為另一個對象)

位置參數(shù)

位置參數(shù)是最簡單的傳入?yún)?shù)的方式,在其它的語言中也常常被使用

演示一:

def func(a, b):
  print(a+b)

func(1, 2) #3

演示二:

def power(x, n):
  s = 1
  while(n > 0):
    n -= 1
    s *= n
  return s

power(2, 3) #8

默認參數(shù)

默認參數(shù)就是在調(diào)用函數(shù)的時候使用一些包含默認值的參數(shù)

def power(x, n=2):
  s = 1
  while(n > 0):
    n -= 1
    s *= n
  reutrn s

power(3)  #9
power(2, 3) #8

定義默認參數(shù)要牢記一點:默認參數(shù)必須指向不變對象!

#以下這個函數(shù)如果被多次調(diào)用會在默認添加多個END字符串
def add_end(l = []):
  l.append('END')
  return l
#為了避免這個問題,應(yīng)該把傳入的默認參數(shù)設(shè)置為不可變的
def add_end(l = None):
  l = []
  l.append('END')
  return l

可變參數(shù)

可變參數(shù)就是允許在調(diào)用參數(shù)的時候傳入多個(≥0個)參數(shù)(類似于列表、字典)

#這才是可變參數(shù),雖然在使用上和列表沒有區(qū)別,但是參數(shù)nums接收到的是一個tuple(這些參數(shù)在傳入時被自動組組裝為一個元祖)
def calc(*nums):
  sum = 0
  for n in nums:
    sum += n
  return sum

>>> calc(1,2,3)
7

>>> my_ls = [1,2,3]
>>> calc(*my_ls)
7

關(guān)鍵字參數(shù)

可變參數(shù)允許傳入0個~多個參數(shù),而關(guān)鍵字參數(shù)允許在調(diào)用時以字典形式傳入0個或多個參數(shù)(注意區(qū)別,一個是字典一個是列表);在傳遞參數(shù)時用等號(=)連接鍵和值

#用兩個星號表示關(guān)鍵字參數(shù)
def person_info(name, age, **kw):
  print("name", name, "age", age, "other", kw)

>>> person_info("Xiaoming", 12)
name Xiaoming age 12 other{}
>>> person_info("Dahuang", 35, city = "Beijing")
name Dahuang age 35 other {'city':'Beijing'}

命名關(guān)鍵字參數(shù)

命名關(guān)鍵字參數(shù)在關(guān)鍵字參數(shù)的基礎(chǔ)上限制傳入的的關(guān)鍵字的變量名

和普通關(guān)鍵字參數(shù)不同,命名關(guān)鍵字參數(shù)需要一個用來區(qū)分的分隔符*,它后面的參數(shù)被認為是命名關(guān)鍵字參數(shù)

#這里星號分割符后面的city、job是命名關(guān)鍵字參數(shù)
person_info(name, age, *, city, job):
  print(name, age, city, job)

>>> person_info("Alex", 17, city = "Beijing", job = "Engineer")
Alex 17 Beijing Engineer  #看來這里不再被自動組裝為字典

不過也有例外,如果參數(shù)中已經(jīng)有一個可變參數(shù)的話,前面講的星號分割符就不要寫了(其實星號是寫給Python解釋器看的,如果一個星號也沒有的話就無法區(qū)分命名關(guān)鍵字參數(shù)和位置參數(shù)了,而如果有一個星號即使來自變長參數(shù)就可以區(qū)分開來)

#args是變長參數(shù),而city和job是命名關(guān)鍵字參數(shù)
person_info(name, age, *args, city, job):
  print(name, age, args, city)

>>> person_info("Liqiang", 43, "balabala", city = "Wuhan", job = "Coder")
Liqiang 43 balabala Wuhan Coder

參數(shù)組合

總結(jié)一下,在Python中一種可以使用5中傳遞參數(shù)的方式(位置參數(shù)、默認參數(shù)、變長參數(shù)、關(guān)鍵字參數(shù)、命名關(guān)鍵字參數(shù))

注意,這些參數(shù)在書寫時要遵循一定的順序即:位置參數(shù)、默認參數(shù)、變長參數(shù)、關(guān)鍵字參數(shù)、命名關(guān)鍵字參數(shù)(和本文的行文順序一致)

這里簡單舉兩個栗子

def f1(a, b, c=0, *args, **kw):
  print("a = ", a, "b = ", b, "args = ", args, "kw = ",kw)
def f2(a, b, c=0, *, d, **kw):
  print("a = ", a, "b = ", b, "c = ", c, "d = ", d, "kw = ", kw)

>>> f1(1, 2)
a = 1 b = 2 c = 0 args =() kw = {}
>>> f1(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
>>> f1(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
>>> f1(1, 2, 3, 'a', 'b', x = 99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x':99}
>>> f2(1, 2, d = 99, ext = None)
a = 1 b =2 c = 0 d = 99 kw = {'ext':None}

寫在后面

關(guān)于Python參數(shù)傳遞,有以下幾點提請注意:

1)參數(shù)的傳遞是通過自動將對象賦值給本地變量名來實現(xiàn)的
函數(shù)參數(shù)在實際中只是Python賦值的另一個實例而已,因為引用可以是以指針的形式來實現(xiàn)的,所有的參數(shù)實際上都是通過指針進行傳遞的,作為參數(shù)被傳遞的對象從來不自動拷貝

2)在函數(shù)內(nèi)部的參數(shù)名的賦值不會影響調(diào)用者
在函數(shù)運行時,在函數(shù)頭部的參數(shù)名時一個新的、本地的變量名,這個變量名是在函數(shù)的本地作用域內(nèi)的,函數(shù)參數(shù)名和調(diào)用者作用域中的變量是沒有區(qū)別的

3)改變函數(shù)的可變對象參數(shù)的值也許會對調(diào)用者有影響
換句話說,因為參數(shù)是簡單地賦值給傳入的對象,函數(shù)就能夠就地改變傳入的可變對象,因此其結(jié)果會影響調(diào)用者;可變參數(shù)對函數(shù)來說可以做輸入和輸出的

Python的通過賦值進行傳遞的機制與C++的引用參數(shù)選項不完全相同,但是實際中,它與C語言的參數(shù)傳遞模型相當類似:

1)不可變參數(shù)“通過值”進行傳遞
像整數(shù)和字符串這樣的對象是不可變對象,它們通過對象引用而不是拷貝進行傳遞的,但是因為無論如何都不可能在原處改變不可變對象,實際的效果就很像創(chuàng)建了一份拷貝

2)可變對象是通過“指針”進行傳遞的
列表和字典這樣的對象也是通過對象引用進行傳遞的,這一點與C語言使用指針傳遞數(shù)組很相似,可變對象能夠在函數(shù)內(nèi)部進行原處的改變,這一點和C數(shù)組很像

總而言之,理解Python的變量、函數(shù)的關(guān)鍵就是理解『綁定』的概念——綁定就是綁定對象,理解了這一點就好辦了

以上所述是小編給大家介紹的Python傳入?yún)?shù)的幾種方法詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 全CPU并行處理Pandas操作Pandarallel更快處理數(shù)據(jù)

    全CPU并行處理Pandas操作Pandarallel更快處理數(shù)據(jù)

    我們在處理數(shù)據(jù)時,通常小的數(shù)據(jù)對處理速度不敏感,但數(shù)據(jù)量一大,頓時會感覺數(shù)據(jù)處理效率不盡如人意,今天介紹的pandarallel就是一個簡單高效的Pandas并行工具,幾行代碼就可以提高數(shù)據(jù)處理效率,
    2024-01-01
  • pycharm導(dǎo)入源碼的具體步驟

    pycharm導(dǎo)入源碼的具體步驟

    在本篇內(nèi)容里小編給大家整理了關(guān)于pycharm導(dǎo)入源碼的具體步驟,有需要的朋友們可以參考學(xué)習(xí)下。
    2020-08-08
  • 如何修改pycharm使用anaconda環(huán)境后的pip install安裝路徑問題

    如何修改pycharm使用anaconda環(huán)境后的pip install安裝路徑問題

    本文主要介紹了如何修改pycharm使用anaconda環(huán)境后的pip install安裝路徑問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python實現(xiàn)i人事自動打卡的示例代碼

    Python實現(xiàn)i人事自動打卡的示例代碼

    這篇文章主要介紹了Python實現(xiàn)i人事自動打卡的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Python單例模式的兩種實現(xiàn)方法

    Python單例模式的兩種實現(xiàn)方法

    這篇文章主要介紹了Python單例模式的相關(guān)資料,這里提供了兩種實現(xiàn)方法,及注意事項,需要的朋友可以參考下
    2017-08-08
  • 動態(tài)設(shè)置django的model field的默認值操作步驟

    動態(tài)設(shè)置django的model field的默認值操作步驟

    這篇文章主要介紹了動態(tài)設(shè)置django的model field的默認值操作步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python基于pygame實現(xiàn)飛機大作戰(zhàn)小游戲

    python基于pygame實現(xiàn)飛機大作戰(zhàn)小游戲

    這篇文章主要為大家詳細介紹了python基于pygame實現(xiàn)飛機大作戰(zhàn)小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 關(guān)于微信小程序爬蟲token自動更新問題

    關(guān)于微信小程序爬蟲token自動更新問題

    本文主要介紹了關(guān)于微信小程序爬蟲關(guān)于token自動更新問題,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • python實用代碼片段收集貼

    python實用代碼片段收集貼

    這篇文章主要介紹了python實用代碼片段收集貼,本文收集了如獲取一個類的所有子類、計算運行時間、SQLAlchemy簡單使用、實現(xiàn)類似Java或C中的枚舉等實用功能代碼,需要的朋友可以參考下
    2015-06-06
  • Python實現(xiàn)3行代碼解簡單的一元一次方程

    Python實現(xiàn)3行代碼解簡單的一元一次方程

    這篇文章主要介紹了Python實現(xiàn)3行代碼解簡單的一元一次方程,很適合Python初學(xué)者學(xué)習(xí)借鑒,需要的朋友可以參考下
    2014-08-08

最新評論