Python快速入門專業版(二十九):函數返回值:多返回值、None與函數嵌套調用

在這里插入圖片描述

目錄

  • 一、多返回值:一次返回多個結果的優雅方式
    • 1. 多返回值的本質:隱式封裝為元組
      • 示例1:返回多個值的函數及接收方式
    • 2. 多返回值的接收技巧
      • 技巧1:用下劃線`_`忽略不需要的返回值
      • 技巧2:用`*`接收剩余值(Python 3.x+)
    • 3. 實戰案例:計算長方形的周長與面積
      • 案例代碼實現
  • 二、無返回值函數與None:表達“無結果”的特殊值
    • 1. None的本質與作用
    • 2. 無return語句的函數:默認返回None
      • 示例2:無返回值函數的返回值
    • 3. 顯式返回None:明確表達“無有效結果”
      • 示例3:顯式返回None表示無效操作
    • 4. 常見誤區:混淆“無返回值”與“返回空值”
      • 示例4:對比None與空值
  • 三、函數嵌套調用:函數間的協作與流程控制
    • 1. 嵌套調用的執行流程
      • 示例5:嵌套調用的執行流程演示
    • 2. 嵌套調用的優勢與適用場景
      • 適用場景:
    • 3. 實戰案例:數據處理流水線
      • 案例代碼實現
  • 四、綜合案例:學生成績分析系統
    • 案例代碼實現
  • 五、總結與提升
    • 進階練習

函數的返回值是函數與外部世界交互的核心渠道——它不僅能將計算結果傳遞給調用者,還能通過特殊值(如None)表達“無結果”或“操作狀態”。在實際開發中,單一返回值往往無法滿足需求,此時多返回值機制、對None的靈活運用,以及函數間的嵌套調用,就成為提升代碼效率和可讀性的關鍵技巧。

本文將系統解析函數返回值的三大進階特性:多返回值的本質與接收方式、None的含義與應用場景、函數嵌套調用的執行流程與優勢,并通過“長方形計算”“數據處理流水線”等案例,展示如何通過返回值設計讓函數協作更高效。

一、多返回值:一次返回多個結果的優雅方式

在很多場景下,函數需要返回多個相關結果。例如:計算長方形的周長和面積、獲取一組數據的最大值和最小值、解析字符串后返回多個提取的字段。Python允許函數通過一個return語句返回多個值,這種機制既簡潔又直觀,但其背后的原理值得深入理解。

1. 多返回值的本質:隱式封裝為元組

Python中函數的“多返回值”并非真正意義上同時返回多個獨立值,而是將多個值隱式封裝為一個元組(tuple)返回。例如return a, b, c等價于return (a, b, c),調用者接收的實際上是一個元組,只是Python允許通過多個變量“解包”這個元組,形成“多返回值”的表象。

示例1:返回多個值的函數及接收方式

def calculate(a, b):"""返回a與b的和、差、積"""sum_ab = a + bdiff_ab = a - bproduct_ab = a * breturn sum_ab, diff_ab, product_ab  # 等價于return (sum_ab, diff_ab, product_ab)# 調用函數,用多個變量接收返回值(自動解包元組)
sum_val, diff_val, product_val = calculate(8, 3)print(f"和:{sum_val}")     # 輸出:11
print(f"差:{diff_val}")    # 輸出:5
print(f"積:{product_val}") # 輸出:24# 用單個變量接收(得到完整元組)
results = calculate(5, 2)
print(f"返回的元組:{results}")  # 輸出:(7, 3, 10)
print(f"元組的第一個元素:{results[0]}")  # 輸出:7

解析

  • 函數calculate通過return sum_ab, diff_ab, product_ab返回三個值,Python自動將它們封裝為元組(sum_ab, diff_ab, product_ab)
  • 調用時,sum_val, diff_val, product_val = ...通過“元組解包”機制,將元組的三個元素分別賦值給三個變量,形成“多返回值”的直觀效果。
  • 若用單個變量接收(如results),則變量直接存儲整個元組,可通過索引訪問其中的元素。

這種設計既保持了語法簡潔,又遵循了“函數只能返回一個值”的底層邏輯,是Python“簡單而不簡陋”的典型體現。

2. 多返回值的接收技巧

接收多返回值時,除了“一一對應”的變量接收方式,還可利用Python的特殊語法處理部分返回值,提高靈活性。

技巧1:用下劃線_忽略不需要的返回值

如果只需要部分返回值,可用下劃線_(常規約定,表示“臨時或無用變量”)忽略其他值:

# 只需要和與積,忽略差
sum_val, _, product_val = calculate(10, 4)
print(f"和:{sum_val},積:{product_val}")  # 輸出:和:14,積:40

技巧2:用*接收剩余值(Python 3.x+)

如果返回值數量不確定,可用*接收剩余值(打包為列表):

def return_multiple():return 1, 2, 3, 4, 5# 接收前兩個值,剩余值用列表接收
first, second, *rest = return_multiple()
print(f"前兩個:{first}, {second}")  # 輸出:前兩個:1, 2
print(f"剩余:{rest}")               # 輸出:剩余:[3, 4, 5]

3. 實戰案例:計算長方形的周長與面積

計算長方形時,通常需要同時獲取周長和面積。用多返回值函數可將這兩個相關結果一次性返回,避免兩次調用函數的冗余。

案例代碼實現

def rectangle_info(length, width):"""計算長方形的周長和面積參數:length (float):長width (float):寬返回:tuple:(周長, 面積)"""if length <= 0 or width <= 0:print("錯誤:長和寬必須為正數")return None  # 無效輸入返回Noneperimeter = 2 * (length + width)  # 周長 = 2×(長+寬)area = length * width             # 面積 = 長×寬return perimeter, area            # 返回兩個值(元組)# 正常輸入:長5,寬3
perimeter, area = rectangle_info(5, 3)
if perimeter is not None:  # 檢查返回值是否有效print(f"長方形(5×3)的周長:{perimeter},面積:{area}")  # 輸出:周長16,面積15# 錯誤輸入:長為負數
result = rectangle_info(-2, 4)
print(f"錯誤輸入的返回值:{result}")  # 輸出:None

解析

  • 函數rectangle_info接收長和寬,先驗證輸入有效性(必須為正數),無效則返回None
  • 有效輸入時,計算周長和面積,通過return perimeter, area返回元組(perimeter, area)
  • 調用時用perimeter, area接收兩個結果,通過if perimeter is not None判斷輸入是否有效,確保后續處理安全。

這種方式將“相關結果打包返回”,既符合邏輯(周長和面積是長方形的固有屬性),又減少了函數調用次數,提升了代碼效率。

二、無返回值函數與None:表達“無結果”的特殊值

并非所有函數都需要返回有意義的結果。例如:打印信息的函數、寫入文件的函數、修改全局變量的函數,它們的主要作用是“執行操作”而非“計算結果”。這類函數在Python中默認返回一個特殊值None,表示“無結果”或“空值”。

1. None的本質與作用

None是Python的一個內置常量,代表“空”“無”或“不存在”。它有以下特性:

  • NoneType類型的唯一實例(type(None) → NoneType)。
  • 與任何值比較(除自身外)都返回FalseNone == 0 → FalseNone == "" → False)。
  • 常用于表示“函數無有效結果”“變量未初始化”或“可選參數未提供”。

2. 無return語句的函數:默認返回None

如果函數沒有return語句,或return后沒有值,調用后會默認返回None

示例2:無返回值函數的返回值

def print_greeting():"""打印問候語,無返回值"""print("Hello, Welcome!")# 調用函數并接收返回值
result = print_greeting()
print(f"函數返回值:{result}")        # 輸出:None
print(f"返回值類型:{type(result)}")  # 輸出:<class 'NoneType'>

解析

  • 函數print_greeting的功能是打印信息,沒有return語句,因此調用后返回None
  • 變量result接收None,這表明函數完成了操作但沒有產生可供后續使用的結果。

3. 顯式返回None:明確表達“無有效結果”

有時需要在函數中顯式返回None,明確告知調用者“操作失敗”或“無結果”(如參數無效時)。這比隱式返回None更具可讀性。

示例3:顯式返回None表示無效操作

def divide(a, b):"""計算a除以b的結果,b為0時返回None"""if b == 0:print("錯誤:除數不能為0")return None  # 顯式返回None表示失敗return a / b# 正常情況:返回有效結果
print(divide(10, 2))  # 輸出:5.0# 異常情況:返回None
print(divide(5, 0))   # 輸出:None

解析

  • b=0時,除法無意義,函數通過return None明確表示“操作失敗,無有效結果”。
  • 調用者可通過判斷返回值是否為None來處理異常情況(如result = divide(a, b); if result is not None: ...)。

4. 常見誤區:混淆“無返回值”與“返回空值”

初學者常將“返回空列表[]”“返回空字符串""”與“返回None”混淆,實際上它們有本質區別:

  • return []:返回一個空列表(有具體類型和值),表示“結果存在但為空”。
  • return None:返回None,表示“沒有結果”或“操作失敗”。

示例4:對比None與空值

def get_empty_list():return []  # 返回空列表def get_none():return None  # 返回Noneprint(get_empty_list() is None)  # 輸出:False(空列表不是None)
print(get_empty_list() == [])    # 輸出:True(是空列表)
print(get_none() is None)        # 輸出:True(確實是None)

最佳實踐

  • 當函數邏輯上應該有結果但結果為空時(如查詢數據庫未找到記錄),返回空列表/字典。
  • 當函數因參數錯誤、操作無法完成等原因“沒有結果”時,返回None

三、函數嵌套調用:函數間的協作與流程控制

函數嵌套調用指的是“在一個函數的內部調用另一個函數”,這是構建復雜邏輯的基礎。通過嵌套調用,我們可以將大問題分解為多個小問題,每個函數專注于解決一個子問題,最終通過函數間的協作完成整體任務。

1. 嵌套調用的執行流程

函數嵌套調用時,程序的執行流程會發生多次跳轉:

  1. 主程序調用函數A,暫停主程序執行,進入函數A。
  2. 函數A內部調用函數B,暫停函數A執行,進入函數B。
  3. 函數B執行完畢,返回結果給函數A,繼續執行函數A中調用B之后的代碼。
  4. 函數A執行完畢,返回結果給主程序,繼續執行主程序中調用A之后的代碼。

示例5:嵌套調用的執行流程演示

def add(a, b):"""計算a與b的和"""print(f"正在計算{ a } + { b }")return a + bdef square(num):"""計算num的平方"""print(f"正在計算{ num }的平方")return num **2def add_and_square(a, b):"""先調用add求a+b,再調用square求平方"""sum_ab = add(a, b)  # 嵌套調用add函數result = square(sum_ab)  # 嵌套調用square函數return result# 主程序調用add_and_square
final_result = add_and_square(3, 4)
print(f"最終結果:{final_result}")

執行流程與輸出

正在計算3 + 4          # add函數執行
正在計算7的平方        # square函數執行
最終結果:49           # 主程序輸出

解析

  • 主程序調用add_and_square(3,4),程序進入該函數。
  • add_and_square中先調用add(3,4),程序跳轉至add函數,計算并返回7。
  • add_and_square接收7后,調用square(7),程序跳轉至square函數,計算并返回49。
  • add_and_square返回49給主程序,主程序打印最終結果。

這種“層層調用”的流程讓代碼邏輯清晰,每個函數專注于單一功能,符合“模塊化”和“單一職責”原則。

2. 嵌套調用的優勢與適用場景

嵌套調用的核心優勢在于代碼復用和邏輯分解

  • 代碼復用:將常用功能封裝為函數(如addsquare),在多個地方嵌套調用,避免重復編碼。
  • 邏輯分解:將復雜任務(如“先求和再平方”)分解為多個簡單步驟,每個步驟用函數實現,降低思維復雜度。

適用場景:

  • 數據處理流水線:如“讀取數據→清洗數據→分析數據→生成報告”,每個步驟用函數實現,依次嵌套調用。
  • 參數預處理:函數接收原始參數后,調用其他函數進行驗證、轉換,再處理。
  • 條件分支調用:根據不同條件調用不同函數(如if x > 0: call funcA() else: call funcB())。

3. 實戰案例:數據處理流水線

假設需要實現一個“數據處理流水線”,功能為:接收原始數據→過濾無效值→計算平均值→格式化輸出結果。通過嵌套調用將每個步驟封裝為函數,使流程清晰可維護。

案例代碼實現

def filter_invalid(data):"""過濾數據中的非數字和負數"""valid_data = []for item in data:if isinstance(item, (int, float)) and item >= 0:valid_data.append(item)else:print(f"過濾無效值:{item}")return valid_datadef calculate_average(data):"""計算數據的平均值(調用filter_invalid預處理)"""if not data:print("數據為空,無法計算平均值")return None# 嵌套調用:先過濾再計算valid_data = filter_invalid(data)if not valid_data:print("無有效數據,無法計算平均值")return Nonereturn sum(valid_data) / len(valid_data)def format_result(average):"""格式化平均值為字符串(保留2位小數)"""if average is None:return "計算失敗"return f"平均值:{average:.2f}"def data_pipeline(raw_data):"""數據處理主函數(嵌套調用其他函數)"""avg = calculate_average(raw_data)  # 調用計算平均值函數report = format_result(avg)        # 調用格式化函數return report# 測試數據
test_data = [10, 20, -5, "30", 25.5, None]# 執行流水線
result = data_pipeline(test_data)
print(result)  # 輸出:平均值:18.83

解析

  • 整個流程被分解為4個函數,每個函數專注于單一任務:
    • filter_invalid:過濾非數字和負數。
    • calculate_average:嵌套調用filter_invalid,基于有效數據計算平均值。
    • format_result:將平均值格式化為字符串(處理None情況)。
    • data_pipeline:作為主函數,依次調用calculate_averageformat_result,完成整個流程。
  • 嵌套調用讓代碼邏輯清晰,若需要修改某一步驟(如調整過濾規則),只需修改對應的函數,無需改動其他部分,可維護性大幅提升。

四、綜合案例:學生成績分析系統

結合多返回值、None處理和嵌套調用,實現一個“學生成績分析系統”,功能包括:

  1. 錄入學生成績(處理無效輸入,返回None)。
  2. 分析成績(返回最高分、最低分、平均分)。
  3. 生成分析報告(嵌套調用分析函數,格式化結果)。

案例代碼實現

def input_grades():"""錄入學生成績,支持多次輸入,輸入'q'結束返回:有效成績列表(若無可返回None)"""grades = []while True:user_input = input("請輸入成績(輸入'q'結束):")if user_input.lower() == 'q':break# 驗證輸入是否為有效成績(0-100的數字)try:grade = float(user_input)if 0 <= grade <= 100:grades.append(grade)else:print("成績必須在0-100之間,請重新輸入")except ValueError:print("輸入無效,請輸入數字或'q'")return grades if grades else None  # 無有效成績返回Nonedef analyze_grades(grades):"""分析成績,返回最高分、最低分、平均分參數:grades(有效成績列表)返回:(最高分, 最低分, 平均分)或None(輸入無效時)"""if not grades:return Nonehighest = max(grades)lowest = min(grades)average = sum(grades) / len(grades)return highest, lowest, average  # 多返回值def generate_report():"""生成成績分析報告(嵌套調用其他函數)"""print("===== 學生成績分析系統 =====")grades = input_grades()  # 嵌套調用:錄入成績if grades is None:return "未錄入有效成績,無法生成報告"# 嵌套調用:分析成績(多返回值)highest, lowest, average = analyze_grades(grades)# 格式化報告report = (f"\n===== 成績分析報告 =====\n"f"參與人數:{len(grades)}\n"f"最高分:{highest:.1f}\n"f"最低分:{lowest:.1f}\n"f"平均分:{average:.1f}\n"f"======================")return report# 運行系統
print(generate_report())

案例解析

  • 多返回值應用analyze_grades函數一次返回最高分、最低分、平均分,調用者通過三個變量接收,便于后續處理。
  • None處理input_grades在無有效成績時返回Nonegenerate_report通過判斷grades is None處理空數據場景,避免報錯。
  • 嵌套調用generate_report作為主函數,依次嵌套調用input_grades(錄入)和analyze_grades(分析),將多個步驟串聯成完整流程,邏輯清晰。

該案例展示了返回值特性如何協同工作:多返回值減少數據傳遞次數,None處理異常情況,嵌套調用實現流程整合,共同構建出健壯、易維護的系統。

五、總結與提升

函數返回值是連接函數與外部的橋梁,其特性直接影響函數的靈活性和協作能力:

  • 多返回值:本質是返回元組,通過變量解包實現“一次接收多個結果”,適合返回相關聯的多個值(如周長和面積)。
  • None:表示“無結果”或“操作失敗”,是函數與調用者傳遞狀態的重要方式,需注意與空值(如[])的區別。
  • 嵌套調用:允許函數內部調用其他函數,通過分解復雜任務提升代碼復用性和可讀性,是構建模塊化程序的核心技巧。

進階練習

  1. 實現一個split_name函數,接收全名(如“張三”“李四 三”),返回(last_name, first_name)( lastName為姓,first_name為名,無名為空字符串)。
  2. 編寫一個嵌套調用的函數process_text,流程為:接收原始字符串→調用clean_text(去除標點)→調用count_words(統計單詞數)→返回統計結果。
  3. 改進rectangle_info函數,使其能接收“長和寬”或“正方形邊長”(通過參數默認值實現),返回周長和面積,無效輸入返回None

通過這些練習,你將能更深入地理解返回值設計對函數協作的影響,寫出更簡潔、更健壯的代碼。記住:** 優秀的函數返回值設計,能讓函數像樂高積木一樣,輕松組合出復雜功能**。

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

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

相關文章

python使用pip安裝的包與卸載

1&#xff1a;基本卸載命令 # 卸載單個包 pip uninstall package_name# 示例&#xff1a;卸載requests包 pip uninstall requests2&#xff1a;卸載多個包 # 一次性卸載多個包 pip uninstall package1 package2 package3# 示例 pip uninstall requests numpy pandas3&#xff1…

超級流水線和標量流水線的原理

一、什么是流水線&#xff1f;要理解這兩個概念&#xff0c;首先要明白流水線&#xff08;Pipelining&#xff09; 的基本思想。想象一個汽車裝配工廠&#xff1a;* 沒有流水線&#xff1a;一個工人負責組裝一整輛汽車&#xff0c;裝完一輛再裝下一輛。效率很低。* 有了流水線&…

【Ansible】管理復雜的Play和Playbook知識點

1.什么是主機模式&#xff1f;答&#xff1a;主機模式是Ansible中用于從Inventory中篩選目標主機的規則&#xff0c;通過靈活的模式定義可精準定位需要執行任務的主機。2.主機模式的作用答&#xff1a;篩選目標&#xff1a;從主機清單中選擇一個或多個主機/組&#xff0c;作為P…

FastGPT源碼解析 Agent 智能體應用創建流程和代碼分析

FastGPT對話智能體創建流程和代碼分析 平臺作為agent平臺&#xff0c;平臺所有功能都是圍繞Agent創建和使用為核心的。平臺整合各種基礎能力&#xff0c;如大模型、知識庫、工作流、插件等模塊&#xff0c;通過可視化&#xff0c;在界面上創建智能體&#xff0c;使用全部基礎能…

缺失數據處理全指南:方法、案例與最佳實踐

如何處理缺失數據&#xff1a;方法、案例與最佳實踐 1. 引言 在數據分析和機器學習中&#xff0c;缺失數據是一個普遍存在的問題。如何處理缺失值&#xff0c;往往直接影響到后續分析和建模的效果。處理不當&#xff0c;不僅會浪費數據&#xff0c;還可能導致模型預測結果的不準…

為什么Cesium不使用vue或者react,而是 保留 Knockout

1. Knockout-ES5 插件的語法簡化優勢 自動深度監聽&#xff1a;Cesium 通過集成 Knockout-ES5 插件&#xff0c;允許開發者直接使用普通變量語法&#xff08;如 viewModel.property newValue&#xff09;替代繁瑣的 observable() 包裝&#xff0c;無需手動聲明每個可觀察屬性。…

Word怎么設置頁碼總頁數不包含封面和目錄頁

有時候使用頁碼格式是[第x頁/共x頁]或[x/x]時會遇到word總頁數和實際想要的頁數不一致&#xff0c;導致顯示不統一&#xff0c;這里介紹一個簡單的辦法&#xff0c;適用于比較簡單的情況。 一、wps版本 文章分節 首先將目錄頁與正文頁進行分節&#xff1a;在目錄頁后面選擇插入…

突破機器人通訊架構瓶頸,CAN/FD、高速485、EtherCAT,哪種總線才是最優解?

引言&#xff1a; 從協作機械臂到人形機器人&#xff0c;一文拆解主流總線技術選型困局 在機器人技術飛速發展的今天&#xff0c;從工廠流水線上的協作機械臂到科技展會上的人形機器人&#xff0c;它們的“神經系統”——通訊總線&#xff0c;正面臨著前所未有的挑戰。特斯拉O…

Java核心概念詳解:JVM、JRE、JDK、Java SE、Java EE (Jakarta EE)

1. Java是什么&#xff1f; Java首先是一種編程語言。它擁有特定的語法、關鍵字和結構&#xff0c;開發者可以用它來編寫指令&#xff0c;讓計算機執行任務。核心特點&#xff1a; Java最著名的特點是“一次編寫&#xff0c;到處運行”&#xff08;Write Once, Run Anywhere - …

OSPF高級技術 相關知識點

1.多區域OSPFospf 設計多區域原因&#xff1a;① 每個區域的路由器只需同步自己所在區域的鏈路狀態數據庫&#xff0c;分區域設 計可以使得每個區域的鏈路狀態數據庫得以減少。以降低路由器cpu、內存 的消耗。② 避免某區域內的網絡故障&#xff08;例如&#xff1a;接口頻繁up…

Linux / Windows 下連續發送多幀 8 字節指令,下位機只響應第一幀,第二幀“丟失”。

串口編程易錯點筆記 基于 serial::Serial&#xff08;wjwwood serial 庫&#xff09; 場景&#xff1a;Linux / Windows 下連續發送多幀 8 字節指令&#xff0c;下位機只響應第一幀&#xff0c;第二幀“丟失”。1. 現象 serial::Serial ser("/dev/ttyUSB0", 115200);…

三十九、案例-配置文件-參數配置化(了解即可,現在主流使用yml配置文件)

參數配置化-問題引出參數配置化-問題解決參數配置化-代碼與過程解析代碼&#xff1a; AliOSSUtils&#xff08;工具類&#xff09; package com.itheima.utils;import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import org.springframework.beans.factory.…

Linux之virtio實現原理--pci 基礎

一、概述 virtio設備可以基于不同總線來實現&#xff0c;本文介紹基于pci實現的virtio-pci設備。以virtio-blk為例&#xff0c;首先介紹PCI配置空間內容&#xff0c;virtio-pci實現的硬件基礎——capability&#xff0c;最后分析PIC設備的初始化以及virtio-pci設備的初始化。 …

Claude-Flow AI協同開發:從“CTO”到“人機共生體”的AI協同開發

6.1 思維的終極融合&#xff1a;從“CTO”到“人機共生體” (Human-AI Symbiote) 在之前的章節中&#xff0c;我們逐步將您的角色從“開發者”提升為“項目經理”&#xff0c;最終定位為整個“人機混合團隊的CTO”。這個模型強調的是一種 “指揮-控制” (Command-and-Control) …

TCGA單癌腫按單基因高低分組的轉錄組差異熱圖分析作圖教程

TCGA單癌腫按單基因高低分組的轉錄組差異熱圖分析作圖教程分析作圖原理過程提取出TCGA中指定的單基因單癌腫的轉錄組表達數據對該單基因的表達水平的中位數作為閾值把樣本分成高表達組和低表達組按該基因的高低表達樣本分組來做該癌癥的轉錄組差異分析對差異分析結果中top差異高…

手搓Tomcat

目錄 Tomcat是什么&#xff1f; 前置工作準備 構建并啟動Tomcat 處理Socket邏輯順序 獲取輸入流并讀取數據封裝到Request 自定義Servlet對象 暫存響應體 按Http協議發送響應數據 部署Tomcat ? Tomcat是什么&#xff1f; Tomcat 是一個 Web 應用服務器&#xff08;準確…

Linux網絡:初識網絡

文章目錄1. 網絡發展1.1 獨立模式1.2 網絡互聯1.3 局域網LAN1.4 廣域網WAN2. 認識 “協議”2.1 什么是協議&#xff1f;2.2 為什么要有協議&#xff1f;2.3 深入了解協議序&#xff1a;開網絡之篇章&#xff0c;建網絡之基礎&#xff0c;將近2月過去&#xff0c;暑假期間不曾有…

文件檢查與拷貝-簡化版

本篇繼續來學習shell腳本&#xff0c;對上一篇的文件檢查與拷貝腳本進行簡化修改。 1 功能說明 在Linux系統中&#xff0c;通過一個shell腳本&#xff0c;實現將一個目錄中的所有文件&#xff08;包括子目錄中的&#xff09;&#xff0c;拷貝到頂一個指定的目錄&#xff0c;要求…

DCA1000 AWR1843 環境安裝

mmWaveStudio GUI設計用于表征和評估TI Radar器械。mmWaveStudio通過SPI向mmWave設備發送命令來配置和控制mmWave設備。使用DCA 1000 EVM或TSW 1400 EVM板捕獲ADC數據&#xff0c;并在Matlab中處理數據&#xff0c;結果顯示在GUI中。mmWaveStudio GUI利用C DLL和一組API通過FTD…

機器學習實操項目01——Numpy入門(基本操作、數組形狀操作、復制與試圖、多種索引技巧、線性代數)

上一章&#xff1a;【從 0 到 1 落地】機器學習實操項目目錄&#xff1a;覆蓋入門到進階&#xff0c;大學生就業 / 競賽必備 下一章&#xff1a; 機器學習核心知識點目錄&#xff1a;機器學習核心知識點目錄 機器學習實戰項目&#xff1a;【從 0 到 1 落地】機器學習實操項目目…