【Python】python系列之函數作用域

Python 系列文章學習記錄:

Python系列之Windows環境安裝配置_開著拖拉機回家的博客-CSDN博客

Python系列之變量和運算符_開著拖拉機回家的博客-CSDN博客

Python系列之判斷和循環_開著拖拉機回家的博客-CSDN博客

Python系列之字符串和列表_開著拖拉機回家的博客-CSDN博客

Python系列之文件操作和函數_開著拖拉機回家的博客-CSDN博客

Python系列模塊之標準庫OS詳解_開著拖拉機回家的博客-CSDN博客

Python系列模塊之標準庫re詳解_開著拖拉機回家的博客-CSDN博客

Python系列模塊之標準庫json詳解_開著拖拉機回家的博客-CSDN博客

Python系列模塊之標準庫shutil詳解_開著拖拉機回家的博客-CSDN博客

Python系列模塊之pymysql操作MySQL 數據庫_開著拖拉機回家的博客-CSDN博客

Python系列之面向對象編程_python面向對象編程-CSDN博客

?Pythonpython系列之函數閉包概念_python閉包函數-CSDN博客


一、LEGB 規則


LEGB 規則是 Python 查找變量的順序,即當在代碼中引用一個變量時,Python 會按照以下順序在不同的作用域中查找該變量:

  • Local(局部作用域):函數內部定義的變量和參數,只在函數內部可見。
  • Enclosing(閉包作用域):嵌套函數中,內部函數可以訪問外部函數的局部變量,這些外部函數的局部變量所在的作用域就是閉包作用域。
  • Global(全局作用域):在模塊級別定義的變量和函數,在整個模塊內都可以訪問。
  • Built - in(內置作用域):Python 內置的函數和變量,如 printlen 等,在任何地方都可以訪問。

二、作用域實例


2.1 局部作用域(Local)

局部作用域是指函數內部的作用域,函數內部定義的變量和參數只能在該函數內部訪問。

def test_function():# 局部變量local_variable = 10print(local_variable)test_function()
# 以下代碼會報錯,因為 local_variable 是局部變量,在函數外部無法訪問
# print(local_variable)

2.2 閉包作用域(Enclosing)

當一個函數嵌套在另一個函數內部,并且內部函數引用了外部函數的局部變量時,就形成了閉包。內部函數可以訪問外部函數的局部變量,即使外部函數已經執行完畢。

def outer_function():# 外部函數的局部變量enclosing_variable = 20def inner_function():# 內部函數可以訪問外部函數的局部變量print(enclosing_variable + 1)return inner_functionclosure = outer_function()
closure()

2.3 全局作用域(Global)

全局作用域是指在模塊級別定義的變量和函數,在整個模塊內都可以訪問。可以使用 global 關鍵字在函數內部修改全局變量。

# 全局變量
def modify_global():global global_variable  # 申明修改全局變量global_variable = 50  # 函數內部修改全局變量return global_variableprint(global_variable)
print(modify_global())

2.4 內置作用域(Built - in)

內置作用域包含了 Python 內置的函數和變量,如 printlenint 等,這些函數和變量在任何地方都可以直接使用。

# 使用內置函數 len
my_list = [1, 2, 3]
length = len(my_list)
print(length)

2.5 作用域的嵌套和查找順序

當在代碼中引用一個變量時,Python 會按照 LEGB 規則從內到外依次查找該變量。如果在局部作用域中找到了該變量,則使用該變量;如果沒有找到,則繼續在閉包作用域中查找,以此類推。

# 全局變量
x = 10def outer():# 閉包作用域變量x = 20def inner():# 局部變量x = 30print(x)  # 輸出 30inner()print(x)  # 輸出 20outer()
print(x)  # 輸出 10
  • 在上述代碼中,inner 函數內部的 print(x) 會先在局部作用域中查找 x,找到局部變量 x = 30 并輸出;
  • outer 函數內部的 print(x) 會在閉包作用域中查找 x,輸出閉包作用域變量 x = 20
  • 最后,在全局作用域中調用 print(x) 會輸出全局變量 x = 10

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

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

相關文章

Unity UI 核心類解析之Graphic

🧱 Unity UI 核心類解析:Graphic 類詳解 一、什么是 Graphic? 在 Unity 的 UI 系統中,Graphic 是一個抽象基類,繼承自 UIBehaviour 并實現了 ICanvasElement 接口。它是所有可以被繪制到屏幕上的 UI 元素的基礎類。 …

【Elasticsearch】文檔遷移(Reindex)

文檔遷移 1.為什么要進行 reindex 操作2.Reindex 操作的本質3.實際案例3.1 同集群索引之間的全量數據遷移3.2 同集群索引之間基于特定條件的數據遷移3.2.1 源索引設置檢索條件3.2.2 基于 script 腳本的索引遷移3.2.3 基于預處理管道的數據遷移 3.3 不同集群之間的索引遷移3.4 查…

WordPress 區塊版面配置指南

WordPress 的區塊編輯器(Gutenberg)提供了靈活的版面配置選項,以下是主要配置方法: 基本區塊布局 添加區塊:點擊””按鈕或按”/”鍵快速插入區塊 常用內容區塊: 段落(Paragraph) 標題(Heading) 圖像(Image) 畫廊(Gallery)…

TensorFlow基礎之理解張量

2.理解張量 張量(Tensors)介紹 張量是物理和工程領域的基礎數學結構。但是過去張量很少在計算機科學里使用。它與離散數學和邏輯學有更多的聯系。隨著機器學習的出現,這種狀態開始顯著的改變,成為連續向量的計算基礎。現代機器學…

Flume 安裝與配置步驟

1.解壓 tar -zxvf apache-flume-1.9.0-bin.tar.gz 2.配置環境變量 vim /etc/profile export FLUME_HOME/home/wang/soft/flume/apache-flume-1.9.0-bin export PATH$PATH:$FLUME_HOME/bin source /etc/profile 3.創建必要的目錄 mkdir -p $FLUME_HOME/conf 4.創建 Flume 配置文…

還原線上 WebView 異常:手機端APP遠程調試

前端調試總被理解為開發階段的事,但在實際項目中,真正困難的調試往往發生在產品上線之后。用戶反饋“看不到內容”、“一直轉圈”、“點了沒反應”,而開發環境無法復現,測試機也正常運行,這時怎么定位、驗證和解決問題…

102頁滿分PPT | 汽車設備制造業企業信息化業務解決方案智能制造汽車黑燈工廠解決方案

這份文檔是一份汽車設備制造業企業信息化業務解決方案,詳細闡述了企業從生產到銷售的全流程信息化建設。針對企業目前手工管理為主、信息化程度低、數據追溯困難等問題,提出了建立統一信息化平臺的目標,涵蓋財務、業務、流程和數據的整合。方…

SQLite 表達式詳解

SQLite 表達式詳解 引言 SQLite 是一個輕量級的數據庫,廣泛用于移動設備和桌面應用程序。SQLite 的表達式是 SQL 語句的核心,它們用于查詢、更新和刪除數據庫中的數據。本文將詳細解釋 SQLite 的各種表達式,并探討它們在數據庫操作中的重要性。 表達式概述 在 SQLite 中…

沉浸式AI交互數字人技術解析

360智匯云沉浸式AI交互數字人支持開發者靈活接入和私有化部署大模型服務,構建面向業務場景的實時音視頻交互能力。系統集成了360智匯云自研的沉浸式AI交互數字人引擎與高性能 RTC 模塊,保障音視頻傳輸過程中的低延遲、高穩定性和高并發承載能力&#xff…

HarmonyOS 評論回復彈窗最佳實踐

HarmonyOS 評論回復彈窗最佳實踐 前言 在移動應用開發中,評論回復功能是一個常見且重要的交互場景。本文將詳細介紹如何在 HarmonyOS 中實現一個功能完善的評論回復彈窗,包括彈窗選型、富文本編輯、軟鍵盤適配等關鍵技術點。 功能概述 我們要實現的評…

Git 回退操作詳解:帶示例的“小白”指南

前言 在日常開發中,我們難免會遇到: 改錯代碼:推送之前才發現某些行根本就不該動提交錯誤:commit 信息打錯、提交到錯誤分支想回到之前版本:測試時發現之前版本是好的,需要回去查看 這就需要用到 Git 的…

redux以及react-redux

1.redux案例完整版 上一篇文章我們是沒有action文件,直接在countre組件與store以及reducer直接進行狀態的改變以及展示。 下面我們加上action文件,我們就不能直接通過dispatch傳,而是通過調用action里面的函數講我們傳入的參數變成action這種…

idea中配置svn及提交提示“未檢測到更改”提示

首先要安裝TortoiseSVN,選command line client tools; 在idea中,文件->設置->Subversion->如下圖 文件->設置->目錄映射->如下圖 初次導入到svn, 輸入服務器上的svn地址,等待成功即可;…

vue 實現dot-dropdown

<template><div class"app-container"><div class"mt30"></div><el-row :gutter"20"><!-- title --><!-- <div class"modt-box">導航管理</div> --><el-col :span"2&q…

使用 mysql2/promise 模塊返回以后,使用 await 返回數據總結

SELECT 返回結構 const [rows, fields] await db.query(SELECT * FROM folders);返回&#xff1a; rows: 是一個數組&#xff0c;包含所有查到的記錄。fields: 是字段的結構定義&#xff08;列信息&#xff09;&#xff0c;一般不用。 rows 是一個數組&#xff0c;包含所有…

Manus Metagloves pro高精度+無漂移+低延遲 ,重構VR/XR手部交互方式

manus metagloves pro是一款專為動畫制作、虛擬現實及游戲開發打造的高精度無線動作捕捉手套。采用先進的Quantum追蹤技術&#xff0c;實現毫米級動作捕捉&#xff0c;精準還原手指細節&#xff0c;顯著提升創作效率與交互真實感。 MANUS Metagloves Pro解鎖動捕 / 機器人 / XR…

Uniapp插件改造指南:如何讓vue-plugin支持HarmonyOS5原生能力?

一、分層架構設計 采用通用邏輯與平臺實現分離的三層結構&#xff1a; uni-plugin-harmony ├── common # 跨平臺通用層 │ ├── interfaces # 能力接口抽象&#xff08;如Scanner.ets&#xff09; │ └── utils # 工具類 ├── harmony …

P1040 [NOIP 2003 提高組] 加分二叉樹 題解

題目描述 設一個 n n n 個節點的二叉樹 tree \text{tree} tree 的中序遍歷為 ( 1 , 2 , 3 , … , n ) (1,2,3,\ldots,n) (1,2,3,…,n)&#xff0c;每個節點都有一個分數&#xff08;均為正整數&#xff09;。任一棵子樹 subtree \text{subtree} subtree&#xff08;包含 tr…

【Golang面試題】Data Race 問題怎么檢測?

Go Race Detector 深度指南&#xff1a;原理、用法與實戰技巧 一、什么是數據競爭&#xff1f; 在并發編程中&#xff0c;數據競爭發生在兩個或多個 goroutine 同時訪問同一內存位置&#xff0c;且至少有一個是寫操作時。這種競爭會導致不可預測的行為和極其難以調試的問題。…

257. 二叉樹的所有路徑(js)

257. 二叉樹的所有路徑——DFS 回溯&#xff08;js&#xff09; 題目描述解題思路完整代碼時間復雜度分析 題目描述 257. 二叉樹的所有路徑 解題思路 題意理解 給定一棵二叉樹&#xff0c;要求返回所有從根節點到葉子節點的路徑&#xff0c;路徑以字符串形式表示&#xff0c…