Python趣味入門9:函數是你走過的套路,詳解函數、調用、參數及返回值

来源:https://www.cnblogs.com/dosboy/archive/2022/05/29/dosboy_learn_python_9.html
-Advertisement-
Play Games

前後連續的電腦語句組合在一起並有名字可供調用稱之為函數,本章主要介紹如何在程式中定義和使用函數其中包括如何調用函數、使用參數、使用參數的*和**運算,返回數值。如果把電腦語句比為武術動作的話,那麼函數就可以比喻為功夫“套路”,本質上“降龍十八掌”就是包含了18個語句的函數,那麼“葵花寶典”呢? ...


概念

瓊恩·雪諾當上守夜人的司令後,為訓練士兵對付僵屍兵團,把成功斬殺僵屍的一系列動作編排成了“葵花寶典劍法”,這就是函數。相似,在電腦世界,一系列前後連續的電腦語句組合在一起稱之為函數,本章主要介紹如何在程式中定義和使用函數。

1、函數的定義

有了函數後,當要用到相同功能時,我們就可以重覆地調用它而不用重寫代碼。下麵是瓊恩·雪諾用來上報戰況的程式,每殺死1鬼,通信員可以敲kill_dead(),而不用反覆敲print()語句了。

如下定義了 kill_dead函數,用來上報戰況

def kill_dead():
    print('殺死異鬼1頭')

上面def語句定義了函數kill_dead,函數名可以由寫程式的人命名,必須以字母開頭,緊跟圓括弧,函數內的語句都必須多縮進4個空格。

2、函數的參數

例如print()是系統內置的函數,要顯示文字時我們把文字放進括弧里,這就是函數的參數。定義函數時我們也可以接受參數。
在調用時分為位置參數與關鍵字參數。

2.1 參數調用方式

我們來完善這個“戰況通報程式”,把英雄的名字和戰鬥業績也加上。

如下定義了 kill_dead函數,用來上報戰況

  • name: 表示人名變數,
  • number:表示戰績變數
def kill_dead(name,number):
    print(name,'殺死異鬼',number,'頭') #逗號分隔參數顯示

這是主程式(沒有縮進)

kill_dead('Snow',2) #位置參數調用
kill_dead(name='Sam',number = 1) #關鍵字參數調用
kill_dead('Guido',number = 1) #位置+關鍵字參數調用

運行上面的程式會顯示出如下的結果:

Snow 殺死異鬼 2 頭
Sam 殺死異鬼 1 頭
Guido 殺死異鬼 1 頭

第1行語句是位置調用,第2行語句是關鍵字調用方式,第3行是混合方式。

2.2 參數的預設值

上述播報戰況的程式中,我們認為number(數量)每回填上比較麻煩,因為90%的的情況都是1,除了Snow偶爾會殺死2個。這我們就可以使用預設值,而不是每次都填。預設值可以使用等號寫在參數變數後面,如下:

如下定義了 kill_dead函數,用來上報戰況

  • name: 表示人名變數,
  • number:表示戰績變數
def kill_dead(name,number=1):
    print(name,'殺死異鬼',number,'頭') #顯示
  • 預設值數量為1,可以不填數量
    kill_dead('小牛叔')

小牛叔殺死了1位,運行結果呢?

小牛叔 殺死異鬼 1 頭

說明: 有預設值的參數變數,叫可選參數;沒有預設值的參數,叫必選參數,可選參數定義時必須放在右側。

2.3 參數的*運算和**運算

特殊情況出現了,假設兵甲、兵乙...兵N同時殺死了1個敵人,這時的參數數量不固定怎麼辦?可以使用*運算,把所有的位置參數“壓縮”成一個元組變數;此外,還可以使用**運算,把所有的關鍵字參數“壓縮”成一個字典。用法如下:

  • *names: 基於位置參數元組,表示的人名變數,
  • **killed:基於關鍵字參數的字典,表示目標和數量
def group_kill(*names,**killed):
    print(names,'殺死',killed['target'],killed['number'],'頭') #顯示

張王被壓縮成元組存在names,後面被組裝進字典killed里。

group_kill('張','王',number=2,target='異龍')

運行結果:

('張', '王') 殺死 異龍 2 頭

3、函數的返回值

類似於input()輸入函數可以返回用戶輸入的字元串結果,我們定義的函數也有返回值,返回值使用return語句。

假設有賞金獵人會根據殺敵多少從守夜人那裡領取每個人頭50金幣每個龍500金幣,計算2人3龍的賞金的程式這麼寫:

def money(dead:int,drag:int)->int:
    return (dead*50 + drag*500)

運行如下:

print('2人3龍的賞金為:',money(2,3))

在本程式里,我們在參數後使用了:int,函數後使用了->int,其實這表示參數是整數,返回值是整數,加了會使程式更加好理解,不強制要求添加。

運行後的結果如下:

2人3龍的賞金為: 1600

跟隨小牛叔的腳步,編程入門不掉隊


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

-Advertisement-
Play Games
更多相關文章
  • 前言 偶然一天把某項目文檔傳到手機上,用手機自帶的閱讀器方便隨時拿出來查閱。看著我那好久沒點開的閱讀器,再看著書架上擺著幾本不知道是多久之前導入的小說。 閉上眼,我仿佛看到那時候的自己。側躺著縮在被窩裡,亮度調到最低,看的津津有味。 睜開眼,一聲短嘆,心中五味雜陳,時間像箭一樣飛逝而去,過去靜止不動 ...
  • 狀態機簡介: 狀態機是有限狀態自動機的簡稱,是現實事物運行規則抽象而成的一個數學模型。【規則的抽象】 有限狀態機一般都有以下特點: (1)可以用狀態來描述事物,並且任一時刻,事物總是處於一種狀態; (2)事物擁有的狀態總數是有限的; (3)通過觸發事物的某些行為,可以導致事物從一種狀態過渡到另一種狀 ...
  • 我前面使用的jdbc和jdbc的工具類集成的但是它們在少部分代碼的情況下會會簡單,但是以後如果項目較大jdbc的固定代碼會很難維護,如果使用框架會簡單很多,也標志著java學習正式進入到框架階段 ...
  • Hi, 我是Mic。 今天分享一道一線互聯網公司必問的面試題。 ”JVM如何判斷一個對象可以被回收“ 關於這個問題,來看看普通人和高手的回答。 普通人: 嗯。。。。。。。。。。 高手: 好的,面試官。 在JVM裡面,要判斷一個對象是否可以被回收,最重要的是判斷這個對象是否還在被使用,只有沒被使用的對 ...
  • 前言 今天的這個腳本,是一個別人發的外包,交互界面的代碼就不在這裡說了,但是可以分享下自動評論、自動點贊、自動關註、採集評論和視頻的數據是如何實現的 開發環境 python 3.8 運行代碼pycharm 2021.2 輔助敲代碼requests 第三方模塊 原理: 模擬客戶端,向伺服器發送請求 對 ...
  • 案例標題:用python可視化分析,B站Top100排行榜數據。 分析流程: 一、數據讀取 二、數據概覽 三、數據清洗 四、可視化分析 ·相關性分析-散點圖(scatter) ·得分分佈-餅圖(pie) ·各指標分佈-箱形圖(boxplot) ·視頻作者分析-詞雲圖(wordcloud) ...
  • 0、前言 這篇博客是給認識的那幫新手搞的,剛進入IT行業的崽們 這個東西配置好了,也可以選擇弄成線上文檔,下一次安裝IDEA時,有一個import導入配置,然後就可以自己配置好了( 雖然方便,但不建議用 ) 另外:IDEA建議別漢化,一開始接觸不習慣,後續使用一段時間之後就很舒服了 jetBrain ...
  • 一、SpringMVC使用 1.工程創建 創建maven工程。 添加java、resources目錄。 引入Spring-webmvc 依賴。 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc< ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...