pyhton基礎【15】函數進階一

目錄

一. 函數進階

1. 默認參數:?

2. 關鍵字參數:?

3. 可變參數:?

4. 裝飾器:?

5. 匿名函數lambda:

6. 高階函數:

7. 遞歸函數:?

8. 類型注解:?

二.函數參數的高級使用

缺省參數

命名參數

不定長參數

三.返回值拆包


一. 函數進階

Python函數的進階使用包含多個重要的知識點,這些知識點可以幫助開發人員編寫更為高效、靈活且強大的代碼。以下是一些關鍵的進階概念:

1. 默認參數:?
  • 函數可以定義默認參數,讓函數調用時某些參數可選。這提高了函數的可用性和靈活性。
  • 默認參數值通過在函數定義時賦值給參數實現。
2. 關鍵字參數:?
  • 函數調用時可以通過鍵=值的形式指定參數,這樣參數的順序就不重要了。
  • 關鍵字參數增加了代碼的可讀性。
3. 可變參數:?
  • 使用星號*args允許函數接受任意數量的位置參數。
  • 使用雙星號**kwargs允許函數接受任意數量的關鍵字參數。
  • ?這使得函數能夠處理不確定數量的輸入參數。
4. 裝飾器:?
  • 裝飾器是一種特殊的函數,用于修改另一個函數的行為,而不需要改動其代碼。
  • 通過在函數之前添加@decorator_name來應用裝飾器。
  • 常用于日志記錄、性能測試、事務處理等場景。
5. 匿名函數lambda:
  • 通過lambda關鍵字創建匿名函數,通常用于短小的函數定義。
  • lambda函數可以接受任意數量的參數,但僅能有一個表達式。
  • ?一般與高階函數(如filter、map、reduce)一同使用。
6. 高階函數:
  • 高階函數是將函數作為參數或返回值的函數。
  • 常見的高階函數包括map(), filter(), reduce()等。
  • 這些函數通常用于數據處理和函數式編程。
7. 遞歸函數:?
  • 函數可以調用自身,這稱為遞歸。
  • 遞歸通常用于解決可以分解為相同問題的小規模問題的場景,如遍歷目錄、解析嵌套數據等。
  • 需要謹慎使用遞歸以避免無限遞歸和棧溢出的問題。
8. 類型注解:?
  • 從Python 3.5開始,可以通過類型注解來指定函數的參數和返回值類型。
  • 類型注解不影響Python的動態類型特性,主要用于代碼提示和靜態類型檢查。

這些進階知識點幫助開發者更好地理解和利用Python中的函數,從而編寫出更加簡潔、高效和健壯的代碼。了解并掌握這些概念對于成為高級Python程序員至關重要

二.函數參數的高級使用
缺省參數

引入

缺省參數也叫做默認參數,是指定義函數時形參變量有默認值,如果調用函數時沒有傳遞參數,那么函數就用默認值,如果傳遞了參數就用傳遞的那個數據。

示例:

def print_info(name, age=35):print(f'name: {name}')print(f'age: {age}')print_info('小明')
print_info('小明', 18)

缺省參數的作用

當調用函數時,有些參數不必傳遞,而是用默認值,這樣的場景往往都用缺省參數

例如,一個學校現在開始檢查每個學生的信息,學生說:報告老師我是xxx學校xxx系xxx年級xxx班學生,名字叫xxxx,大家想只要是這學校的學生那么xxx學校就可以省略不用說了,因為大家都知道。所以就可以認為默認的學校就是xxx,而當其他學校的學生介紹時yyy學校名字案例說就一定要說清楚,否則會讓人混淆。

示例:

def print_info(name, class_name, grade, department_name, school_name="清華大學"):print("老師好:我是來自 %s(大學) %s系 %s年級 %s班級 的學生,我叫%s" % (school_name,department_name,grade,class_name,name))print_info("小明", "爬蟲", "二", "軟件工程")
print_info("小明", "爬蟲", "二", "軟件工程", "北京大學")

注意點

  • 缺省參數只能在形參的最后(即最后側)
  • 缺省參數全挨在一起(在右側),不是缺省參數挨在一起(在左側)
>>> def printinfo(name, age=35, sex):
...     print(name)
...
File "<stdin>", line 1
SyntaxError: non-default argument follows default argument
命名參數

引入

命名參數是指:在調用函數時,傳遞的實參帶有名字,這樣的參數叫做命名參數

示例:

def test(a, b):print('-----')print(f'a={a}')print(f'b={b}')test(11, 22)
test(a=11, b=22)
test(a=22, b=11)  # 根據名稱將值傳入到指定的變量中

命名參數的作用

命名參數能夠在調用函數的時候,不受位置的影響,可以給需要的參數指定傳遞數據

注意點

  • 命名參數的名字要與形參中的名字相同,不能出現命名參數名字叫做num,而形參中沒有變量num
  • 如果形參左側有普通的形參,調用函數時傳遞的參數一定要先滿足這些形參,然后再根據需要編寫命名參數
def test(a, b, c=100, d=200):print("a=%d, b=%d, c=%d, d=%d" % (a, b, c, d))# 下面的方式都成功
test(11, 22)
test(11, 22, 33)
test(11, 22, 33, 44)
test(11, 22, d=33, c=44)# 下面的方式都失敗
test(c=1, d=2)  # 缺少a、b的值
test(c=1, d=2, 11, 22)  # 11, 22應該在左側
不定長參數

引入

不定長參數:定義函數的時候形參不確定到底有多少個,這樣的參數就叫做不定長參數

不定長參數有兩種方式表示:

  • *args :表示調用函數時多余的未命名參數都會以元組的方式存儲到args中
  • **kwargs:表示調用函數時多余的命名參數都會以鍵值對的方式存儲到kwargs中

注意:

  • *和**是必須要寫的,否則就變成了普通的形參了
  • 當我們說不定長參數的時候,就是指*args和**kwargs

示例:

def test(a, b, *args, **kwargs):print(a, type(a))print(b, type(b))print(args, type(args))print(kwargs, type(kwargs))test(11, 22, 33, 44, 55, 66, name='小明', address='蘭州')

不定長參數的作用

通過不定長參數,能夠實現調用函數時傳遞實參個數可以隨意變換的需求

注意點

  • 加了星號*的變量args會存放所有未命名的變量參數,args為元組
  • 而加**的變量kwargs會存放命名參數,即形如key=value的參數, kwargs為字典
  • 一般情況下*args、**kwargs會在形參的最右側
  • args與kwargs的名字可以變,例如叫*aa,**bb都是可以,但一般為了能夠讓其他的開發者快速讀懂我們的代碼最好還是不改

特殊情況

缺省參數在*args的后面

def sum_nums_3(a, *args, b=22, c=33, **kwargs):print(a)print(b)print(c)print(args)print(kwargs)sum_nums_3(100, 200, 300, 400, 500, 600, 700, b=1, c=2, mm=800, nn=900)輸出結果:100
1
2
(200, 300, 400, 500, 600, 700)
{'mm': 800, 'nn': 900}

說明:

  • *args后可以有缺省參數,想要給這些缺省參數在調用時傳遞參數,需要用命名參數傳遞,否則多余的未命名參數都會給args
  • 如果有**kwargs的話,**kwargs必須是最后的
三.返回值拆包

返回值拆包概述

函數返回值拆包:如果一個函數通過return返回了一個元組、列表、集合,可以通過拆包的方式將返回值進行拆分到每個變量中,這就是返回值拆包。

示例:

def test():return 11, 22, 33a, b, c = test()
print(a, b, c)

返回值拆包的作用

通過函數返回值拆包,可以快速的將具體的數據用變量進行存儲,這樣對數據的處理會更加方便

示例:

def test():return 11, 22, 33# 通過返回值拆包,快速使用每個數據
a, b, c = test()
print(a + b + c)# 沒有通過返回值拆包,這樣用數據時稍微復雜
ret = test()
print(ret[0] + ret[1] + ret[2])

拆包的使用

def get_my_info():high = 178weight = 100age = 18return high, weight, age# result = get_my_info()
# print(result)# 通過返回值拆包,能夠更加方便的對每個數據使用
my_high, my_weight, my_age = get_my_info()
print(my_high)
print(my_weight)
print(my_age)

使用拆包時的注意點

  • 拆包時要注意,需要拆的數據的個數要與變量的個數相同,否則程序會異常

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

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

相關文章

【軟考高級系統架構論文】論企業應用系統的數據持久層架構設計

論文真題 數據持久層 (Data Persistence Layer) 通常位于企業應用系統的業務邏輯層和數據源層之間,為整個項目提供一個高層、統一、安全、并發的數據持久機制,完成對各種數據進行持久化的編程工作,并為系統業務邏輯層提供服務。它能夠使程序員避免手工編寫訪問數據源的方法…

ubuntu使用 Conda 安裝 pyseer詳細教程

pyseer 是一個用于 微生物全基因組關聯分析(GWAS) 的生物信息學工具。它可以幫助研究者識別微生物(如細菌)中與表型(如耐藥性、毒力、致病性)相關的遺傳變異。 一、安裝mamba conda install -n base -c conda-forge mamba二、創建虛擬環境 conda create -n pyseer-env …

Redis04

redis 一、redis的作用和使用場景 redis是一個內存級的高速緩存數據庫。&#xff08;對比磁盤IO&#xff09; 使用場景&#xff1a;1、并發訪問量大的 2、數據量小 3、修改不頻繁 項目中&#xff1a;1、驗證碼 2、登錄成功用戶信息 3、首頁&#xff08;模塊數據 輪播圖&…

計算機網絡學習筆記:TCP可靠傳輸實現、超時重傳時間選擇

文章目錄 一、TCP可靠傳輸實現二、TCP超時重傳時間選擇 一、TCP可靠傳輸實現 TCP可靠傳輸的實現&#xff0c;主要基于發送方和接收方的滑動窗口&#xff0c;以及確認機制&#xff1a; 發送方在未收到確認&#xff08;ACK&#xff09;前&#xff0c;可以將序號落在發送窗口內的…

Perl 正則表達式

Perl 正則表達式 引言 Perl 正則表達式&#xff08;Regular Expressions&#xff09;是Perl編程語言中一個強大且靈活的工具&#xff0c;用于字符串處理和模式匹配。正則表達式在文本處理、數據驗證、搜索和替換等任務中發揮著至關重要的作用。本文將深入探討Perl正則表達式的…

Security: RSA: 1024 bit 長度已經變得不安全了

文章目錄 參考推薦限制RHEL相關配置man crypto-policies包含的應用使用方法是配置文件include參考 https://csrc.nist.gov/pubs/sp/800/57/pt1/r2/final https://www.linuxquestions.org/questions/linux-security-4/1024-bit-dsa-vs-2048-bit-rsa-4175439131/ https://csrc.n…

第一課:大白話中的機器學習

各位看官好啊!今天咱們來聊一個聽起來高大上但實際上特別接地氣的玩意兒——機器學習。別被這名字嚇到,它其實就是教電腦像人類一樣學習知識的一套方法。想象一下你教你家狗子坐下、握手的過程,機器學習差不多就是這么回事,只不過"學生"換成了電腦。 一、啥是機…

實現 el-table 中鍵盤方向鍵導航功能vue2+vue3(類似 Excel)

實現 el-table 中鍵盤方向鍵導航功能vue2vue3&#xff08;類似 Excel&#xff09; 功能需求 在 Element UI 的 el-table 表格中實現以下功能&#xff1a; 使用鍵盤上下左右鍵在可編輯的 el-input/el-select 之間移動焦點焦點移動時自動定位到對應單元格支持光標位置自動調整…

MyBatis:從入門到進階

&#x1f4cc; 摘要 在 Java 后端開發中&#xff0c;MyBatis 是一個非常流行且靈活的持久層框架。它不像 Hibernate 那樣完全封裝 SQL&#xff0c;而是提供了對 SQL 的精細控制能力&#xff0c;同時又具備 ORM&#xff08;對象關系映射&#xff09;的功能。 本文將帶你從 MyB…

leetcode51.N皇后:回溯算法與沖突檢測的核心邏輯

一、題目深度解析與N皇后問題本質 題目描述 n皇后問題研究的是如何將n個皇后放置在nn的棋盤上&#xff0c;并且使皇后彼此之間不能相互攻擊。給定一個整數n&#xff0c;返回所有不同的n皇后問題的解決方案。每一種解法包含一個明確的n皇后問題的棋子放置方案&#xff0c;該方…

算法-每日一題(DAY9)楊輝三角

1.題目鏈接&#xff1a; 118. 楊輝三角 - 力扣&#xff08;LeetCode&#xff09; 2.題目描述&#xff1a; 給定一個非負整數 numRows&#xff0c;生成「楊輝三角」的前 numRows 行。 在「楊輝三角」中&#xff0c;每個數是它左上方和右上方的數的和。 示例 1: 輸入: numRo…

【MATLAB代碼】制導方法介紹與例程——追蹤法,適用于二維平面,目標是移動的|附完整源代碼

追蹤法(追蹤導引法)是一種常見的導彈導引方式,其基本原理是保持導彈的速度矢量始終指向目標。在追蹤法中,導彈的加速度可以表示為指向目標的加速度。 本文給出二維平面下,移動目標的追蹤法導引的介紹、公式與matlab例程 訂閱專欄后,可以直接查看完整源代碼 文章目錄 運行…

小白的進階之路系列之十八----人工智能從初步到精通pytorch綜合運用的講解第十一部分

從零開始的NLP:使用序列到序列網絡和注意力機制進行翻譯 我們將編寫自己的類和函數來預處理數據以完成我們的 NLP 建模任務。 在這個項目中,我們將訓練一個神經網絡將法語翻譯成英語。 [KEY: > input, = target, < output]> il est en train de peindre un table…

SSL安全證書:數字時代的網絡安全基石

SSL安全證書&#xff1a;數字時代的網絡安全基石 在當今數字化浪潮中&#xff0c;網絡通信安全已成為個人、企業和組織不可忽視的核心議題。SSL&#xff08;Secure Sockets Layer&#xff0c;安全套接層&#xff09;安全證書作為保障數據傳輸安全的關鍵技術&#xff0c;通過加…

LLM-201: OpenHands與LLM交互鏈路分析

一、核心交互鏈路架構 #mermaid-svg-ZBqCSQk1PPDkIXNx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-icon{fill:#552222;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-text{fill:#552222;strok…

【項目】仿muduo庫one thread one loop式并發服務器SERVER模塊(下)

&#x1f4da; 博主的專欄 &#x1f427; Linux | &#x1f5a5;? C | &#x1f4ca; 數據結構 | &#x1f4a1;C 算法 | &#x1f152; C 語言 | &#x1f310; 計算機網絡 |&#x1f5c3;? mysql 項目文章&#xff1a; 仿muduo庫one thread one loop式并發服務器…

數據庫索引結構 B 樹、B + 樹與哈希索引在不同數據查詢場景下的適用性分析

一、數據庫索引結構B樹 樹概述 樹是一種多路平衡查找樹&#xff0c;廣泛應用于數據庫和文件系統中。B樹的節點可以存儲多個數據元素&#xff0c;并且保持樹的平衡&#xff0c;以提高查詢效率。 適用性分析 在數據量較大&#xff0c;范圍查找較多的場景下&#xff0c;B樹的查詢效…

Linux進程間通信——信號

1.信號的介紹 信號( Signal )是 Unix, 類Unix以及其他POSIX兼容的操作系統中進程間通信的一種有限制的手段。 1&#xff09;信號是在軟件層面上對中斷機制的一種模擬&#xff0c;是一種異步通信方式。2&#xff09;信號可以直接進行用戶空間進程和內核進程之間的交互&#xff…

Bytemd@Bytemd/react詳解(編輯器實現基礎AST、插件、跨框架)

ByteMD Markdown編輯器詳細解釋&修改編輯器默認樣式&#xff08;高度300px) AST樹詳解 [ByteMD 插件系統詳解(https://blog.csdn.net/m0_55049655/article/details/148811248?spm1001.2014.3001.5501) Sevelet編寫的Bytemd如何適配到React中 ??1?? 背景概述 Byte…

《Redis》事務

文章目錄 Redis中的原子性Redis的事物和MySQL事務的區別Redis實現事務什么場景下&#xff0c;會使用事務? Redis事務相關命令watch命令的實現原理 總結 Redis中的原子性 Redis的原子性不同于MySQL的原子性。 Redis的事物和MySQL事務的區別 但是注意體會Redis的事務和MySQL…