python的作用域

作用域也叫名字空间,是访问变量时查找变量名的范围空间

python中的四个作用域 LEGB

作用域 英文解释 英文缩写
局部作用域 Local(function) L
外部嵌套函数作用域 Enclosing Function local E
函数定义所在模块(文件)的作用域 Global(module) G
Python内建模块的作用域 Builtin(python) B

示例:

# 此示例示意作用域
v = 100
def f1():
v = 200
print("f1.v=", v)
def f2():
v = 300
print("f2.v=", v)
f2()
f1()
print("v=", v)

变量名的查找规则

L ---> E ---> G ----> B

注:

在默认的情况下,变量名赋值会创建或改变当前作用域

内变量的绑定关系

global语句

作用:

告诉解释执行器,global语句声明的一个或多个变量
这些变量的作用域为模块级的作用域,也称为全局变量
全局声明(global)将赋值语句的变量映射到模块文件内部的作用域

语法:

global 变量名1
global 变量名1,变量名2,....

示例:

# 此示例示意global语句的语法和用法
v = 100
def f1():
global v # global声明v为全局变量
v = 200 # 想让此赋值语句去修改全局变量v f1()
print('v=', v) # 200

说明:

全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)

全局变量在函数内部不经过声明就可以直接访问(取值)

不能先创建局部变量,再用global声明为全局变量,此种做法不符合规则

global变量列表里的变量名不能出现在函数的形参列表里

nonlocal语句

作用:

告诉解释器,nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量

语法:

 nonlocal 变量名1, 变量名2, ....

示例:

# 此示例示意nolocal 语句的语法和用法
v = 100
def f1():
v = 200
print("f1.v=", v)
def f2():
nonlocal v
v = 300
print("f2.v=", v)
f2()
print("f1.v=", v)
f1()
print("全局的v=", v)

说明:

nonlocal语句只能在被嵌套函数内部进行使用
对nonlocal变量进行赋值将对外部嵌套函数作用域内的变量进行操作
当有两层或者两层以上函数嵌套时,访问nonlocal变量只对最近的一层变量进行操作
nonlocal语句的变量列表里的变量名不能出现在此函数的形参列表中

def 语句的作用是创建函数

lambda 表达式(又称匿名函数)

作用:

    创建一个匿名函数对象
同def 类似,但不提供函数名

语法:

 lambda [函数形参列表]: 表达式

示例:

# 此示例示意lambda 表达式的语法和用法
# def myadd(x, y):
# return x + y # 用lambda表达式来创建上面的函数
myadd = lambda x, y: x + y print("20+30=", myadd(20, 30)) # 50
print("4 + 5 =", myadd(4, 5)) # 9

说明:

   1. lambda 表达式创建的函数只能包含一条表达式
2. lambda 比函数简单,且可以随时创建和销毁,有利于
降低程序的偶合度

eval函数和exec() 函数

eval(source, global=None, local=None), 把一个

字符串source 当成一个表达式来执行,返回表达式执

行后的结果

exec(source, global=None, local=None) 把一个

字符串source当成程序来执行

Python开发【第十二篇】python作用域和global nonlocal的更多相关文章

  1. 图解Python 【第十二篇】:Django 基础

    本节内容一览表: Django基础:http://www.ziqiangxuetang.com/django/django-tutorial.html 一.Django简介 Django文件介绍:ht ...

  2. Python开发【十二章】:ORM sqlalchemy

    一.对象映射关系(ORM) orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却 ...

  3. python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy

    内容一览: 1.Python操作MySQL数据库 2.ORM sqlalchemy学习 1.Python操作MySQL数据库 2. ORM sqlachemy 2.1 ORM简介 对象关系映射(英语: ...

  4. python【第十二篇】Mysql基础

    内容: 1.数据库介绍及MySQL简介 2.MySQL基本操作 1 数据库介绍 1.1什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同 ...

  5. Python 学习 第十二篇:pandas

    pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,最常用的数据结构是:序列Series和数据框DataFrame,Series类似于numpy中的一维数组,类似于关 ...

  6. 第十二篇 Python函数之全局变量&局部变量&递归函数

    全局变量:在定义的时候,顶头写的,没有任何缩进的变量就是全局变量. 全局变量的特点:在当前文件里的任何地方都可以进行调用 局部变量:在子程序里定义的变量,就是局部变量. 子程序:比如.py文件里,写的 ...

  7. Python学习第十二篇——切片的使用

    Python中使用函数切片可以创建副本,保留原本.现在给出如下代码 magicians_list = ['mole','jack','lucy'] new_lists = [] def make_gr ...

  8. python基础-第十二篇-12.1jQuery基础与实例

    一.查找元素 1.选择器 基本选择器 $("*") $("#id") $(".class") $("element") ...

  9. Swift开发第十二篇——protocol组合&static和class

    本篇分为两部分: 一.Swift 中 protocol 组合的使用 二.Swfit 中 static和class 的使用 一.Swift 中 protocol 组合的使用 在 Swift 中我们可以使 ...

  10. PowerBI开发 第十二篇:钻取

    钻取是指沿着层次结构(维度的层次)查看数据,钻取可以变换分析数据的粒度.钻取分为下钻(Drill-down)和上钻(Drill-up),上钻是沿着数据的维度结构向上聚合数据,在更大的粒度上查看数据的统 ...

随机推荐

  1. I still have a dream!

    当聊起梦想时,哥总会说别跟我谈梦想,我已经戒了!现在的我对梦想并不感冒,总是冷眼旁观很多事情,那些经不起时间检验的事和人,总会消散在历史云烟中,若干年后,又有谁还会记得那些遗弃在历史尘埃中,琐碎的芝麻 ...

  2. 第11节-BLE协议HCI层的硬件接口

    本篇博客由韦东山视频整理所得 如何控制链路层让其发出广播包.数据包?通过HCI层向它发出命令,也可以通过ATT层.L2CAP层向LL层发出数据. 学习资料: 蓝牙协议core_v5.0.pdf < ...

  3. centos7运维记录文档

    问题一:故障记录时间2019年4月4日,查看系统日志报错如下: tail -f /var/log/messages Apr 4 16:29:16 localhost kernel: tracker-e ...

  4. Java 数组ArrayList语法

    恶补基础,记录一下数组ArrayList的常用语法 1.导入 import java.util.ArrayList; 2.定义数组list ArrayList<类名> list = new ...

  5. OpenCV 学习笔记(13)图像转换成视频

    关键 1参数里的分辨率是图像本身的分辨率,而不是指定生成的视频分辨率.如果要修改分辨率,要么后期软件处理,要么读图的时候resize 2要正常退出,不要强制退出. 3生成的只能是avi格式. #inc ...

  6. Linux磁盘管理——分区和文件系统

    1.分区类型 (1)主分区:最多只能有四个(主分区加扩展分区一共有四个). (2)扩展分区:最多有一个,是主分区中的其中一个.不能存储数据也不能格式化,必须再分成逻辑分区才能使用. (3)逻辑分区:是 ...

  7. EasyUI前后端分离

    陈旧的开发模式 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由美工去重新排版,重新选色.Vs前后端分离 美工 ...

  8. win +R

    一.电脑设置免登录密码及修改密码 1.win+R 2.输入control userpasswords2 3.勾选免密码账号登陆,修改密码 二.打开性能监视器 1.win+R 2.输入perfmon.e ...

  9. Intellij Idea 星云常用配置工具箱

    1. 软件配置篇 1.1 关闭默认打开最近的工程选项 1.2. 修改快捷键 1.3 修改字体 1.4 创建类模板 效果如下: 1.5 创建接口模板 效果同上 2. 插件篇 1.1 省略Getter a ...

  10. uiView获取指定子view

    判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -(BOOL) isMemberOfClass: classObj 判断是否是这个类 ...