Python函數語法詳解(與C++對比學習)【未完】

一、Python函數的形式

def function_name (參數, ...) -> return value_type:# 函數體return value# 看具體需求# 如果沒有return語句,函數執行完畢后也會返回結果# 只是結果為None。return None可以簡寫為return

1. Python的返回值

? ? ? ? 在Python3中,提供了可以標注函數返回值的類型的功能,但Python是動態類型語言對返回值的類型標注不會像C++這種靜態類型語言那樣進行嚴格的類型檢查和限制,所以我們可以認為返回值只是給程序員自己看著方便,在語法不會檢查。

返回值標注的作用:

  1. 增強代碼的可讀性:標注返回值類型可以讓其他開發者在閱讀代碼時更清楚地理解函數的預? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?期輸出。
  2. 作為文檔:有助于為使用該函數的其他開發者提供明確的信息,減少誤解和錯誤使用。
  3. 輔助靜態類型檢查工具:雖然 Python 本身不強制檢查,但結合一些第三方的靜態類型檢查? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 工具(如 mypy),可以在一定程度上進行類型檢查,提前發現潛在? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 的類型錯誤。

【C++】

????????在C++中,函數的返回值類型是必須標注的,靜態類型語言必須保證接收函數返回值的時候數據類型是匹配的

2.?Python函數返回多個值

????????返回的是一個元組對象,在語法上,返回一個tuple可以省略括號,而多個變量可以同時接收一個tuple,按位置賦給對應的值,所以,Python的函數返回多值其實就是返回一個tuple,但寫起來更方便;

????????而C++中返回多個值,可以采用輸出型參數或者是返回一個類對象

def function_name (參數, ...):return a, b ,c

????????如果函數的返回值我們只使用一部分,不關注其他的返回值,可以使用占位符 ‘ _ ’來進行占位

def func():return 1, 2, 3_, _, a = func()
print('a = %d' % a)

3. 空函數

def func():pass

二、Python函數的參數

1. 位置參數:

與C++一致,實參的位置與形參的位置相匹配

2. 缺省參數:

與C++一致,形參有缺省參數,可以不傳參也可以傳參

設置缺省參數的規則:

  • 參數在前,缺省參數在后
  • 當函數有多個參數時,在傳參時把變化大的參數放在前面,變化小的參數放在后面(變化小的參數可以作為缺省參數)
  • 必須指向不可變對象

為什么默認參數在后?

????????當默認參數在前時,我們傳入一個實參,就會發生疑問,這個實參是給缺省參數的?還是給參數的?因為可以一方面通過位置參數來,另一方面可以通過缺省參數來,所以就會產生二義性,為了防止此類事件的發生,規定缺省參數要在參數的后面。

缺省參數的坑:為什么要指向不可變對象?

Python函數缺省參數的 “ 坑 ” (與C++對比學習)-CSDN博客

3. 可變參數:

????????支持傳入任意個參數,函數內部接收到的是一個元組tuple(在返回值和參數這里使用元組主要是保證傳入或輸出的對象的安全性,防止惡意篡改)

使用形式:

def func(*num):s = 0for i in num:s += ireturn sret = func(1, 2, 3, 4, 5, 6, 7, 8)
print(ret)

4. 顯示命名參數

? ? ? ? 按照形參名字傳參,無視位置,一般搭配缺省參數使用

使用形式:

def func(id_num, name='dd', age=20):print('id:', id_num, '\nname:', name, '\nage:', age)func(1, age=18)

5. 關鍵字參數

????????關鍵字參數允許我們傳入任意個含有參數名的參數,這些關鍵字參數會在函數內部自動組裝為一個dict。

使用形式:

def func(name, age, **kw):print('name:', name, '\nage:', age, '\nothers:', kw)func('dd', 20, city='上海', work='程序員')

簡化版本:

????????**dic表示把該字典中的所有key:value用關鍵字參數傳入函數的**kw中,需要注意的是kw獲得的dict是dic的一份拷貝,對kw的改動不會影響函數外的dic

def func(name, age, **kw):print('name:', name, '\nage:', age, '\nothers:', kw)dic = {'city': '上海', 'work': '程序員'}
func('yy', 18, **dic)

6. 命名關鍵字參數

????????只可以傳入命名關鍵字參數后的關鍵字參數

使用形式:

  • 特殊分隔符 * 后面的參數被視為命名關鍵字參數
  • 如果函數定義中有可變參數,后面跟著的命名關鍵字參數就不需要特殊分隔符*
  • 命名關鍵字參數必須傳入參數名
def fun(name, age, *, city, work):print('name:', name, '\nage:', age, '\ncity:', city, '\nwork', work)fun('wyd', 20, city='上海', work='程序員')

7. 各種參數可以組合使用

參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數

三、遞歸函數

????????與C++一致,自己調用自己,但是要防止棧溢出,采用的方法是尾遞歸,保證每次函數調用只占用一個棧幀。

如計算n的階乘:

采用遞歸的方式:

n值過大,則會導致棧空間溢出,因為下面這種是不斷調用遞歸,會不斷的壓棧,從而導致棧空間不足

def fact(n):if n == 1:return nreturn n * fact(n-1)

采用尾遞歸的方式:

????????每次只用一個棧幀,尾遞歸的好處就是最外層的函數調用完自身就會銷毀函數棧幀,從而保證每次只使用一個棧幀,遺憾的是,大多數編程語言沒有針對尾遞歸做優化,Python解釋器也沒有做優化,所以,即使把上面的fact(n)函數改成尾遞歸方式,也會導致棧溢出。

def fact_operator(n, s):if n == 1:return sreturn fact_operator(n - 1, n * s)def fact(n):return fact_operator(n, 1)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40377.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40377.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40377.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

利用Redis bitmap 實現簽到案例

數據庫實現 設計簽到功能對應的數據庫表 CREATE TABLE sign_record (id bigint NOT NULL AUTO_INCREMENT COMMENT 主鍵,user_id bigint NOT NULL COMMENT 用戶id,year year NOT NULL COMMENT 簽到年份,month tinyint NOT NULL COMMENT 簽到月份,date date NOT NULL COMMENT 簽…

EI檢索被認為是工程技術領域的權威數據庫

EI檢索被認為是工程技術領域的權威數據庫,能夠被EI檢索收錄的期刊和會議論文通常被認為具有一定的學術質量和影響力。然而,EI檢索與“高水平”不能完全畫等號,以下是一些需要考慮的因素: 1. 收錄標準:雖然EI檢索有嚴格…

在Linux操作系統中關于邏輯卷的案例

1.如何去創建一個邏輯卷 1.1先去創建物理卷 如上圖所示,physical volume 物理卷 被成功創建。 如上圖所示,可以使用pvscan來去查看當前Linux操作系統的物理卷/ 1.2使用創建好的物理卷去創建一個卷組。 如上圖所示,可以使用第一步創建的兩個…

【中項第三版】系統集成項目管理工程師 | 第 9 章 項目管理概論③ | 9.6 - 9.10

前言 第 9 章對應的內容選擇題和案例分析都會進行考查,這一章節理論性較強,學習要以教材為準。本章分值預計在4-5分。 目錄 9.6 項目管理過程組 9.7 項目管理原則 9.8 項目管理知識領域 9.9 價值交付系統 9.10 本章練習 9.6 項目管理過程組 項目…

千萬不能踏入的渠道管理五大誤區!【附策略】

一、引言 在當今激烈的市場競爭環境中,有效的渠道管理是企業獲得競爭優勢的關鍵。然而,在實踐過程中,不少企業因陷入管理誤區而影響了市場拓展和品牌建設。本文旨在揭示渠道管理中常見的五大誤區,并提供避免策略,幫助…

高級Redis之Stream的用法示例

不想自己搭建一個mq怎么辦?Redis的Stream 來幫你,Redis Stream 是 Redis 5.0 引入的一種新的數據結構,用于處理實時的、可持久化的、基于時間序列的數據流。它非常適合處理事件流、日志、消息隊列等場景。下面是一個使用 Redis Stream 的具體…

web基礎與HTTP協議(企業網站架構部署與優化)

補充:http服務首頁文件在/var/www/html下的,一定是index.html命名的文件。才會顯示出來。 如果該路徑下沒有相應的文件,會顯示/usr/share/httpd/noindex下的index.html文件。 如果/usr/share/httpd/noindex沒有index.html文件,會…

BSI 第七屆萬物互聯智慧高峰論壇:主題:擁抱AI時代,標準賦能組織實現可持續發展

BSI 第七屆萬物互聯智慧高峰論壇:主題:擁抱AI時代,標準賦能組織實現可持續發展 主要收到 BSI 溫女士的邀請參加的本次論壇。還是學到的很多 。 在科技日新月異的時代背景下,BSI 第七屆萬物互聯智慧高峰論壇于[時間:6…

Object 類中的公共方法詳解

Object 類中的公共方法詳解 1、clone() 方法2、equals(Object obj) 方法3、hashCode() 方法4、getClass() 方法5、wait() 方法6、notify() 和 notifyAll() 方法 💖The Begin💖點點關注,收藏不迷路💖 在 Java 中,Object…

AI 驅動的數據中心變革與前景

文章主要探討了AI計算時代數據中心的轉型,涉及計算技術的多樣性、規格尺寸和加速器的發展、大型語言模型(LLM)的發展、功耗和冷卻趨勢、基準測試的重要性以及數據中心的發展等方面。為大家提供深入了解AI基礎設施發展的視角。 計算技術的多樣…

Ubuntu(通用)—網絡加固—ufw+防DNS污染+ARP綁定

1. ufw sudo ufw default deny incoming sudo ufw deny in from any to any # sudo ufw allow from any to any port 5353 protocol udp sudo ufw enable # 啟動開機自啟 # sudo ufw reload 更改后的操作2. 防ARP欺騙 華為云教程 arp -d刪除dns記錄arp -a顯示arp表 ipconfi…

PTrade常見問題系列3

量化允許同時運行回測和交易的策略個數配置。 量化允許同時運行回測和交易的策略個數在哪里查看? 在量化服務器/home/fly/config/custom_config_conf文件中,其中運行回測的策略個數由backtest_switch(是否限制普通回測個數)及ba…

Qt 日志輸出的選擇方案有多少

Qt 日志輸出的選擇方案主要包括以下幾種: 使用內置的日志函數: qDebug():用于輸出調試信息。qInfo():用于輸出一般信息。qWarning():用于輸出警告信息。qCritical():用于輸出關鍵錯誤信息,表明…

詳細設計與概要設計區別-慧哥充電樁開源系統

概要設計更側重于系統的整體構架和模塊劃分,而詳細設計則關注具體模塊的實現細節。在軟件開發過程中,這兩個階段雖然緊密相關,但它們各自有著不同的目標和方法。以下是具體分析: 目標 概要設計:概要設計關注系統整體架…

matlab 繪制高等數學中的二維函數示例

matlab 繪制高等數學中的二維函數示例 繪制高等數學中的二維函數示例繪制結果 繪制高等數學中的二維函數示例 clc,clear,close all; % 定義方程 eqn (x, y) (x.^2 y.^2).^3 - y.^4;% 繪制方程曲線和坐標軸 ezplot(eqn, [-2, 2, -2, 2]) hold on % 在同一圖形中保持繪圖% 繪…

S7-1200PLC學習記錄

文章目錄 前言一、S7-12001.數字量輸入模塊2. PNP接法和NPN接法 二、博圖軟件1. 位邏輯運算Part1. 添加新設備(添加PLC)Part2. 添加信號模塊Part3. 添加信號板中模塊Part4. 添加新塊Part5. Main編程文件案例1案例2 -( S )- 和 -( R )-完整操作過程&#…

昇思25天學習打卡營第8天|ResNet50遷移學習

一、遷移學習定義 遷移學習(Transfer Learning):在一個任務上訓練得到的模型包含的知識可以部分或全部地轉移到另一個任務上。允許模型將從一個任務中學到的知識應用到另一個相關的任務中。適用于數據稀缺的情況,可減少對大量標記…

掌握Linux網絡:深入理解TC —— 你的流量控制利器

目錄 簡單概述: qdisc(隊列): 舉例: Bash 整形隊列算法: FIFO (First-In-First-Out) PFIFO (Priority FIFO) SFQ (Stochastic Fair Queuing) RED (Random Early Detection) HTB (Hierarchical Token Bucket) TBF…

谷粒商城筆記-04-項目微服務架構圖簡介

文章目錄 一,網絡二,網關1,網關選型2,認證鑒權3,動態路由4,限流5,負載均衡6,熔斷降級 三,微服務四,存儲層五,服務治理六,日志系統七&a…

前端面試題3-淺談http協議及常見的面試題

1、淺談http協議 HTTP(Hypertext Transfer Protocol)超文本傳輸協議,是互聯網上應用最為廣泛的一種網絡協議,所有的WWW文件都必須遵守這個標準。它是基于TCP/IP通信協議來傳遞數據(HTML文件、圖片文件、查詢結果等&am…