python可變長參數

来源:https://www.cnblogs.com/xxpythonxx/archive/2023/03/10/17204681.html
-Advertisement-
Play Games

哈嘍大家好 今天給大家分享一個用Python開發一款飛翔的小鳥游戲。 飛翔的小鳥(游戲英文名:Flappy Bird) 一款由越南獨立開發者開發的手機游戲,是之前非常流行的一款手機游戲 小游戲目標:讓小鳥穿過管子,不要碰到任何物體,挑戰更遠距離 今天,就讓我們一起用python來複刻一下這款游戲吧! ...


可變長參數:方式有兩種,一種是位置實參,另一種是關鍵字實參,因此形參也必須得有兩種解決方法,依次來分別接收溢出的位置實參*與關鍵字實參**

一、可變長參數之*

形參中的*會將溢出的位置實參全部接收,然後存儲為元組的形式,再然後把元組賦值給*後的參數。需要註意的是:*後的參數名約定俗成為args。

def sum_self(*args):
    res = 0
    for num in args:
        res += num
    return res


res = sum_self(1, 2, 3, 4)
print(res)

輸出

10

二、可變長實參之*

實參中的**會將*後參數的值迴圈取出,打散成位置實參。以後但凡碰到實參中帶*的,它就是位置實參,應該馬上打散成位置實參去看。

def func(x, y, z, *args):
    print(x, y, z, args)


func(1, *(1, 2), 3, 4)

輸出

1 1 2 (3, 4)

三、可變長形參之**

形參中的**會將溢出的關鍵字實參全部接收,然後存儲字典的形式,然後把字典賦值給**後的參數。需要註意的是:**後的參數名約定俗成為kwargs。

def func(**kwargw):
    print(kwargw)


func(a=5)

輸出

{'a': 5}

四、可變長實參之**

實參中的****會將**後參數的值迴圈取出,打散成關鍵字實參。以後但凡碰到實參中帶**的,它就是關鍵字實參,應該馬上打散成關鍵字實參去看。

def func(x, y, z, **kwargs):
    print(x, y, z, kwargs)


func(1, 3, 4, **{'a': 1, 'b': 2})

輸出

1 3 4 {'a': 1, 'b': 2}

五、可變長參數應用(不講)

def index(name, age, sex):
    print(f"name: {name}, age: {age}, sex: {sex}")


def wrapper(*args, **kwargs):
    print(f"args: {args}")
    print(f"kwargs: {kwargs}")
    index(*args, **kwargs)

#學習中遇到問題沒人解答?小編創建了一個Python學習交流群:711312441
wrapper(name='nick', sex='male', age=19)

輸出

args: ()
kwargs: {'name': 'nick', 'sex': 'male', 'age': 19}
name: nick, age: 19, sex: male

六、命名關鍵字形參

現在有一個需求:函數的使用者必須按照關鍵字實參傳。

def register(x, y, **kwargs):
    if 'name' not in kwargs or 'age' not in kwargs:
        print('用戶名和年齡必須使用關鍵字的形式傳值')
        return
    print(kwargs['name'])
    print(kwargs['age'])


register(1, 2, name='nick', age=19)

輸出

nick
19

命名關鍵字形參:在函數定義階段,*後面的參數都是命名關鍵字參數。

特點:在傳值時,必須按照key=value的方式傳值,並且key必須命名關鍵字的指定的參數名。

def register(x, y, *, name, gender='male', age):
    print(x)
    print(age)

register(1, 2, x='nick', age=19)  # TypeError: register() got multiple values for argument 'x'

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大數據時代,各行各業對數據採集的需求日益增多,網路爬蟲的運用也更為廣泛,越來越多的人開始學習網路爬蟲這項技術,K哥爬蟲此前已經推出不少爬蟲進階、逆向相關文章,為實現從易到難全方位覆蓋,特設【0基礎學爬蟲】專欄,幫助小白快速入門爬蟲,本期為網頁基本結構介紹。 網頁概述 網頁是互聯網應用的一種形態,是組 ...
  • 前言: Antd + echarts 我想要實現的是點擊表的某一行自動生成對應的折線圖,我在點擊第一行生成5條線,我在點擊第二行的時候,本該生成2條線,結果還是5條線; 最開始我以為設置的 series 沒有初始化,後來打斷點查看數據是兩條,但是生成的線是五條,這個就很離譜 問題原因 官網是這麼說的 ...
  • 裝飾者模式(Decorator Pattern)是一種結構型設計模式,它允許你在不改變對象自身的基礎上,動態地給一個對象添加額外的功能。在前端中,裝飾者模式經常被用於擴展或修改組件的行為或樣式。 JavaScript 中的裝飾者模式可以通過以下幾種方式實現: 1. 通過擴展對象的屬性或方法來實現裝飾 ...
  • 本文是系列第五篇,終章。系列文章: 現代圖片性能優化及體驗優化指南 - 圖片類型及 Picture 標簽的使用 現代圖片性能優化及體驗優化指南 - 響應式圖片方案 現代圖片性能優化及體驗優化指南 - 縮放精細化展示及避免佈局偏移、拉伸 現代圖片性能優化及體驗優化指南 - 懶載入及非同步圖像解碼方案 圖 ...
  • 客觀的理解DDD DDD,即領域驅動設計,不僅帶給我們一套新的概念,還提供了一套全新的設計思路,應用在構建大型複雜軟體系統之上。 相對於DDD,我們使用的傳統的設計思路,常被稱為數據驅動設計,常被應用於中小型的項目。互聯網的項目,往往是快速迭代,起初一個小項目,慢慢會演化為一個中大型的項目,在演化過 ...
  • 在 Web 應用程式中(通俗點,可以理解成一個網站),Session 和 Cookie 是兩個非常重要的概念,主要用於實現用戶身份認證、數據傳遞等功能。今天就來講講這兩個東西。 ...
  • CF鏈接:Almost Identity Permutations Luogu鏈接:Almost Identity Permutations $ {\scr \color {Aquamarine}{\text{Solution}}} $ 前言 這好像是一道能用數學秒掉的題目 但由於我喜歡DP過菜,我 ...
  • 2.HelloSpring 思考問題? Hello對象是誰創建的? Hello對象是由Spring設置的 Hello 對象的屬性是怎麼設置的? Hello 對象的屬性是Spring容器設置的 這個過程就叫控制反轉 控制:誰來控制對象的創建,傳統應用程式的對象是由程式本身控制創建的,使用Spring後 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...