(一)Python入门-5函数:10nonlocal-global-LEGB规则

一:nonlocal关键字

  nonlocal 用来声明外层的局部变量。

  global 用来声明全局变量。

#测试nonlocal、global关键字的用法

a = 100
def outer():
    b = 10
    def inner():
        nonlocal b      #声明外部函数的局部变量
        print(‘inner:b‘,b)
        b = 20      #内部函数中修改了外部函数变量b的值

    global a    #声明全局变量
    a = 200

    inner()
    print(‘outer:b‘,b)

outer()
print(‘a:‘,a)

运行结果:

  inner:b 10
  outer:b 20
  a: 200

二:LEGB规则

  Python在查找“名称”时,是按照LEGB规则查找的: Local-->Enclosed-->Global-->Built in

    Local 指的就是函数或者类的方法内部

    Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)

    Global 指的是模块中的全局变量

    Built in 指的是Python为自己保留的特殊名称。

  如果某个name映射在局部(local)命名空间中没有找到,接下来就会在闭包作用域 (enclosed)进行搜索,如果闭包作用域也没有找到,Python就会到全局(global)命名空 间中进行查找,最后会在内建(built-in)命名空间搜索 (如果一个名称在所有命名空间 中都没有找到,就会产生一个NameError)。

#测试LEGB

str = "global"
def outer():
    #str = "outer"
    def inner():
        #str = "inner"
        print(str)
    inner()

outer()

原文地址:https://www.cnblogs.com/jack-zh/p/10841693.html

时间: 2024-10-29 00:19:12

(一)Python入门-5函数:10nonlocal-global-LEGB规则的相关文章

python入门15 函数

函数 1 python内置函数 2 匿名函数lambda 3 自定义函数 def functionname(arg):... #coding:utf-8 #/usr/bin/python """ 2018-11-11 dinghanhua 函数 """ '''内置函数''' print(round(2.345,2)) #四舍五入,保留2位小数;绝对值 print(abs(-23.333)) #绝对值 '''匿名函数 lambda''' lambd

(一)Python入门-5函数:03函数也是对象-内存分析

函数也是对象,内存底层分析: Python中,“一切都是对象”.实际上,执行def 定义函数后,系统就创建了相应的函数 对象.我们执行如下程序,然后进行解释: 1 #函数也是对象 2 def print_star(n): 3 print('*'*n) 4 5 print_star(3) 6 c = print_star 7 c(3) 8 9 print(id(print_star)) 10 print(id(c)) 11 print(type(c)) 上面代码执行 def 时,系统中会创建函数对

(一)Python入门-5函数:07lambda表达式和匿名函数-eval()函数

一:lambda表达式和匿名函数 lambda表达式可以用来声明匿名函数.lambda 函数是一种简单的.在同一行中定义函数 的方法.lambda函数实际生成了一个函数对象. lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数 的返回值. lambda表达式的基本语法如下: lambda arg1,arg2,arg3... : <表达式> arg1/arg2/arg3为函数的参数.<表达式>相当于函数体.运算结果是:表达式的运算结果. #lambd

python入门基础-函数装饰器的理解

1.装饰器 # 知乎某大神是这么比喻装饰器的:内裤可以用来遮羞,但是到了冬天他就没有办法为我们御寒,聪明的人于是发明了长裤,有了长裤后宝宝再也不冷了, # 装饰器就像我们这里说的长裤,在不影响内裤作用的前提下,给我们的身子提供了保暖的功效. # # 大神是将程序中原本的函数比喻成内裤,而装饰器比喻成了长裤,这样在寒冬里它们结合一起使用就给所有人带来了温暖. # # 装饰器本质上是一个python函数,它可以让其它函数在不改动代码的情况下增加额外的功能,并且装饰器的返回值也是一个函数对象. # 在

Python入门之函数的装饰器

本章目录: 装饰器: 一.为什么要用装饰器 二.什么是装饰器 三.无参装饰器 四.装饰器语法糖 五.认证装饰器实现 六.叠加多个装饰器 七.带参装饰器 =========================================================== 一.开放封闭原则 引子--为什么要用装饰器 软件一旦上线后,对修改源代码是封闭的,对功能扩展是开放的. 也就是说我们必须找到一种解决方案: 能够在不修改一个功能源代码以及调用方式的前提下,为其加上新功能 总结,原则如下: 1.不

(一)Python入门-5函数:01函数的基本概念-内存分析-函数的分类-定义和调用

一:函数介绍 函数是可重用的程序代码块.函数的作用,不仅可以实现代码的复用,更能实现代码的 一致性.一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现. 在编写函数时,函数体中的代码写法和我们前面讲述的基本一致,只是对代码实现了封 装,并增加了函数调用.传递参数.返回计算结果等内容. 函数基本概念: 1. 一个程序由一个个任务组成:函数就是代表一个任务或者一个功能. 2. 函数是代码复用的通用机制. 二:Python函数的分类 Python中函数分为如下几类: 1. 内置函数

(一)Python入门-5函数:05参数的传递-可变对象-不可变对象-浅拷贝和深拷贝-不可变对象含可变子对象

一:参数的传递 函数的参数传递本质上就是:从实参到形参的赋值操作. Python中“一切皆对象”, 所有的赋值操作都是“引用的赋值”.所以,Python中参数的传递都是“引用传递”,不 是“值传递”.具体操作时分为两类: 1. 对“可变对象”进行“写操作”,直接作用于原对象本身. 2. 对“不可变对象”进行“写操作”,会产生一个新的“对象空间”,并用新的值填 充这块空间.(起到其他语言的“值传递”效果,但不是“值传递”) 可变对象有: 字典.列表.集合.自定义的对象等 不可变对象有: 数字.字符

Python入门之函数-1

本篇目录: 一. 函数的介绍 二. 函数的定义 三. 定义函数的三种类型 四. 函数调用的阶段 五. Return返回值 ========================================================================== 一. 函数的介绍 1. 什么是函数?为什么要有函数? 1.1. 具备一个特定功能的工具(类比)>>>函数 1.2  事先准备工具的过程(类比)>>>函数的定义 1.3 工具直接拿来使用,使用其特定的功能

(一)Python入门-5函数:02形参和实参-文档字符串-函数注释-返回值详解

一:形参和实参 [操作]定义一个函数,实现两个数的比较,并返回较大的值. 1 def printMax(a,b): 2 '''实现两个数的比较,并返回最大值!''' 3 if a >b: 4 print(a,'较大值') 5 else: 6 print(b, '较大值') 7 8 printMax(20,30) 9 printMax(30,5) 10 11 #测试文档字符串的使用 12 help(printMax) 13 help(printMax.__doc__) 上面的 printMax 函