日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

对Python参数类型详解以及学习中遇到的坑

發布時間:2025/3/20 python 8 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对Python参数类型详解以及学习中遇到的坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于之前遇到過幾次有關于參數類型的坑,以及經常容易把一些參數類型搞混淆,現在做一下有關參數類型的總結記錄以及對之前踩坑經歷的分析。

參數類型

首先我們列舉一下有關于Python的參數類型,以及實際上的運用和原理:

  • 位置參數(必選參數)
  • 默認參數
  • 可變參數
  • 關鍵字參數

位置參數(必選參數)

首先是位置參數,同時也被稱作必選參數,位置參數很好理解,只要記住這點:

在函數定義時直接給定的此參數名稱,調用時按照參數的位置順序,依次賦予參數值

示例:

def person_info(name, age):print("My name is %s, I am %s years old" % (name, age))person_info("zhangsan", "49")

name,age都是位置參數,按照位置順序,函數中依次接收參數值。

默認參數

默認參數,默認參數存在許多便利的地方,但是同時也存在許多坑,等到后面我們再去仔細分析下為什么存在這些坑,以下幾點我們需要注意的:

  • 可以為一個或者多個參數指定默認值,當調用函數時可以不用傳入該參數值,大大降低函數調用的難度。
  • 當需要用傳入的參數值代替默認參數的默認值時,可以按照參數位置順序傳入,同時也可以指定參數名傳入。

示例:

''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def person_info(name, age, sex='man'):print("My name is %s, I am %s years old, I am %s" % (name, age, sex))person_info('zhangsan', '15') person_info('lisi', '15', 'women') person_info('lisi', '20', sex='women')

可變參數

可變參數,顧名思義就是傳入的參數數量是可變的:

  • 可變參數在實際中,傳入的數量可以是任意多個,但也可以沒有;
  • 而可變參數會在傳入函數內部時,是一個tuple的形式;

示例:

def add(*numbers):sum = 0for i in numbers:sum+=ireturn sumprint(add(1,3,4,2,1,4,1,3)) numbers=[2,3,4,1,5] add(*numbers)

當傳入的參數為list時,會將list中所有的元素作為可變參數,傳進去

關鍵字參數

  • 關鍵字參數也允許你傳入0個或者任意個含參數名的參數,這些關鍵字參數會函數內部自動組裝為一個dict。
  • 調用函數時,可以只傳入必選參數。(擴展函數的功能,**kwargs)

示例:

''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def person_info(**kw):for key,value in kw.items():print(key, value)person_info(name='zhangsan', age=15) person = {'name': 'zhangsan', 'age': 13} person_info(**person)

命名關鍵字參數

對于關鍵字參數,函數的調用者可以傳入任意不受限制的關鍵字參數。但是針對到底傳入了哪些參數,就需要通過函數內部分析檢查。所以命名關鍵字參數就是限制傳入的參數的名字,只能傳我已命名關鍵字參數。

  • 命名關鍵字參數需要一個特殊分隔符*,分隔符后面的參數會被視為命名關鍵字參數。
  • 當函數中已經存在一個可變參數,后面跟著的命名關鍵字參數就不需要一個特殊分隔符*。
  • 命名關鍵參數可以有默認值,從而簡化調用。
  • 命名關鍵參數必須傳入一個參數名,這和位置參數不同。如果沒有傳入參數名,調用將會報錯。

示例:

def person_info(name, *, age, sex):print(name, age, sex)def person_info2(name, *args, age, sex):for i in args:print(i)print(name, age, sex)person_info('zhangsan', age=12, sex='man') person_info2('zhangsan', 'sksks', 'ssk', age=13, sex='man')

參數組合調用規則

在python定義函數過程中,可以用位置參數、默認參數、可變參數、關鍵字參數、命名關鍵字參數。這五種參數都可以通過組合使用。需要注意的是:

這五種參數定義的順序必須是:位置參數、默認參數、可變參數、命名關鍵字參數、關鍵字參數。

  • 位置參數和默認參數組合
def Person(name, age=20):print(name,age)Person('zhangsan') Person('zhangsan', 20)
  • 位置參數、默認參數、可變參數組合
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def Person(name, age=20, *args):for i in args:print(i)print(name, age)Person('zhangsan') Person('zhangsan', 22, "Beijing") Person('zhangsan', age=22, 'Shanghai')
  • 位置參數、默認參數、可變參數、命名關鍵字參數組合
def Person(name, age=20, *args, city, **kwargs):for i in args:print(i)for key,value in kwargs.items():print(key, value)print(name, age, city)Person('zhangsan', age=12, 'Author', city='Shanghai', company='Shanghai Software')

關于參數定義的一些坑

  • 默認參數陷阱

關于默認參數陷阱的問題,我們先來看一看一個示例:

def Book(book, book_list=[]):print(id(book_list))book_list.append(book)for book in book_list:print(book)print(id(book_list)) test = Book("First One")

輸出的結果:

140699715685128 First One 140699715685128

這個輸出的結果應該是意料之中,現在我們這時候再調用Book()方法,看看會發生什么:

>>> test = Book("First One") 140699715685128 First One 140699715685128 >>> test2 = Book("Second One") 140699715685128 First One Second One 140699715685128

這時候輸出結果,竟然把之前的First one都輸出,看了他們的id,發現都是同一塊內存地址,這時候就開始納悶了,那么來找找出現這種狀況的原因。 經過查閱官方資料發現,這是一段Python官方文檔給出的解釋:

Important warning: The default value is evaluated only once. This
makes a difference when the default is a mutable object such as a
list, dictionary, or instances of most classes. For example, the
following function accumulates the arguments passed to it on
subsequent calls:

我們來看看解釋分析下,Python官方文檔給出的理由就是Python對默認值只計算一次,對于可變對象,在后續調用的情況下會累積傳遞給他們。而list、dict等這種都屬于可變對象。

那么對于中默認值陷阱,我們是該如何避免造成一些不必要的麻煩呢?大致有兩種解決方法:

  • 避免使用可變對象作為默認值
  • 在參數定義的時候可以使用None對象作為占位符。

第二種解決方法:

''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def Book(book, book_list=None):print(book_list)if book_list is None:book_list = []book_list.append(book)for book in book_list:print(book)print(id(book_list)) test1 = Book('First one') test2 = Book('Second one')

測試結果:

>>> test1 = Book('First one') None First one 140057693903624 >>> test2 = Book('Second one') None Second one 140057693903624
  • 慎用變長參數

前面已經介紹過了,Python是支持可變長度的參數列表,可以在函數定義參數時使用*args和**kwargs兩個特殊的語法來實現。 那為什么要說慎用變長參數,我總結了一下有以下幾個原因:

  • 使用過于靈活。比如在我上面有關不同類型參數組合使用的示例中,在位置參數和默認參數在的情況下,還有可變參數、關鍵字參數、命名關鍵字參數。這就很容易是的這個函數的簽名不夠清晰,調用者需要花費時間去了解你這個方法該如何調用。所以這就很容易使得團隊開發中效率低效。
  • 另外一個原因,如果一個函數的列表過于長,雖然可以通過使用*args, **kwargs來簡化函數,但同時也意味這個函數或許有更好的實現方式,有重構的必要。

說完了要慎用,在說說看我們常用的變長參數的使用場景:

  • 為函數添加一個裝飾器。
  • 如果參數的數目不確定的時候,可以考慮使用變長參數。比如讀取一些配置文件中的配置項時。
  • 用來實現函數的多態,或者在繼承情況下子類需要調用父類的某些方法。

總結

關于的Python參數類型就寫到這里了,剛開始學Python的時候,經常被函數定義的參數類型搞懵,后面看了一些教程,自己在寫一些腳本的時候遇到的一些坑,并且在看一些大牛分析背后的原理,后面感覺收獲良多。后面干脆想把自己學習過程遇到的東西都整理一下,做個記錄,加深理解。

總結

以上是生活随笔為你收集整理的对Python参数类型详解以及学习中遇到的坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级少妇毛片 | 午夜久久久久久久久 | 欧美亚洲日本一区 | 99免费精品视频 | 色爱视频 | 激情久久久 | 四虎国产在线观看 | 素人av在线 | 亚洲自拍偷拍一区二区三区 | 毛片一二三区 | 手机av在线网| 白石茉莉奈黑人 | 日韩爱爱网 | 日韩精品――色哟哟 | 美女av网| 小婕子伦流澡到高潮h | 91久久爱| 国产一级二级三级在线观看 | 香蕉伊人| 少妇一级淫片免费放播放 | 亚洲精品大全 | www.sesehu| 成年性生交大片免费看 | 超碰pron| 亚洲国产美女视频 | 亚洲aa在线观看 | 国产性猛交xxxx免费看久久 | 日韩欧美亚洲视频 | 欧美日韩1| www.jizzcom| 亚洲黄网在线 | 一级黄色录像免费观看 | 亚洲瘦老头同性xxxxx | 免费在线性爱视频 | 久久免费网| 在线中文av| 黑人番号 | 成人久久久精品国产乱码一区二区 | 久久国产色 | 免费毛片网站在线观看 | 成人精品一区二区三区电影 | 九色porny自拍视频在线播放 | 国产精品无码久久久久成人app | 善良的女朋友在线观看 | 国产精品 欧美精品 | 久久精品亚洲一区 | 国产福利在线观看视频 | 午夜家庭影院 | 国产视频网站在线观看 | 伊人www22综合色 | 法国空姐在线观看视频 | 自拍偷拍麻豆 | 三级精品视频 | 天堂资源| proumb性欧美在线观看 | 中文字幕日韩精品无码内射 | 韩国妻子的朋友 | 色屁屁一区二区三区视频 | 亚洲色p | 91精彩视频 | 性一交一乱一色一免费无遮挡 | 我和单位漂亮少妇激情 | 黄色特级一级片 | 最新色站 | 在线观看免费国产视频 | 免费日韩网站 | 凹凸精品熟女在线观看 | 极品少妇在线 | 日韩av成人在线 | 久久中文视频 | 六月婷婷激情 | 三区在线视频 | 日xxxx| 黄色av电影在线观看 | 一区二区国产精品精华液 | 韩日黄色| 性欧美精品男男 | 91精彩视频在线观看 | 天海翼视频在线观看 | jvid在线| 国产大片一区二区三区 | 青青久视频 | 欧美午夜精品理论片 | 久久久久久免费观看 | 欧美丰满老妇熟乱xxxxyyy | 视频一区中文字幕 | 日韩少妇中文字幕 | 好吊操视频这里只有精品 | 亚洲精品视频在线免费 | 激情综合站 | 亚洲第一福利网站 | 天天玩天天干 | 欧美xxxxx性| 91久久中文字幕 | 国产成人自拍视频在线观看 | 女人扒开双腿让男人捅 | 免费精品在线视频 | 中国丰满老太hd | 91抖音在线观看 |