函數和模式化——python

一、模塊和包

? ? ? ? 將一段代碼保存為應該擴展名為.py 的文件,該文件就是模塊。Python中的模塊分為三種,分別為:內置模塊、第三方模塊和自定義模塊。

  • 內置模塊和第三方模塊又稱為庫
  • 內置模塊,有 python 解釋器自帶,不用單獨安裝
  • 第三方模塊,需要下載后手動安裝
  • 如果內置模塊和第三方模塊沒有需要的功能,就需要用戶自己編寫程序,將程序保存為.py 文件,即是自定義模塊。

無論哪種模塊都需要使用 import 調用后,才能在程序中調用其中的功能函數。

? ? ? ?

????????將功能近似的、關聯較強的模塊組織起來,形成一個目錄,叫做

python中的包是模塊包,文件名。包括:

  • 一組模塊
  • _init_.py 文件
  • 支持多層嵌套
  • .py 程序文件中可以直接定義一些變量,函數和類
  • 使用時,通過import 導入,如: import math

他們的關系如下:

? ? ? ? 包——>? 模塊 ——> 函數

二、函數

1、函數的定義函數的語法格式如下:? ? ? ?

def 函數名( [ 次數1,參數2,…,參數n?] ):語句塊[ return [ 返回值1,返回值2,…,返回值n] ]

2、函數的定義和調用

(1)def 為python保留字,用于定義函數,函數名的命名規則和變量一致;

(2)括號中是函數的參數,參數可以為空,此時,括號()不能省略,函數參數也可以是多個,多個參數之間有英文逗號隔開;

(3)語句塊是函數體,可以對函數進行調用,完成函數的主要功能;

(4)retrun 是函數的返回保留字,當函數沒有返回值時,return 保留字可以省略,函數有多個返回值時,在return 保留字后面,將多個返回值以英文逗號隔開;

#無返回值時省略return
def greet(name):print(f"Hello, {name}!")
result = greet("Alice")  # 輸出: Hello, Alice!
print(result)            # 輸出: None#單返回值
def add(a, b):return a + b
sum_result = add(3, 5)  # sum_result = 8#多返回值
def calculate(a, b):add = a + bsub = a - breturn add, sub  # 實際返回元組 (add, sub)result = calculate(10, 5)
print(result)        # 輸出: (15, 5)# 解包返回值
sum_result, diff_result = calculate(10, 5)
print(sum_result)    # 輸出: 15
print(diff_result)   # 輸出: 5

這里的解包返回值,大家不懂的話不要害怕,我在最后做了補充。

(5)函數的類型和函數的返回值類型相同,當返回值是多個時,函數的返回值是元組類型。

  • 單返回值類型:若函數返回單個值(如?int),則直接標注為對應類型。
def get_number() -> int:return 42
  • 多返回值類型:若函數返回多個值(如?a, b),Python 會將其轉換為元組。此時返回值類型應標注為?tuple[類型1, 類型2, ...]
def calculate(a: int, b: int) -> tuple[int, int]:return a + b, a - b  # 實際返回 (int, int) 類型的元組

三、函數的參數

1、形參與實參

  • 函數定義時,圓括號內參數列表的參數,不代表具體的數據,稱為形參;
  • 函數調用時,將具體的數據傳遞給形式參數,此時的參數稱為實參
  • 根據參數的不同數據類型,將實參的值或者引用傳遞給形參
  • 當參數類型為不可變數據類型時,在函數內部直接修改形參的值不會影響實參;
  • 但當參數類型為可變數據類型時,在函數內部使用下標或其他方式為其增加、刪除元素或修改元素值時,修改后的結果是可以傳遞到函數之外的,即實參也會得到相應的修改。

2、必備參數、默認參數、可變參數和關鍵字參數

  • 函數調用時,必須傳遞的參數,稱為必備參數,也稱必選參數
  • 函數定義時,設置了默認值的參數函數調用時,可以傳遞實參,也可以不傳遞參數,不傳遞時,參數取定義時的默認值,這種參數,稱為默認參數,也稱可選參數
  • 需要注意的是,必備參數必須在前面定義,其他參數在后面定義。

3、參數傳遞

  • 在函數調用參數傳遞時,按位置形參和實參一一對應傳遞稱為位置傳遞
  • 在函數調用參數傳遞時,按照參數的名稱顯式的傳遞,稱為名稱傳遞

????????按位置傳遞,不需要給出參數的名稱,但形參和實參的位置相同、類型相同,否則容易出錯;按名稱顯式的傳遞參數,則不關心參數的前后順序,在參數較多時,不容易混淆。

4、全局變量與局部變量

  • 在函數外部定義的變量,稱為全局變量;在函數內部定義的變量稱為局部變量
  • 全局變量的生命周期是程序的整個運行周期,只有程序被關閉后全局變量才會被銷毀并釋放內存空間,因此,全局變量在整個程序中,都可以使用;
  • 局部變量的生命周期是函數調用時間,函數調用結束返回后,局部變量就銷毀并釋放內存空間,因此局部變量的作用范圍是這個函數內部,即只能在這個函數中使用,在函數的外部是不能使用的。

5、匿名函數

????????當函數一次性使用,函數體語句較少,如只有一個表達式,為了節省內存中變量定義空間就不需要定義函數名,此時,可以定義匿名函數。名函數的語法格式是:
?

????????函數名 =lambda」參數]:返回值

??????????????
????????匿名函數可以有0個或多個參數,但必須有返回值。匿名函數的調用和一般函數的調用相似可以單獨使用,也可以作為表達式的一部分。

常見使用場景

(1)作為參數傳遞(如?sorted,?map,?filter

# 按字符串長度排序列表
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)  # 輸出 ['date', 'apple', 'banana', 'cherry']# 過濾偶數
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 輸出 [2, 4]# 對每個元素平方
squared = list(map(lambda x: x**2, numbers))
print(squared)       # 輸出 [1, 4, 9, 16, 25]

?filter()函數在前面提過,過濾出滿足條件的函數。

(2)快速定義簡單邏輯

# 判斷是否為偶數
is_even = lambda x: x % 2 == 0
print(is_even(4))  # True# 拼接字符串
greet = lambda name: f"Hello, {name}!"
print(greet("Alice"))  # Hello, Alice!

(3)結合條件表達式

# 返回兩數中的較大值
max_value = lambda a, b: a if a > b else b
print(max_value(5, 8))  # 8

四、補充:

解包返回值:

?????????Python 中一種便捷的語法,用于將函數返回的多個值(通常是元組、列表等可迭代對象)直接拆分并賦值給多個變量。它的核心目的是讓代碼更簡潔、可讀性更強。

【例】假設有一個函數返回兩個值:

?def get_coordinates():x = 3y = 4return x, y  # 實際返回的是元組 (3, 4)?
不解包的情況

直接獲取返回值時,會得到一個元組:

coords = get_coordinates()
print(coords)        # 輸出 (3, 4)
print(coords[0])     # 輸出 3(通過索引訪問)
print(coords[1])     # 輸出 4
解包的情況

將元組中的值直接拆分為兩個變量:

x, y = get_coordinates()  # 解包賦值
print(x)  # 輸出 3
print(y)  # 輸出 4

解包具有靈活性:

(1)適用于任意可迭代對象

????????不僅是元組,列表、字符串等可迭代對象也可以解包:

def get_data():return ["Alice", 25, "Engineer"]name, age, job = get_data()  # 解包列表
print(name)  # Alice

(2)忽略不需要的值

????????用下劃線?_?占位忽略不需要的返回值:

x, _ = get_coordinates()  # 只要 x,忽略 y
print(x)  # 3

(3)解包嵌套結構

????????甚至可以解包嵌套的返回值(如元組中的元組):

def nested_data():return (1, (2, 3))a, (b, c) = nested_data()
print(a, b, c)  # 1 2 3

(4)使用?*?處理剩余值

用?* 變量名?接收剩余的所有值(返回列表):

def multiple_values():return 1, 2, 3, 4, 5first, *middle, last = multiple_values()
print(first)   # 1
print(middle)  # [2, 3, 4](中間的數值被封裝為列表)
print(last)    # 5

注意事項:

(1)變量數量必須匹配

????????左側變量數必須與返回值數量一致,否則會報錯:

x, y, z = get_coordinates()  # 錯誤!元組只有 2 個值,但嘗試解包給 3 個變量

(2)返回值必須是可迭代對象

????????如果函數返回單個值(非元組/列表等),嘗試解包會報錯:

def single_value():return 5a, b = single_value()  # 錯誤!單個整數無法解包

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

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

相關文章

windows下載安裝遠程桌面工具RealVNC-Server教程(RealVNC_E4_6_1版帶注冊碼)

文章目錄 前言一、下載安裝包二、安裝步驟三、使用VNC-Viewer客戶端遠程連接,輸入ip地址,密碼完成連接 前言 在現代工作和生活中,遠程控制軟件為我們帶來了極大的便利。RealVNC - Server 是一款功能強大的遠程控制服務器軟件,通過…

Android Dagger 2 框架的注解模塊深入剖析 (一)

本人掘金號,歡迎點擊關注:https://juejin.cn/user/4406498335701950 一、引言 在 Android 開發中,依賴注入(Dependency Injection,簡稱 DI)是一種強大的設計模式,它能夠有效降低代碼的耦合度&…

HTML語言的空值合并

HTML語言的空值合并 引言 在現代Web開發中,HTML(超文本標記語言)是構建網頁的基礎語言。隨著前端技術的快速發展,開發者們面臨著大量不同的工具和技術,尤其是在數據處理和用戶交互方面。空值合并是一些編程語言中常用…

【數據結構】樹的介紹

目錄 一、樹1.1什么是樹?1.2 樹的概念與結構1.3樹的相關術語1.4 樹形結構實際運用場景 二、二叉樹2.1 概念與結構2.2 特殊的二叉樹2.2.1 滿二叉樹2.2.2 完全二叉樹 個人主頁,點擊這里~ 數據結構專欄,點擊這里~ 一、樹 1.1什么是樹&#xff1…

Muduo網絡庫實現 [十三] - HttpRequest模塊

目錄 設計思路 成員設計 模塊實現 設計思路 首先我們要先知道HTTP的請求的流程是什么樣子的,不然我們會學的很迷糊。對于HTTP請求如何到來以及去往哪里,我們應該很清楚的知道 HTTP請求在服務器系統中的傳遞流程是一個多層次的過程: 客戶端發起請求…

6. RabbitMQ 死信隊列的詳細操作編寫

6. RabbitMQ 死信隊列的詳細操作編寫 文章目錄 6. RabbitMQ 死信隊列的詳細操作編寫1. 死信的概念2. 消息 TTL 過期(觸發死信隊列)3. 隊列超過隊列的最大長度(觸發死信隊列)4. 消息被拒(觸發死信隊列)5. 最后: 1. 死信的概念 先從概念上解釋上搞清楚這個定義&#…

如何使用Selenium進行自動化測試?

🍅 點擊文末小卡片 ,免費獲取軟件測試全套資料,資料在手,漲薪更快 對于很多剛入門的測試新手來說,大家都將自動化測試作為自己職業發展的一個主要階段。可是,在成為一名合格的自動化測試工程師之前&#…

洛谷題單3-P5724 【深基4.習5】求極差 最大跨度值 最大值和最小值的差-python-流程圖重構

題目描述 給出 n n n 和 n n n 個整數 a i a_i ai?,求這 n n n 個整數中的極差是什么。極差的意思是一組數中的最大值減去最小值的差。 輸入格式 第一行輸入一個正整數 n n n,表示整數個數。 第二行輸入 n n n 個整數 a 1 , a 2 … a n a_1,…

STM32智能手表——任務線程部分

RTOS和LVGL我沒學過,但是應該能硬啃這個項目例程 ├─Application/User/Tasks # 用于存放任務線程的函數 │ ├─user_TaskInit.c # 初始化任務 │ ├─user_HardwareInitTask.c # 硬件初始化任務 │ ├─user_RunModeTasks.c…

ubuntu22.04LTS設置中文輸入法

打開搜狗網址直接下載軟件,軟件下載完成后,會彈出安裝教程說明書。 網址:搜狗輸入法linux-首頁搜狗輸入法for linux—支持全拼、簡拼、模糊音、云輸入、皮膚、中英混輸https://shurufa.sogou.com/linux

SQL Server數據庫異常-[SqlException (0x80131904): 執行超時已過期] 操作超時問題及數據庫日志已滿的解決方案

🧑 博主簡介:CSDN博客專家、CSDN平臺優質創作者,獲得2024年博客之星榮譽證書,高級開發工程師,數學專業,擁有高級工程師證書;擅長C/C、C#等開發語言,熟悉Java常用開發技術&#xff0c…

php8 ?-> nullsafe 操作符 使用教程

簡介 PHP 8 引入了 ?->(Nullsafe 操作符),用于簡化 null 檢查,減少繁瑣的 if 語句或 isset() 代碼,提高可讀性。 ?-> Nullsafe 操作符的作用 在 PHP 7 及以下,訪問對象的屬性或方法時&#xff0…

WORD+VISIO輸出PDF圖片提高清晰度的方法

WORDVISIO輸出PDF圖片提高清晰度的方法 part 1: visio 繪圖part 2: word 導出 part 1: visio 繪圖 先在visio中把圖片和對應的文字調整為適合插入到文章中的尺寸; 在visio中把所有元素進行組合; 把組合后的圖片長和寬等比例放縮,如放大10倍…

重要頭文件下的函數

1、<cctype> #include<cctype>加入這個頭文件就可以調用以下函數&#xff1a; 1、isalpha(x) 判斷x是否為字母 isalpha 2、isdigit(x) 判斷x是否為數字 isdigit 3、islower(x) 判斷x是否為小寫字母 islower 4、isupper(x) 判斷x是否為大寫字母 isupper 5、isa…

基于大模型預測不穩定性心絞痛的多維度研究與應用

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的 1.3 國內外研究現狀 二、不穩定性心絞痛概述 2.1 定義與分類 2.2 發病機制 2.3 臨床表現 三、大模型技術原理與應用基礎 3.1 大模型介紹 3.2 在醫療領域的應用現狀 3.3 用于不穩定性心絞痛預測的可行性 四、術前預…

第一講—函數的極限與連續(一)

思維導圖 筆記 雙曲正弦函數及其反函數

Mac VM 卸載 win10 安裝win7系統

卸載 找到相應直接刪除&#xff08;移動到廢紙簍&#xff09; 可參考&#xff1a;mac如何卸載虛擬機win 下載 win7下載地址

免費送源碼:Java+SSM+Android Studio 基于Android Studio游戲搜索app的設計與實現 計算機畢業設計原創定制

摘要 本文旨在探討基于SSM框架和Android Studio的游戲搜索App的設計與實現。首先&#xff0c;我們詳細介紹了SSM框架&#xff0c;這是一種經典的Java Web開發框架&#xff0c;由Spring、SpringMVC和MyBatis三個開源項目整合而成&#xff0c;為開發企業級應用提供了高效、靈活、…

網絡安全的現狀與防護措施

隨著數字化和信息化的迅猛發展&#xff0c;互聯網已成為人們日常生活、工作和學習不可或缺的一部分。然而&#xff0c;隨著網絡技術的普及&#xff0c;網絡安全問題也日益突出。近年來&#xff0c;數據泄露、惡意軟件、網絡攻擊等事件層出不窮&#xff0c;給企業和個人帶來了巨…

android databinding使用教程

Android DataBinding 是一種可以將 UI 組件與數據源綁定的框架&#xff0c;能夠減少 findViewById 的使用&#xff0c;并提高代碼的可維護性。下面是 DataBinding 的完整使用教程&#xff1a; 1. 啟用 DataBinding 在 build.gradle&#xff08;Module 級別&#xff09;中啟用 …