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

在這里插入圖片描述

四、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/35740.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35740.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35740.shtml

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

相關文章

深拷貝與淺拷貝的理解

深拷貝和淺拷貝是復制對象時的兩種不同方式,它們之間的區別在于它們如何處理對象的引用類型成員。 淺拷貝(Shallow Copy) 淺拷貝是指創建一個新對象,這個新對象是對原對象的字段的一個精確副本。對于字段中的基本數據類型&#…

【C#】找不到屬性集方法。get只讀屬性用了反射設置setValue肯定報錯

歡迎來到《小5講堂》 這是《C#》系列文章,每篇文章將以博主理解的角度展開講解。 溫馨提示:博主能力有限,理解水平有限,若有不對之處望指正! 背景 找不到屬性集方法。get只讀屬性用了反射設置setValue肯定報錯 報錯…

IPFoxy Tips:匿名海外代理IP的使用方法及注意事項

在互聯網上,隱私和安全問題一直備受關注。為了保護個人隱私和數據安全,使用匿名代理IP是一種常用的方法。匿名代理IP可以隱藏用戶的真實IP地址,使用戶在訪問網站時更加隱秘和安全。 本文將介紹匿名代理IP的基本原理和核心功能。 基本原則 匿…

2024期權交易傭金手續費最低是多少?期權交易有哪些成本?

顯性成本 期權交易的顯性成本包含期權交易的傭金和交易所費用,分別支付給券商和交易所,統一由券商代收。 傭金 期權傭金是期權交易時支付給券商的費用,傭金通常以交易金額的一定比例計算,可以是固定費用,也可以是滑…

用兩個鐘,我又在VMWARE上搞了一套內部網配置

最近要學es,所以打算自己用虛擬機搞個NAT,又搞了兩個鐘。為了不再費勁嘗試,也為了造福大眾,所以選擇搞一份NAT筆記!!!! 1.初始化網關和DNS 我們給網關配置一個地址192.168.96.1&…

【多模態】BEiT v2

鏈接:https://arxiv.org/pdf/2208.06366 論文:BEIT V2: Masked Image Modeling with Vector-Quantized Visual Tokenizers Introduction Motivation:Masked image modeling (MIM) 任務在自監督表征學習上取得了不錯的成績,但是現…

教師資格證考試面試報名流程

文章目錄 前言面試報名流程一、登錄官網二、選擇報考省份三、注冊報名賬號四、確認考試承諾五、填報個人信息六、上傳個人照片七、查看個人信息八、面試報名九、等待審核十、考試繳費最后(必看)附錄1. 中小學教師資格考試網2. 廣東省教資考試報名通知&am…

Linux加固-權限管理_chattr之i和a參數

一、參數i i:如果對文件設置了i屬性,不允許對文件進行刪除、改名,也不能添加和修改數據;如果對目錄設置了i屬性,那么只能修改目錄下文件的數據,但不允許建立和刪除文件。(相當于把文件給鎖住了,…

【Mysql】多表、外鍵約束

多表 1.1 多表簡述 實際開發中,一個項目通常需要很多張表才能完成。 例如一個商城項目的數據庫,需要有很多張表:用戶表、分類表、商品表、訂單表… 1.2 單表的缺點 1.2.1 數據準備 創建一個數據庫 db3 CREATE DATABASE db3 CHARACTER SET utf8;數據庫…

Segment any Text:優質文本分割是高質量RAG的必由之路

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

基于qemu_v8 + optee400構建自定義app

構建基于libckteec的tls安全通信應用程序,應用目錄結構 $ tree -L 2 . ├── libp11 │ ├── libp11-libp11-0.4.12 │ ├── mk_optee_three_part.sh │ └── out ├── openssl │ ├── mk_optee_three_part.sh │ ├── openssl-1.1.1w │ …

vue項目中封裝element分頁組件

我們都知道封裝組件是為了方便在項目中使用,全局封裝之后哪個模塊使用直接復制就行了,分頁在后臺項目中用到的地方也是很多的,所以我們就全局封裝一下分頁組件,以后也方便在項目中使用,接下來封裝的這個分頁也是elemen…

clean code-代碼整潔之道 閱讀筆記(第十四章)

第十四章 逐步改進——對一個命令行參數解析程序的案例研究 ps:本章設計代碼示例所以篇幅會較長,推薦直接看原文,思路、代碼講解的很清楚 本章示例:解析命令行參數的工具 —— Args Args的簡單用法 public static void main(Stri…

vue中動態綁定樣式名的方式有幾種?

在Vue中可以使用動態綁定樣式名的方式有幾種,具體取決于你的需求和使用的場景。 使用對象語法: 可以通過在data中定義一個變量,然后在模板中使用對象語法來動態綁定樣式名。 <template><div :class="{ active: isActive }">Hello Vue!</div> &l…

網絡文化經營許可證(文網文)辦理全面講解

隨著互聯網時代的飛速發展&#xff0c;互聯網早已滲透到人們的生活中&#xff0c;各類直播、短視頻成為大家生活娛樂必不可少的一部分。注冊一家從事互聯網行業的企業是一個不錯的選擇。那互聯網企業需要辦理什么證件資質呢&#xff1f;在互聯網行業從事盈利文化活動必須持有網…

【精品方案】智能制造之路(93頁PPT)

引言&#xff1a;智能制造之路&#xff1a;革新制造業的引領之旅 隨著科技的迅猛發展&#xff0c;特別是人工智能、物聯網、大數據等技術的不斷進步&#xff0c;制造業正迎來一場深刻的變革。智能制造&#xff0c;作為這場變革的核心&#xff0c;正逐步成為推動產業升級和轉型發…

MySQL為什么不建議使用多表JOIN

一、典型回答 之所以不建議使用JOIN查詢&#xff0c;最主要的原因就是JOIN的效率比較低。 MySQL是使用了嵌套循環&#xff08;Nested-Loop Join&#xff09;的方式實現關聯查詢的&#xff0c;簡單點說就是要通過兩層循環&#xff0c;用第一張表做外循環&#xff0c;第二張表做內…

大模型課程資料-全網最火29套全棧大模型項目實踐

29套AI全棧大模型項目實戰&#xff0c;人工智能視頻課程-多模態大模型&#xff0c;微調技術訓練營&#xff0c;大模型多場景實戰&#xff0c;AI圖像處理&#xff0c;AI量化投資&#xff0c;OPenCV視覺處理&#xff0c;機器學習&#xff0c;Pytorch深度學習&#xff0c;推薦系統…

【LLM】一分鐘帶你了解Agent工作流四范式

文章目錄 1. 大模型直接生成-generation2. 大模型充當工具使用-tool3. 大模型執行思維鏈-Planning4. 多大模型Agent合作-multiagent collaboration 1. 大模型直接生成-generation 通過提示詞&#xff0c;大模型直接生成想要的結果&#xff1a; 2. 大模型充當工具使用-tool …

無人機在農業方面應用的局限性

無人機在農業方面的應用雖然帶來了許多便利和效率提升&#xff0c;但也存在一些局限性。以下是對這些局限性的清晰歸納和分點表示&#xff1a; 飛行受限&#xff1a; 無人機在飛行過程中受到一定限制&#xff0c;例如在森林、城市等復雜地形或建筑物密集區域&#xff0c;其空間…