天天看點

作用域|學習筆記

開發者學堂課程【Python 語言基礎 3:函數、面向對象、異常處理:作用域】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址:

https://developer.aliyun.com/learning/course/601/detail/8730

作用域

内容簡介

一、什麼是作用域

二、全局作用域

三、函數作用域

# 作用域(scope)指的是變量生效的區域

(寫一個變量不一定在整個程式都可見)

b=20 # 全 局變量

def  fn()

a=10 # a 定義在了函數内部,是以他的作用域就是函數内部,函數外部無法通路

print(‘函數内部:’,‘a=’,a)

Traceback(must recent call last):

 File“06.作用于與命名空間.py”,line 10, in <module>

 Print(‘函數外部:’,‘a=’,a)

NameError: name ‘a’ is not defined

***Rep1 Closed***

print(‘函數内部:’,‘b=’,b)

# print(‘函數外部:’,‘a=’,a)

# print(‘函數外部:’,‘b=’,b)

在 Python 中一共有兩種作用域

- 全局作用域在程式執行時建立,在程式執行結束時銷毀 .

- 在全局作用域中定義的變量,都屬于全局變量,全局變量可以在程除的任意位置被通路

#   - 函數作用域在函數調用時建立,在調用結束時銷毀

#   - 函數每調用一次就會産生一個新的函數作用域

例:

fn()

fn()

fn()

#   -在函數作用域中定義的變量,都是局部變量,它隻能在函數内部被通路

變量的查找

#   - 當使用變量時,會優先在目前作用域中尋找該變量,如果有則使用,如果沒有則繼續去上一級作用域中尋找,如果有則使用,

沒有則繼續去上一級作用域中尋找,以此類推,

直到找到全局作用域,依然沒找到,則抛出異常

Name Error: name ‘a’ is not defined

def  fn2():

a=30

def  fn3():

print(‘fn3中:’,‘a=’,a)

fn3()

fn3中:a=30

***Rep1 Closed***

(内部函數能看到外部函數,外部函數能看到全局函數;外部函數不能看到内部函數)

# fn2()

a=20

def fn3():

a=10 #

​​在函數中為變量指派時,預設都是局部變量指派

# 如果希望在函數内部修改全局變量,則需要使用 global 關鍵字,來聲明變量

global a

​ # 聲明在函數内部的使用a是全局變量,此時再去修改 a 時,就是在修改全局的 a

a=10

print(‘函數内部:’,‘a=’,a)

fn3()

print(‘函數外部:’,‘a=’,a)