十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

深入理解 Python 作用域:从基础到高级应用

深入理解 Python 作用域:从基础到高级应用 深入理解 作用域从基础到高级应用在编程里头, 作用域可是个相当重要十分关键的概念, 它拿来决定变量以及函数的可见性还有生命周期。正确去理解并且运用作用域规则, 对于编写那种结构清晰、相对易于维护的代码起着关键突出的作用。不管是简单的脚本也好, 还是复杂的大型项目也罢, 作用域都贯穿于其中, 影响着程序的行为表现。本文将会全面又深入地剖析作用域, 从基础概念开始着手, 详细地介绍不同类型的作用域以及它们各自的特点, 结合丰富多样的示例代码来帮助读者理解作用域的工作原理过程。顺着继续去探讨作用域的嵌套规则, 以及名称查找的排序顺序, 与此同时着重去对相关语句在作用域里的运用进行分析, 包含其细节的语法、应用的场景以及示例。除此之外, 还会去介绍一些高级的和作用域有着关联的特性, 像闭包以及全局变量的修改。最终, 借助实际的项目案例来展现作用域在实际开发当中的应用价值, 并且提供相关的学习资源, 加以助力读者全面去掌握作用域的运用。作用域基础概念作用域的定义首先, 作用域是程序里定义变量以及函数的区域, 接着, 它规定了这些名称在代码之中的可见范围。然后, 可以这么说, 在各异的作用域内, 一模一样名称的变量或者函数有可能指代不同的对象。最后, 存在几种不同类型的作用域, 再者, 每个的情况来讲, 作用域都具备其特有的规则和其发挥的具体用途。 ”。不同类型的作用域局部作用域Local Scope受局部所处限定地域范围约束的作用域, 是于函数内部所进行定义的作用域范畴。在函数内部被定义出来的变量以及函数, 仅仅能够在该函数自身的内部, 才能够实施访问操作, 而在函数外部的环境之下, 是没有办法直接去对这些局部所存在的变量进行访问的行为的。比如说:def test_function(): local_variable 10 print(local_variable) test_function() # 下面这行代码会报错因为 local_variable 是局部变量在函数外部不可见 # print(local_variable)在此例子当中, 存在着这样一种情况, 即有一个变量, 是于函数的内部被定义而成的局部变量, 它仅仅能够在该函数内部发挥作用, 被加以使用。嵌套作用域 Scope被称作闭包作用域之事乃嵌套作用域, 于一个函数嵌套于另一个函数内部这种情形下, 内部函数能够去访问外部函数的变量, 外部函数的作用域即嵌套作用域, 如:def outer_function(): enclosing_variable 20 def inner_function(): print(enclosing_variable) inner_function() outer_function()于这个例子里头, 能够进行访问, 其中的, 鉴于处于嵌套出来的作用域范围之内。全局作用域 Scope全局作用域, 乃是于模块文件层面予以定义的作用域, 于模块顶层所定义的变量以及函数, 归属于全局作用域, 能够在整个模块随便何处进行访问, 举例如下:global_variable 30 def access_global(): print(global_variable) access_global() print(global_variable)在这个例子中 是全局变量可以在函数内部和外部访问。内置作用域Built - in Scope内置作用域, 乃是解释器自身所带的作用域, 其中涵盖了全部内置的函数以及异常类型, 举个例子, 像print()、len()等等。这些内置的名称, 在任何一处地方, 皆能够直接予以使用。作用域的嵌套规则与名称查找顺序嵌套规则具备嵌套特性的作用域, 也就是意味着一个用于包裹另一个用于的作用域存在比如在函数里面能够嵌套别的函数, 进而构成多层嵌套样式情况的作用域架构。名称查找顺序LEGB 规则当其于代码里引用一个名称变量或者函数之际, 解释器会依照LEGB规则去查找此名称。例如# 全局作用域 global_num 100 def outer(): # 嵌套作用域 enclosing_num 200 def inner(): # 局部作用域 local_num 300 print(local_num) # 先在局部作用域找到 local_num print(enclosing_num) # 局部作用域没有到嵌套作用域找 print(global_num) # 局部和嵌套作用域都没有到全局作用域找 print(len([1, 2, 3])) # 前面都没找到到内置作用域找 inner() outer()和 语句详解 语句语法和功能在函数里头声明一个变量成为全局变量的语句, 能够让函数当中对全局变量去做相应修改。它的语法形式是变量名, 并且能够同时声明好多变量, 是用逗号来实现分隔的。示例global_variable 50 def modify_global(): global global_variable global_variable 60 print(global_variable) # 输出: 50 modify_global() print(global_variable) # 输出: 60在这个例子里头, 函数内部运用语句声明为全局变量, 随后对其予以修改。要是不采用语句, 直接于函数内部给赋值, 会认定这是在创建一个全新的局部变量, 而非修改全局变量。语句语法和功能语句被用来在嵌套函数里头声明一个变量成为外层并非全局函数之物的变量, 借此能够在内部函数当中去修改外层函数的变量, 它的语法形式是变量名, 同样能够同时声明多个变量。示例def outer(): enclosing_variable 70 def inner(): nonlocal enclosing_variable enclosing_variable 80 inner() print(enclosing_variable) outer() # 输出: 80于这个实例当中, inner函数之内运用语句声明为外层函数outer的变量, 接着对其予以修改。要是不运用语句, 径直在inner函数内部给赋值, 会认定这是在缔造一个全新的局部变量。高级作用域相关特性闭包闭包指的是, 具有能够访问另一个函数作用域里面变量能力的函数, 闭包能够捕获并且保存外部函数的状态, 哪怕外部函数已经完成了执行。比如:def make_multiplier(n): def multiplier(x): return x * n return multiplier double make_multiplier(2) triple make_multiplier(3) print(double(5)) # 输出: 10 print(triple(5)) # 输出: 15于这个例子里头, 函数属于一个闭包, 此闭包捕获了函数当中的n变量。实际项目中的使用示例模块化编程在模块化编程里头, 作用域能够协助我们把不一样的功能给封装到不一样的模块以及函数内, 防止产生变量名冲突。举例来说, 一个项目当中存在多个模块, 每个模块都有其自身的全局作用域, 模块内部的函数具备局部作用域。# module1.py global_var_module1 This is from module 1 def func_module1(): local_var Local in module 1 print(local_var) # module2.py global_var_module2 This is from module 2 def func_module2(): print(global_var_module2) # main.py import module1 import module2 module1.func_module1() module2.func_module2()装饰器装饰器, 属于一种强大工具, 它借助闭包与作用域之概念, 能在不去修改原函数代码的前提下, 为函数增添额外功能, 比如:def my_decorator(func): def wrapper(): print(Before function execution) func() print(After function execution) return wrapper my_decorator def say_hello(): print(Hello!) say_hello()在这个例子里头, 函数属于一个闭包, 它能够去访问, 函数之中的func变量。总结本文对作用域的相关知识作了全面介绍, 先是说起基础的作用域类型, 有局部 的、嵌套去形成的、全局之中所的的那个样子的, 还有内置的, 而后又讲到了作用域的嵌套规则以及名称去查找的顺序这类的情况也就是这个 LEGB 规则, 另外还详细阐述了那所谓的什么 和 语句的使用这方面的办法以及应用的具体场景, 并且也介绍了闭包这种称得上高级的作用域特性。借助模块化编程以及装饰器等实际呈现出来的项目案例, 把作用域在着实参与的实际开发阶段的重要应用给展示出来。清楚得明白作用域本有的概念还有规则, 包括相关的 和 这类语句的运用, 这般是能够帮到开发者去写出更加清晰明了得、效率也是极优良的、同时还便于维护的 代码。TAG, 作用域, 局部作用域, 嵌套作用域, 全局作用域, 内置作用域, LEGB规则, 闭包, 模块化编程, 装饰器, 语句, 语句。相关学习资源
返回列表