生命在于學習——Python人工智能原理(2.4.2)

在這里插入圖片描述

四、Python的程序結構與函數

4.4 函數

函數能將代碼劃分為若干模塊,每一個模塊可以相對獨立的實現某一個功能,函數有兩個主要功能,分別是降低編程難度和實現代碼復用,函數是一種功能抽象,復用它可以將一個復雜的大問題分解為一系列簡單的小問題,小問題再分解成更小的問題,是一種分而治之的思想運用。

4.4.1 函數定義

函數的定義即函數功能的實現過程,包含函數頭與函數體兩部分。使用def關鍵字定義函數,后跟函數名、參數和冒號。函數體縮進。
語法格式如下:

def 函數名(參數1,參數2):函數體return 返回值列表
其中,關鍵要點包括:
def:關鍵字,標志著函數的開始。
函數名:函數的唯一標識。
參數:參數列表中的參數是形式參數,形參只在函數體中有效。
形文檔字符串:在函數體開始的第一個語句通常是一個字符串,用于描述函數的作用、參數、返回值等信息。
冒號:用于標記函數體的開始。
函數體:函數體包含了實現函數功能的代碼塊,由一行或多行代碼組成。
返回值:標志函數的結束,將返回值賦給函數的調用者,可選的返回一個值,如果沒有return,函數將返回none。

4.4.2 函數調用

函數被定義好之后不會立即執行,只有被程序調用時才會執行。
語法格式:
函數名(實參)
調用時,參數列表中給出實際要傳入函數內部的參數,這類參數稱為實際參數,即實參,實參可以是變量、常量、表達式、函數等。

4.4.3 參數傳遞

Python中函數的參數傳遞是指實參傳遞給形參的過程。python中函數支持以多種方式傳遞參數,包括位置傳遞,關鍵字傳遞,默認值傳遞,包裹傳遞,解包裹傳遞以及混合傳遞。

## 1. 位置傳遞(Positional Arguments)位置傳遞是最基本的參數傳遞方式,參數按照函數定義時的位置順序依次傳遞給函數。**示例:**```python
def greet(first_name, last_name):print(f"Hello, {first_name} {last_name}")greet("John", "Doe")  # Hello, John Doe
markdown2. 關鍵字傳遞(Keyword Arguments)關鍵字傳遞允許調用者明確指定參數的名稱和值,這樣就不必關心參數的順序。示例:def greet(first_name, last_name):print(f"Hello, {first_name} {last_name}")greet(last_name="Doe", first_name="John")  # Hello, John Doe
python3. 默認值傳遞(Default Argument Values)在函數定義時,可以為參數設置默認值。當調用函數時如果沒有傳遞該參數,則使用默認值。示例:def greet(name, greeting="Hello"):print(f"{greeting}, {name}")greet("John")  # Hello, John
greet("Jane", greeting="Hi")  # Hi, Jane
python4. 包裹傳遞(Variable-Length Non-Keyword Arguments, *args)使用星號(*)前綴的參數可以收集所有額外的位置參數,并將它們作為元組傳遞給函數。示例:def sum_all(*numbers):return sum(numbers)print(sum_all(1, 2, 3, 4))  # 10
python5. 解包裹傳遞(Unpacking, * for lists/tuples and ** for dictionaries)解包裹允許將一個列表、元組或字典解包成多個參數。示例:def greet(name, greeting):print(f"{greeting}, {name}")args = ["John", "Hello"]
greet(*args)  # Hello, Johnkwargs = {"name": "Jane", "greeting": "Hi"}
greet(**kwargs)  # Hi, Jane
python6. 可變關鍵字參數傳遞(Variable-Length Keyword Arguments, **kwargs)雙星號(**)前綴的參數可以收集所有額外的關鍵字參數,并將它們作為字典傳遞給函數。示例:def describe_person(name, **details):print(f"{name}:")for key, value in details.items():print(f"  {key}: {value}")describe_person("Alice", age=30, job="Engineer")  # Alice:#   age: 30#   job: Engineer
python7. 混合傳遞函數可以同時接受位置參數、關鍵字參數、默認值參數、可變參數等。示例:def describe_person(name, age, job=None, **details):print(f"{name} is a {age}-year-old {job or 'person'}:")for key, value in details.items():print(f"  {key}: {value}")describe_person("Bob", 25, job="Developer", city="New York", hobby="Coding")
4.4.4 函數返回值(Return Values)

在Python中,函數可以通過return󠁪語句來返回一個或多個值。如果函數沒有顯式地返回任何值,則默認返回None󠁪。返回值可以是任何數據類型,包括基本類型(如整數、字符串)、復雜類型(如列表、字典)甚至是自定義對象。示例:

def add(a, b):return a + bresult = add(3, 4)
print(result)  # 輸出:7def get_user_info(name, age):return {"name": name,"age": age}user = get_user_info("Alice", 30)
print(user)  # 輸出:{'name': 'Alice', 'age': 30}
4.4.5 python函數作用域(Scope)

函數作用域決定了變量的可見性和生命周期。Python中有以下幾種作用域:1. 局部作用域(Local Scope):在函數內部定義的變量僅在該函數內部可見。函數執行完畢后,這些變量會被銷毀。

def my_function():local_var = 5print(local_var)  # 可以訪問local_varmy_function()  # 輸出:5
print(local_var)  # 錯誤:NameError: name 'local_var' is not defined
python1. 全局作用域(Global Scope):在函數外部定義的變量擁有全局作用域,整個文件內都可以訪問,除非在函數內部被重新定義為局部變量。global_var = 10def access_global():print(global_var)access_global()  # 輸出:10def modify_global():global global_var  # 使用global關鍵字聲明使用全局變量global_var = 20modify_global()
print(global_var)  # 輸出:20
python1. 內置作用域(Built-in Scope):包含Python內置的名稱(如len󠁪, range󠁪, str󠁪等),這些名稱在任何地方都可以直接訪問。2. 非局部作用域(Non-local Scope/Enclosing Scope):當一個函數嵌套在另一個函數內時,外層函數內的變量對內層函數而言是非局部變量。使用nonlocal󠁪關鍵字可以在內層函數中修改外層函數的變量。def outer():enclosed_var = 100def inner():nonlocal enclosed_varenclosed_var = 200print(enclosed_var)inner()print(enclosed_var)  # 輸出也會是200,因為inner函數修改了enclosed_varouter()

python理解函數作用域對于編寫清晰、可維護的代碼至關重要,它幫助我們控制變量的可見范圍,避免命名沖突。

4.5 匿名函數(Lambda Functions)

匿名函數,通常被稱為lambda函數,在Python中是一種簡潔的方式用于定義小型、一次性使用的函數。這種函數不需要使用def󠁪關鍵字來定義,而是使用lambda󠁪關鍵字。lambda函數的主要用途是在需要小函數的地方,特別是在作為參數傳遞給高階函數時,如map()󠁪, filter()󠁪, sorted()󠁪等。

語法:lambda arguments: expression
python示例:# 使用lambda函數進行平方計算
square = lambda x: x ** 2
print(square(5))  # 輸出:25

使用lambda函數對列表進行排序

students = [("Alice", 28), ("Bob", 22), ("Charlie", 30)]
students.sort(key=lambda student: student[1])
print(students)  # 輸出:[('Bob', 22), ('Alice', 28), ('Charlie', 30)]

4.6 模塊化編程

模塊化編程是一種將程序分解成獨立部分的方法,每個部分負責特定的功能。在Python中,模塊就是包含Python定義和語句的文件。通過將代碼組織成模塊,可以提高代碼的可讀性、可重用性和可維護性。

創建模塊: 創建一個.py󠁪文件即為創建一個模塊,例如math_operations.py󠁪。模塊內容示例:# math_operations.py
def add(a, b):return a + bdef subtract(a, b):return a - b
python導入模塊: 使用import󠁪語句可以導入模塊,然后調用其中的函數。導入示例:import math_operationsresult = math_operations.add(5, 3)
print(result)  # 輸出:8result = math_operations.subtract(10, 4)
print(result)  # 輸出:6
python從模塊導入特定函數: 使用from ... import ...󠁪語句可以直接導入模塊中的特定函數,而無需每次調用時都加上模塊名前綴。導入特定函數示例:from math_operations import add, subtractresult = add(7, 2)
print(result)  # 輸出:9result = subtract(15, 5)
print(result)  # 輸出:10
python使用as關鍵字給模塊或函數起別名: 可以使用as󠁪關鍵字給導入的模塊或函數起別名,簡化調用過程。別名示例:import math_operations as moresult = mo.add(8, 2)
print(result)  # 輸出:10from math_operations import add as a, subtract as sresult = a(9, 3)
print(result)  # 輸出:12result = s(18, 8)
print(result)  # 輸出:10

python模塊化編程是Python編程中的一項重要技能,它有助于保持代碼的整潔和高效,同時也便于團隊協作和代碼復用。

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

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

相關文章

使用函數open()的例子

代碼&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> int main(void) {int fd-1;char filename[]"test.txt";fdopen(filename,O_RDWR);if(-1fd){printf("Open file %s failure!,fd…

PyCharm左側項目區域出現淡黃色背景如何解決

PyCharm左側項目區域出現淡黃色背景如何解決 解決方法&#xff1a; 1、打開pycharm 文件 - > Setting-> 項目 -> 項目結構 2、添加內容根 為 你的項目根目錄即可恢復

Linux 相對路徑轉化為絕對路徑 C語言 (realpath函數)

功能簡述&#xff1a; 將路徑轉為絕對路徑。函數原型&#xff1a; char * realpath (const char *restrict name, char *restrict resolved) ○ name&#xff1a;原始路徑。 ○ resolved&#xff1a;存放規范化路徑的地址。可以為 null。 ○ 返回值&#xff1a;正常情況和resol…

什么是港股通?港股通碎股如何進行交易傭金最低萬0.8?

港股通是一種投資渠道&#xff0c;它允許符合條件的內地投資者通過內地的證券賬戶&#xff0c;間接地買賣在香港聯合交易所上市的股票。這一機制是滬港通和深港通計劃的一部分&#xff0c;旨在促進內地與香港資本市場的互聯互通。 ### 港股通的特點包括&#xff1a; - 交易范…

無痛接入FastText算法進行文本分類(附代碼)

AI應用開發相關目錄 本專欄包括AI應用開發相關內容分享&#xff0c;包括不限于AI算法部署實施細節、AI應用后端分析服務相關概念及開發技巧、AI應用后端應用服務相關概念及開發技巧、AI應用前端實現路徑及開發技巧 適用于具備一定算法及Python使用基礎的人群 AI應用開發流程概…

API-其他事件

學習目標&#xff1a; 掌握其他事件 學習內容&#xff1a; 頁面加載事件元素滾動事件頁面尺寸事件 頁面加載事件&#xff1a; 加載外部資源&#xff08;如圖片、外聯CSS和JavaScript等&#xff09;加載完畢時觸發的事件。 為什么要學&#xff1f;&#xff1f; 有些時候需要等…

OnlyOffice:為現代工作方式而生的辦公套件

ONLYOFFICE官網鏈接&#xff1a;https://www.onlyoffice.com/zh/office-suite.aspx https://www.onlyoffice.com/zh/pdf-editor.aspx OnlyOffice 是一款開源的辦公套件&#xff0c;它提供了一系列的辦公工具&#xff0c;包括文檔編輯器、表格編輯器和演示文稿編輯器。這些工具…

帶你了解現行數據庫的高級特性和新方法

數據庫的高級特性和新方法 數據庫的高級操作數據庫事務用戶權限控制數據的備份與還原Binlog運行日志數據庫的新特性窗口函數的使用 閱讀指南&#xff1a; 本文探討了數據庫的高級特性和新方法&#xff0c;詳細介紹了這些高級特性及其操作方式&#xff0c;并涵蓋了一些最新的操作…

客戶案例|某 SaaS 企業租戶敏感數據保護實踐

近年來&#xff0c;隨著云計算技術的快速發展&#xff0c;軟件即服務&#xff08;SaaS&#xff09;在各行業的應用逐漸增多&#xff0c;SaaS 應用給企業數字化發展帶來了便捷性、成本效益與可訪問性&#xff0c;同時也帶來了一系列數據安全風險。作為 SaaS 產品運營服務商&…

韓國鋰電池工廠火災:行業安全警鐘再次敲響

三天前&#xff0c;6月24日上午&#xff0c;韓國京畿道華城市一電池廠突發火災&#xff0c;造成嚴重人員傷亡&#xff0c;其中包括多名中國籍員工。這一事件不僅令人痛心&#xff0c;更為全球鋰電池行業安全敲響了警鐘。 事發當天&#xff0c;電池廠內堆放鋰電池成品的區域突然…

TypeError: %c requires int or char

踩坑&#xff1a;在用python寫腳本查詢sql數據時&#xff0c;使用%s來替換sql語句里的變量&#xff0c;結果一直報&#xff0c;而其他sql使用同樣的方法正常&#xff0c;最后發現是因為sql語句里有模糊查詢 like "%測試%"&#xff0c;這里的%被誤以為%s&#xff0c;解…

Mendix 創客訪談錄|Mendix開發制造業客戶復雜應用的強大實力

本期創客 鄭立 Eviden中國低代碼服務團隊負責人 大家好&#xff0c;我是鄭立&#xff0c;目前擔任Eviden中國低代碼服務團隊的負責人&#xff0c;Mendix是Eviden中國在低代碼領域的最重要的合作伙伴&#xff0c;目前我們在多個制造業客戶中推廣和實施Mendix低代碼項目&#xff…

[MQTT]Mosquitto的權限管理_使用者/密碼(pwfile)和訪問控制清單(aclfile)

延續Mosquitto的內網連接(intranet)和使用者/密碼權限設置文章&#xff0c;經解讀mosquitto官網文檔&#xff0c;在權限管理部分&#xff0c;除了設置使用者/密碼(pwfile)之外&#xff0c;還有訪問控制清單(Access Control List, aclfile)可以設置。經過測試&#xff0c;同時設…

Linux 中變量的取用與設定

優質博文&#xff1a;IT-BLOG-CN Linux是一個多人多任務的環境&#xff0c;每個人登錄系統都能取得一個bash shell&#xff0c;每個人都能夠使用bash下達mail這個指令來接收自己的郵箱等等。問題是&#xff0c;bash如何得知你的郵箱是那個文件&#xff1f;這就需要『變量』的幫…

【ubuntu noble】docker 容器無法使用 nvidia gpu

運行ai模型的時候提示 no GPU available 執行 nvidia-smi 提示 Failed to initialize NVML: Unknown Error 解決方案 一. 宿主機執行sudo docker info&#xff0c;確保 runtime 字段中有 nvidia 字樣 Runtimes: nvidia runc io.containerd.runc.v2 Default Runtime: runc 注…

從0開始學習pyspark--pyspark的核心概念[第0節]

在學習 PySpark時會遇到很多新的關鍵詞,理解這些概念,對我們學習PySpark有極大的幫助,以下是一些PySpark的關鍵概念及其詳細解釋&#xff1a; 1. PySpark PySpark是Apache Spark的Python API。Spark是一個用于大規模數據處理的開源分布式計算系統&#xff0c;支持內存計算和基…

基于Java的寵物領養管理系統【附源碼】

摘 要 近些年來&#xff0c;隨著科技的飛速發展&#xff0c;互聯網的普及逐漸延伸到各行各業中&#xff0c;給人們生活帶來了十分的便利&#xff0c;寵物管理系統利用計算機網絡實現信息化管理&#xff0c;使整個寵物領養的發展和服務水平有顯著提升。 本文擬采用IDEA開發工具…

《分析模式》漫談07-怎樣把一張圖從不嚴謹改到嚴謹

DDD領域驅動設計批評文集 做強化自測題獲得“軟件方法建模師”稱號 《軟件方法》各章合集 下圖是《分析模式》原書第2章的圖2.10&#xff0c;里面有一些錯誤和考慮不周的地方&#xff1a; 2004中譯本和2020中譯本的翻譯如下&#xff1a; 基本上都是照搬&#xff0c;沒有改過…

【02-02】SpringMVC基于注解的應用

一、請求處理 1、常用注解 RequestMapping 作用&#xff1a;用來匹配客戶端發送的請求&#xff08;用來處理URL映射&#xff0c;將請求映射到處理方法中&#xff09;&#xff0c;可以在類或者方法上使用。 用在類上&#xff0c;可以將請求模塊化&#xff0c;避免請求方法中的…

【Java Web】三大域對象

目錄 一、域對象概述 二、三大域對象 三、域對象使用相關API 一、域對象概述 一些可用于存儲數據和傳遞數據的對象被稱為域對象&#xff0c;根據傳遞數據范圍的不同&#xff0c;我們稱之為不同的域&#xff0c;不同的域對象代表不同的域&#xff0c;共享數據的范圍也不同。 二、…