成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

掌握 Python 作用域規(guī)則的四個(gè)核心要點(diǎn)

開發(fā)
如果你對(duì)作用域不熟悉,可能會(huì)遇到很多讓人頭疼的問題。今天我們就一起聊聊Python作用域規(guī)則的四個(gè)核心要點(diǎn)。

在Python編程中,作用域是一個(gè)非常重要的概念。它規(guī)定了變量可以在哪里使用、以及它的生命周期。如果你對(duì)作用域不熟悉,可能會(huì)遇到很多讓人頭疼的問題。今天我們就一起聊聊Python作用域規(guī)則的4個(gè)核心要點(diǎn)。

核心要點(diǎn)1:全局作用域

我們先從最簡(jiǎn)單的開始,什么是全局作用域呢?簡(jiǎn)單來說,就是代碼里任何地方都能訪問到的變量。

# 定義一個(gè)全局變量
global_variable = "我是一個(gè)全局變量"

def my_function():
    print(global_variable)  # 在函數(shù)內(nèi)部訪問全局變量

my_function()  # 輸出: 我是一個(gè)全局變量

這段代碼首先定義了一個(gè)全局變量global_variable。之后,在函數(shù)my_function()內(nèi)部訪問這個(gè)變量并打印出來。可以看到,在函數(shù)內(nèi)直接使用全局變量是沒有問題的。

核心要點(diǎn)2:局部作用域

再來看看局部作用域。局部作用域里的變量只能在它們所在的代碼塊內(nèi)(如函數(shù)或類)被使用。

def local_function():
    local_variable = "我是局部變量"
    print(local_variable)

local_function()  # 輸出: 我是局部變量
print(local_variable)  # 報(bào)錯(cuò)!NameError: name 'local_variable' is not defined

在這里,local_variable是在local_function()內(nèi)定義的局部變量。當(dāng)你嘗試在函數(shù)外訪問它時(shí),Python會(huì)報(bào)錯(cuò),因?yàn)檫@個(gè)變量只存在于它的作用域范圍內(nèi)。

核心要點(diǎn)3:LEGB規(guī)則

Python遵循所謂的LEGB規(guī)則,這是用來查找變量名字綁定的地方。這四個(gè)字母分別代表什么?

  • L(Local):局部作用域
  • E(Enclosing):嵌套作用域(閉包)
  • G(Global):全局作用域
  • B(Built-in):內(nèi)置作用域

舉個(gè)例子來幫助理解。

x = "global"  # 全局變量

def outer():
    x = "enclosing"  # 外層作用域內(nèi)的局部變量
    
    def inner():
        x = "local"  # 局部變量
        print(x)
    
    inner()

outer()  # 輸出: local

在這個(gè)示例中,inner()函數(shù)里面的print(x)會(huì)找到最近的作用域中的x變量,這里是inner()自己的“l(fā)ocal”。所以最終輸出的是local。

核心要點(diǎn)4:使用global和nonlocal聲明改變變量綁定

最后一點(diǎn)要講的就是怎么在一個(gè)函數(shù)里面更改外部的變量值。

(1) 使用global

如果想在函數(shù)內(nèi)部修改全局變量,就要用global關(guān)鍵字。

number = 0

def modify_global():
    global number
    number += 1

modify_global()
print(number)  # 輸出:1

在這個(gè)例子中,函數(shù)modify_global利用global關(guān)鍵字使得它可以增加全局變量number的值。

(2) 使用nonlocal

當(dāng)在內(nèi)嵌函數(shù)中要修改外層函數(shù)中的變量時(shí),可以使用nonlocal關(guān)鍵字。

def counter():
    count = 0  # 外層作用域變量

    def increment():
        nonlocal count  # 聲明為非本地作用域變量
        count += 1
        return count

    return increment

increment_counter = counter()
print(increment_counter())  # 輸出: 1
print(increment_counter())  # 輸出: 2

這個(gè)例子展示了一個(gè)閉包的應(yīng)用場(chǎng)景,其中increment()通過nonlocal聲明來修改外層函數(shù)counter中的變量count。

實(shí)戰(zhàn)案例

下面我們結(jié)合實(shí)際場(chǎng)景來練習(xí)下所學(xué)的知識(shí)點(diǎn)。假設(shè)你需要編寫一個(gè)計(jì)算器,用戶輸入表達(dá)式時(shí)能識(shí)別變量并計(jì)算結(jié)果。

memory = {}  # 用來保存用戶的變量定義

def evaluate_expression(expr):
    try:
        return eval(expr, globals(), memory)
    except Exception as e:
        return str(e)

def calculator():
    while True:
        expr = input("Enter an expression (or 'exit' to quit): ")
        if expr.lower() == 'exit':
            break
        
        result = evaluate_expression(expr)
        if isinstance(result, float):
            result = round(result, 4)  # 限制浮點(diǎn)數(shù)顯示精度
        
        print(f"Result: {result}")

# 運(yùn)行計(jì)算器
calculator()

在這個(gè)實(shí)戰(zhàn)案例中,我們創(chuàng)建了一個(gè)交互式環(huán)境讓用戶定義他們自己的變量(這些變量存在字典memory中),同時(shí)也能進(jìn)行常規(guī)數(shù)學(xué)運(yùn)算。比如輸入x=5;y=10;x+y將會(huì)輸出結(jié)果15。這里eval()函數(shù)允許從一個(gè)字符串解析表達(dá)式,并根據(jù)傳入的全局變量字典(這里未傳額外)以及存儲(chǔ)自定義變量的memory字典執(zhí)行它。

總結(jié)

本文詳細(xì)講解了Python作用域的四個(gè)核心要點(diǎn):

  • 全局作用域讓變量可被任何地方訪問。
  • 局部作用域限定變量?jī)H能在其定義的代碼塊內(nèi)有效。
  • LEGB規(guī)則解釋變量搜索的順序:從本地出發(fā)逐級(jí)向外尋找。
  • 使用global和nonlocal聲明改變變量綁定。
責(zé)任編輯:趙寧寧 來源: 手把手PythonAI編程
相關(guān)推薦

2013-01-10 09:47:09

HBase性能優(yōu)化

2021-12-03 14:37:38

數(shù)據(jù)備份存儲(chǔ)備份

2014-08-19 09:39:46

程序員

2019-06-26 09:00:00

DevSecOps安全漏洞

2009-03-13 09:39:34

JavaScript函數(shù)調(diào)用規(guī)則

2009-10-22 14:55:06

網(wǎng)絡(luò)綜合布線資料

2011-05-07 11:11:21

LCD拼接

2015-03-30 12:54:55

SQL ServerSQL Server

2023-10-12 22:25:04

微服務(wù)Spring

2011-06-21 17:24:29

外鏈SEO

2011-07-14 15:23:34

java

2022-10-11 08:14:14

多線程鎖機(jī)制

2013-01-15 11:05:55

云計(jì)算云安全

2013-09-10 17:41:56

移動(dòng)網(wǎng)站性能優(yōu)化移動(dòng)web

2021-10-26 22:43:05

數(shù)據(jù)庫(kù)安全存儲(chǔ)

2011-05-18 09:32:14

java

2010-06-29 09:06:39

Java思想Java虛擬機(jī)

2023-10-17 08:57:21

2016-11-01 14:33:18

郝聯(lián)峰大數(shù)據(jù)

2019-01-23 08:59:00

大數(shù)據(jù)大數(shù)據(jù)治理數(shù)據(jù)管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品一区二区三区不卡 | 超碰97免费观看 | 99久久精品国产一区二区三区 | 精品日韩一区二区 | 久久激情网 | 欧美一区二区三区四区在线 | 日韩在线视频播放 | 日本中文字幕视频 | 欧美一区二区三区在线看 | 久久久久国产一级毛片 | 日本久久精品 | 国产精品视频区 | www.蜜桃av| 亚洲自拍一区在线观看 | 精品毛片视频 | 一级国产精品一级国产精品片 | 99视频在线免费观看 | 夜夜操天天艹 | 精品国产乱码久久久久久丨区2区 | 国产小视频在线 | 国产一区二区高清在线 | 日韩欧美视频免费在线观看 | 欧美综合色 | 一区中文字幕 | 亚洲精品大全 | 成人欧美一区二区 | 日韩精品一区二区三区视频播放 | 九九精品影院 | 久久久成人一区二区免费影院 | www.天天操.com| 大学生a级毛片免费视频 | 福利一区二区 | av看片| 97热在线| 欧美激情综合 | 在线观看三级av | 久久不卡日韩美女 | 国产高清免费视频 | 欧美片网站免费 | 日韩精品成人免费观看视频 | 色欧美综合 |