在Python代码中,我们经常会使用到一个名词,作用域,那么,作用域究竟是个啥?
不同的编程语言中,作用域搭配使用的模块或者具体名称可能会略有差别
作用域是个啥?
作用域,就像是我们学习数学的定义域和值域一样,是一个区间范围,
在这个范围内,我们可以对进行的函数来进行取值,或者说这个函数的功能得以实现,当然,转换成编程之中,就是函数的作用域,通俗来讲,就是,函数只在这个区间,才会实现他的功能,跳过这个区间,就无法实现功能了
编程本就是一种数学思维的体现,
在我们这个普实世界中,满足了重力,支持力等等其他条件,用数学式子计算出来的结果,
例如水的密度,倾斜角的摩擦力等等,这些能够通过数学计算解决我们三维世界的具体问题称为物理,而数学,本就是一种工具,数学思维应用于直接推算加减,就是最普通的数学,从某种概念上来讲,物理是数学思维的一种呈现,而编程思维也同样如此,我们将代码融入数学思维构建了新兴学科,计算机科学与技术
但在大学教程里,数学也被称之为计算机科学,足以证明数学对编程的重要影响。作用域就是数学思维在编程中的一种体现,我们通过代码构建函数,
类似于求数学中的求倒数,构造函数只是为了实现功能,最终解决问题,同样,在编程中,我们构造函数之后,通过函数实现我们想要的功能来服务于人类。定义域就这样诞生了,。
定义域就是编程中,函数的作用范围
在数学中,不同的函数拥有不同的定义域,相同的,在编程语言中,不停的函数拥有不同的作用域,
但作用域也被人们细细划分几大类来帮助我们更好的解决问题。
全局作用域(Global Scope)
全局作用域是指在代码中最外层定义的变量的作用域。在全局作用域中定义的变量可以在代码的任何其他部分被访问和修改,除非它们被局部作用域或内置作用域中的同名变量所覆盖。
类似于数学中整个函数所求的定义域
x = 10 # 全局作用域
def func():
print(x) # 可以直接访问全局作用域中的x
func()
局部作用域(Local Scope)
局部作用域是指在函数内部定义的变量的作用域。局部变量仅在函数内部有效,函数外部无法直接访问局部变量。
类似于在数学中,我们截取了一段函数,在该段函数中的定义域
def func():
y = 5 # 局部作用域
print(y) # 只能在func函数内部访问y
func()
嵌套作用域
def outer_func():
x = 10 # 外部函数的局部作用域
def inner_func():
y = 5 # 内部函数的局部作用域
print(x, y) # 可以在inner_func内部访问外部函数的x
inner_func()
outer_func()
全局作用域和局部作用域( Global 和 Local 作用域):
x = 10 # 全局作用域
def func():
y = 5 # 局部作用域
print(x, y) # 可以在func内部同时访问全局作用域的x和局部作用域的y
func()
内置作用域(Built-in Scope)
内置作用域是指Python内置函数和模块的作用域。所有内置函数和内置变量都在这个作用域中。可以直接使用内置函数,如print()或len(),无需导入任何模块。
在Python中,不同的函数实现不同的功能,我们在写了很多功能函数的时候,创建了一个名为库的东西来装载我们所实现的功能,而在开发中,为了满足程序员的方便,Python在创建时便开发了一些基础的函数,例如输入输出等,使用这些函数的时候,我们不需要导入库,这是Python本身自带的库。
而内置作用域就是这些函数的作用域,换而言之,Python在创建的时候就已经创建了这些基础的函数和相应的,他们的作用域。
def func():
print(len("hello")) # 内置函数len属于内置作用域
func()
块作用域(Block Scope)
Python 3.8版本引入了async和await关键字,这引入了一种新的作用域:块作用域。块作用域通常用于async函数中的await表达式。
虽然Python没有块级作用域,但可以通过在函数中使用临时作用域来实现类似的效果。例如,使用匿名函数(lambda)或者在函数中定义一个内部函数,都可以创建一个临时的工作空间。
块作用域(Block Scope)是指在编程语言中,变量定义在一个代码块内部,其作用域也限于这个代码块内部。这意味着,当变量在代码块外部时,它是不可访问的。块作用域通常用于限制变量的访问范围,减少命名冲突,并帮助程序员更清晰地表达他们的意图。
x = 10 # 全局作用域
def func():
y = 5 # 局部作用域
def inner_func():
z = 3 # 嵌套的局部作用域
print(z) # 访问内层局部作用域中的变量
inner_func()
func()