python变量的作用_python 变量的作用范围

python 的变量作用域分三种

1: local 指当前作用域

通过locals() 能获取该命名空间的对象的dict

2:global 对应某个 .py 模块的作用域

通过globals() 能获取该命名空间的对象的dict

3:builtin 最顶层的作用域。

每次执行一个函数时, 就会创建新的局部命名空间。

解释器在检索变量的时候会按照  local》global 》builtin 的顺序检索。

比如检索变量 test(只要该变量没有被声明为local变量,=, -=, += 这样的操作会将变量声明为local变量)会先从 local 检索, 没有检索到则 检索 global, 再没检索到则检索 builtin. 如果最后没有检索到 则抛出 NameError的异常。

def space():

a = 21

print "local:", locals()

print "globals:", globals()

执行该函数的输出为:

local: {'a': 21}

globals: {'__builtins__': , '__file__': 'space.py', '__package__': None, 'test': , '__name__': '__main__', '__doc__': None}

这个栗子很好理解, 那么如果

a = 31

def space():

a = 21

print "local:", locals()

print "globals:", globals()

space()

的输出为:

local: {'a': 21}

globals: {'a': 31, '__builtins__': , '__file__': 'space.py', '__package__': None, 'test': , '__name__': '__main__', '__doc__': None}

红色的能很方便我们理解 local 和global 作用域的区别。

在函数里面, 只要有 =, +=, -= 这样的赋值语句, 那么被赋值的变量就是local的

举个栗子:

deft(a):

a+= 1

print "a in function:", aprint "locals:", locals()

a= 21t(a)

输出为:

a in function: 22

locals: {'a': 22}

a after invoking: 21

下面的代码也能正常进行

deft():if a > 1: # 检索a会先从local作用域检索, 然后在检索global作用域, 发现a = 21print "this a is global:", aprint "a in function:", aprint "locals:", locals()

a= 21t()

而下面的代码会报错:

deft():if a > 1:print "this a is global:", a

a= 3 # 此处因为有 +=, =, -= 这样的, 所以a在该函数t内是local的, 只会在local作用域检索a。然后上一句if a > 1会报错

print "a in function:", aprint "locals:", locals()

a= 21t()

报错:

UnboundLocalError: local variable 'a' referenced before assignment

在函数里面,如果所传的值是容引用,那么在函数里面对容器的修改也会修改 global作用域内的该容器。

deft(a):

a['hello'] = "happy"

print "a in function:", aprint "locals:", locals()

a={}

t(a)print "a after invoking:", a

的输出为:

a in function: {'hello': 'happy'}

locals: {'a': {'hello': 'happy'}}

a after invoking: {'hello': 'happy'}

函数的参数默认值, test_default(下面栗子的)默认值为引用类型会在使用之后一直保存,每次对默认值的修改都会保留下来, 类似与C的静态局部变量。但是如果自己传了一个值来替换引用的默认值, 则不会修改保留下来的默认值。

def test_default(k, v, d ={}):

d[k]=vprint "d reference:", d

test_default("k3", "v3", d ={})  #此处传了一个值来替换引用的默认值, 那么修改的不是默认引用的值

test_default("k1", "v1")

test_default("k2", "v2")

的输出为:

d reference: {'k3': 'v3'}

d reference: {'k1': 'v1'}

d reference: {'k2': 'v2', 'k1': 'v1'}

lambda 里面的默认值

funcs = [lambda x, i=i: x*i for i in range(4)]print [func(2) for func in funcs]

的输出为:

[0, 2, 4, 6]

而:

funcs = [lambda x: x*i for i in range(4)]print [func(2) for func in funcs]

的输出为:

[6, 6, 6, 6]

函数在没有执行前, 内部代码不执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员必须知道的十大基础实用算法及其讲解

本文盘点程序员必须知道的十大基础实用算法及其讲解。 算法一:快速排序算法 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(nlogn) 次比较。在最坏状况下则需要Ο(n2) 次比较,但这种状况并不常见。事实上&#…

sql 日期和当前日期时间差_详解PostgreSQL 如何获取当前日期时间

概述开发数据库应用或者调试代码时,经常需要获取系统的当前日期和时间,今天主要看一下 PostgreSQL 中提供的相关函数。一、当前日期CURRENT_DATECURRENT_DATE 函数用于获取数据库服务器的当前日期:postgres# SELECT CURRENT_DATE;调用该函数时…

聊聊如何构建自驱团队(3)

聊聊如何构建自驱团队(3)“道“和”术“对于技术出生的管理者在进行问题思考时,总会深陷“术”和“道”两层维度问题的困扰:“道”就是平时大家提到的理论实践,而“术”则是与实际相匹配的一些方法。敏捷项目管理为构建…

linux c 数据库访问框架,linux c 开发通用结构,框架

了解其它语言的框架例:java Struts1、Struts2、Hibernate、Mybatis、Ibatis、Spring 等等,利用这些框架能够快速的开发出稳定的应用程序,在java中这些框架的功能主要提供一些浓缩版的功能。仔细思索:其它语言的通用结构?例&#x…

python list常用方法_Python中列表(List)的基本用法

一、列表的创建 list((3, 5, 7, 9, 11)) list(range(1, 10, 2)) """ 字符串、集合、字典的键、字典的键:值对转列表 """ list(hello, world) list({3, 7, 8}) list({a:3, b:9, c:78}) list({a:3, b:9, c:78}.items()) ""&q…

我们只知大势将至,却不知未来已来

❈ 凯文•凯利 《必然》: 未来的一切事物的生命都将是无穷尽的升级,而且迭代的速度不断的在加速。包括看得见的事物,也包括看不见的审美观和价值观。无论你使用一项工具的时间有多长,不断的升级都会把你变成一个菜鸟,从…

c#爬虫-1688官网自动登录

背景在1688官网里面有很多信息是需要登录才能看得到的,比如商家的联系电话等等。那么我们在抓取它的网页的时候,肯定是需要维持登录状态才能得到对应的内容。这里面就会涉及到自动登录的问题。登录地址https://login.1688.com/member/signin.htm自动登录…

tensorrt轻松部署高性能dnn推理_部署环境之:tensorRT的插件

TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxnet、Pytor…

linux网卡驱动 pdf,Linux下网卡驱动程序.pdf

zekairecv 于 2015-10-04 00:58:57发表:谢谢weilee1 于 2015-04-19 17:41:05发表:看看雪语阑风 于 2014-12-04 11:03:39发表:楼主好人Doctor易 于 2014-10-08 13:06:25发表:也不说网卡型号吗wzj3521787 于 2014-09-12 11:12:10发表:这是指网卡驱动编程还是编译lcdstrongman_hw …

python数学计算_初学者Python学习笔记--数学计算

四则运算 加减乘除 1 2 3 10 - 6 4 5 * 5 25 20 / 5 4.0 3 ** 3 27 取整计算 13//3 4 取余数计算 13%3 1 计算顺序,括号>乘除>加减 4 5 - (36) * 2 -9 特殊赋值,可以用_来分割数字,简便识别 num 111_222_333 num 111222333 四舍五入…

做一个网站多少钱?

「一辆车子多少钱?一个房子多少钱?」 这问题在工程师或设计师的眼里就如「一辆车子多少钱?一个房子多少钱?」,这个问题实在空泛到一个让人无法言语的境界,这也是我最常被问到的问题「做一个网站多少钱?」。…

[Abp 源码分析]多租户体系与权限验证

点击上方蓝字关注我们0.简介承接上篇文章我们会在这篇文章详细解说一下 Abp 是如何结合 IPermissionChecker 与 IFeatureChecker 来实现一个完整的多租户系统的权限校验的。1.多租户的概念多租户系统又被称之为 Saas ,比如阿里云就是一个典型的多租户系统&#xff0…

python中csv文件把成绩加入_【学习笔记】python3中csv文件使用

1. readercsv.reader(f, delimiter,):按行读取数据,reader为生成器,读取的每行数据为列表格式,可以通过delimiter参数指定分隔符。import csvwith open(data.csv, encodingutf-8) as f:reader csv.reader(f)header next(reader)…

生存是一种毅力

三月初回到成都,出站时还是凌晨5点多,第一次这么早站在成都的火车站,拥挤的人群和车辆,我的神志却异常的清醒,坚持不要母亲来接我. 到家洗漱后到头就睡,一觉醒来10点多,中午的成都虽不像北京那么阳光普照但也感觉暖暖的.想起在北京训练营的日子,"枯藤老树昏鸦"每天伴…

linux truncate文件,linux系统编程:用truncate调整文件大小

truncate的使用非常简单:int truncate(const char *path, off_t length);参数1:文件名参数2: 文件需要被调整的大小length 大于 文件大小, 文件后面会填充空白字节或者空洞length 小于 文件大小, 文件多出的部分,会被…

python数据分析与展示 pdf课件_python数据分析与展示 课件 相关实例(示例源码)下载 - 好例子网...

开发语言:Python | 大小:9.84KB | 发布时间:2020-05-13 | 立即下载 开发语言:Python | 大小:0.24M | 发布时间:2019-09-09 | 立即下载 开发语言:Python | 大小:0.15M | 发布时间&…

如何在 ASP.Net Core 中使用 SignalR

SignalR for ASP.Net Core 是 SignalR 的浴火重生版,允许你在 ASP.Net Core 中实现实时通讯,这里的 实时 意味着双方都能快速的感知对方发来的消息,比如:一旦 server 端有需要推送的内容将会直接 push 到 client,这和原…

搞笑动图:这些痛,只有程序员懂…

“代码上线后又追加了新特性” “在生产环境做 hotfix” “刚调稳定的系统,公司叕空降了一位架构师,叕要重构现有系统…… ” “当程序员听客户说还在用 IE 时” “当黑客拿到 root 权限之后” “代码进入循环分支后” “项目交接,客户要求开…

python中闭包不是立刻执行_一道神奇的Python面试题,你会吗?

无意间,看到这么一道Python面试题:以下代码将输出什么?def testFun():temp [lambda x : i*x for i in range(4)]return tempfor everyLambda in testFun():print (everyLambda(2))脑中默默一想,这还用说么,肯定是&…

.net 中通用的formatstring格式符整理

格式化日期和数字的字符串经常要用到这个, 就把帮助里面的东西大概整理了一些列在这里了. 下表描述了用来格式化 DateTime 对象的标准格式说明符。 格式说明符名称说明d短日期模式显示由与当前线程关联的 DateTimeFormatInfo.ShortDatePattern 属性定义的模式或者由指定格式提供…