開發者學堂課程【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)