Python开发【第十二篇】python作用域和global nonlocal
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的更多相关文章
- 图解Python 【第十二篇】:Django 基础
本节内容一览表: Django基础:http://www.ziqiangxuetang.com/django/django-tutorial.html 一.Django简介 Django文件介绍:ht ...
- Python开发【十二章】:ORM sqlalchemy
一.对象映射关系(ORM) orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却 ...
- python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
内容一览: 1.Python操作MySQL数据库 2.ORM sqlalchemy学习 1.Python操作MySQL数据库 2. ORM sqlachemy 2.1 ORM简介 对象关系映射(英语: ...
- python【第十二篇】Mysql基础
内容: 1.数据库介绍及MySQL简介 2.MySQL基本操作 1 数据库介绍 1.1什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同 ...
- Python 学习 第十二篇:pandas
pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,最常用的数据结构是:序列Series和数据框DataFrame,Series类似于numpy中的一维数组,类似于关 ...
- 第十二篇 Python函数之全局变量&局部变量&递归函数
全局变量:在定义的时候,顶头写的,没有任何缩进的变量就是全局变量. 全局变量的特点:在当前文件里的任何地方都可以进行调用 局部变量:在子程序里定义的变量,就是局部变量. 子程序:比如.py文件里,写的 ...
- Python学习第十二篇——切片的使用
Python中使用函数切片可以创建副本,保留原本.现在给出如下代码 magicians_list = ['mole','jack','lucy'] new_lists = [] def make_gr ...
- python基础-第十二篇-12.1jQuery基础与实例
一.查找元素 1.选择器 基本选择器 $("*") $("#id") $(".class") $("element") ...
- Swift开发第十二篇——protocol组合&static和class
本篇分为两部分: 一.Swift 中 protocol 组合的使用 二.Swfit 中 static和class 的使用 一.Swift 中 protocol 组合的使用 在 Swift 中我们可以使 ...
- PowerBI开发 第十二篇:钻取
钻取是指沿着层次结构(维度的层次)查看数据,钻取可以变换分析数据的粒度.钻取分为下钻(Drill-down)和上钻(Drill-up),上钻是沿着数据的维度结构向上聚合数据,在更大的粒度上查看数据的统 ...
随机推荐
- 跟着9张思维导图学习Javascript js 关键字和保留字 css3中的BFC,IFC,GFC和FFC
跟着9张思维导图学习Javascript 学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将 po 出我收集的 9 张 javascript 相关的思维导图(非原创). 思维导图小ti ...
- 0x03 Python logging模块之Formatter格式
目录 logging模块之Formatter格式 Formater对象 日志输出格式化字符串 LogRecoder对象 时间格式化字符串 logging模块之Formatter格式 在记录日志是,日志 ...
- (原)Ubuntu安装TensorRT
转载请注明出处: https://www.cnblogs.com/darkknightzh/p/11129472.html 参考网址: https://docs.nvidia.com/deeplear ...
- Jmeter 使用自定义变量
有些情况下比如发起测试时URL的主机名和端口需要在采样器中出现多次,这样就有个问题,当测试的主机更改时, 我们需要修改主机名称,这时就需要修改多个地方,如果多的情况会有遗漏.如果我们在配置脚本的时候, ...
- 五、Xpath与lxml类库
什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...
- QElapsedTimer定时器记录程序执行时间
QElapedTimer类提供了一种快速计算运行时间的方法,从Qt4.7引入. QElapsedTimer类通常用于快速计算两个事件之间经过了多少时间.它的API与QTime相似,因此可以将正在使用的 ...
- Netty实战入门详解——让你彻底记住什么是Netty(看不懂你来找我)
一.Netty 简介 Netty 是基于 Java NIO 的异步事件驱动的网络应用框架,使用 Netty 可以快速开发网络应用,Netty 提供了高层次的抽象来简化 TCP 和 UDP 服务器的编程 ...
- docker学习11-上传本地镜像到镜像仓库
前言 在本地自己制作用过镜像后,上传到镜像仓库,这样方便在不同的机器上快速搭建同一套环境. 如果公开的话,别人也可以用你的镜像快速搭建环境,类似于 GitHub 本地代码上传到代码仓库,再从仓库拉取代 ...
- c语言中的数据变量类型,大小
C中有哪些数据类型? 回答: 有两种类型的数据类型,用户定义和预定义.预定义的数据类型是int,char,float,double等,用户使用标签struct,union或enum创建用户定义的数据类 ...
- WebStorm取消默认style样式折叠
WebStorm取消默认style样式折叠: File--->Settings打开一个窗口 Edit--->CodeFolding 把HTML style attribute的前面的钩去掉 ...