开发者学堂课程【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)