python global nonlocal
global:
方法之外在modual中的变量定义为全局变量。方法内的变量为局部变量。
一般情况下,全局变量可以被使用,但是不应该被修改,不然会报错。
不过一般不建议对全局变量做修改,如果有多个方法都对全局变量修改,会乱套的。
例子(1):
global_var = 123 def test():
global_var = 1
print(global_var) test()
print(global_var) ---结果
1
123
尽管global_var 定义了一个全局变量,但是test方法中的global_val为一个新的局部变量,只是两个名字一样而已,但是两个对象。因此可看到test内的print打印的是局部变量结果为1,test后的print为全局变量(局部变量只能在方法体内有效),结果为123。
例子(2):
global_var = 123 def test():
global_var += 1
print(global_var) test()
print(global_var)
执行结果会报错:
UnboundLocalError: local variable 'gloal_var' referenced before assignment
因为test中的 global_val +=1 表示 global_val之前已经定义过,然后+1操作,但是在执行时,发现test中并未有局部变量global_val。因此报错,因全局变量没有被在test中声明。
因此不能被修改。
例(3):
global_var = 123 def test():
print(global_var) test()
print(global_var) 结果----
123
123
此时可以看到使用的是全局的global_val.
例(4):
global_var = 123 def test():
global global_var
global_var += 1
print(global_var) test()
print(global_var)
结果---
124
124
在test中定义global_val 为使用全局 global。因此全局的变量发生改变
nonlocal: 方法中的子方法调用父方法中的变量。
一般我们使用将父方法中的变量作为参数传入仅子方法中进行调用使用,
使用这种的话就不需要调入直接可操作。
但这种限制了子方法仅仅对父方法的内部操作,扩展性差。
def test():
t_var = 23
t_var += 1
print(t_var)
sub_test()
print(t_var) def sub_test():
nonlocal t_var
t_var += 15 test() ---结果:
SyntaxError: no binding for nonlocal 't_var' found
子方法必须定义在父方法中才可使用nonlocal,不然无效
def test():
t_var = 23
t_var += 1
print(t_var) def sub_test():
nonlocal t_var
t_var += 15 sub_test()
print(t_var) test() --------结果:
29
34
以上这种形式就是那种面向过程的编程。
python global nonlocal的更多相关文章
- python函数知识二 动态参数、函数的注释、名称空间、函数的嵌套、global,nonlocal
6.函数的动态参数 *args,**kwargs:能接受动态的位置参数和动态的关键字参数 *args -- tuple *kwargs -- dict 动态参数优先级:位置参数 > 动态位置参数 ...
- python-函数-动态传参,作用域的问题,函数嵌套,global nonlocal
⼀. 函数参数--动态传参 之前我们说过了传参, 如果我们需要给⼀个函数传参, ⽽参数⼜是不确定的. 或者我给⼀个 函数传很多参数, 我的形参就要写很多, 很⿇烦, 怎么办呢. 我们可以考虑使⽤动态参 ...
- Day 10 动态参数&名称空间,局部全部.函数嵌套&global nonlocal关键字.
一.动态参数#形参 有3种动态参数#*args 动态参数,不定长参数def func (*args): print(args,type(args))func(1,2,"alex", ...
- python's nonlocal
[python's nonlocal] nonlocal是python3.x中新加的关键字,用于引用本作用域外层作用域的名字 参考:http://blog.csdn.net/chain2012/art ...
- python global vs nonlocal (2)
上一篇中简述了这两个关键字的基本用法: global用于在局部作用于修改或重定义全局变量 nonlocal用于在内部作用域修改或重定义外部变量(全局变量除外) 这只是很浅的理解方式 注意python的 ...
- [python]global与nonlocal关键字
在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local).嵌套作用域(Enclosing function locals).全局作用域(Global).内置作用域(bui ...
- python 本地变量和全局变量 locals() globals() global nonlocal 闭包 以及和 scala 闭包的区别
最近看 scala ,看到了它的作用域,特此回顾一下python的变量作用域问题. A = 10 B = 100 print A #10 print globals() #{'A': 10, 'B': ...
- 【学习笔记】--- 老男孩学Python,day10, 函数, 动态参数 命名空间\作用域 global nonlocal
1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序:位置---*args---默认值---**kwargs 在形参上*聚合, **聚合 在实参上*打散, ...
- 【Python成长之路】python 基础篇 -- global/nonlocal关键字使用
1 课程起源 有一次在工作中编写python工具时,遇到一个 问题:从配置文件读取变量A后,无法在内存中把A的值改变成新的内容.为了解决"更新内存中变量"的这个问题,查找了一些帖子 ...
随机推荐
- sqlserver linux 容器运行
sqlserver linux 版本的容器大小目前已经相对比较小了,对于开发来说已经比较方便了 docker-compose 文件 version: "3" services: d ...
- var_dump() 格式化输出 | 显示不全
PHP 使用‘var_dump($var)’时 没有格式化输出,显得乱糟糟的.原因是没有启用‘XDebug’扩展 [php.ini] ; XDEBUG Extension zend_extension ...
- MHA之Binlog Dump (GTID)僵尸进程清理
master存活的状态下切换 masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_mas ...
- C语言面试题5
C语言面试宝典 第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为 ...
- FastAdmin 插件刷新缓存出现 200 红色提示框解决 always_populate_raw_post_data
使用 phpStudy 全新安装了 FastAdmin,PHP 版本是 5.6. 安装完成后在刷新插件缓存时出现红色 提示消息,但状态 为 200. 打开 F12 看,发现有以下信息. <br ...
- linux SSH各配置项解释
Linux下SSH各配置项解释 关于ssh 设置的相关总结(ssh最大连接数.ssh连接时长.安全性配置等)以redhat6.3为例 ssh配置文件在: /etc/ssh/sshd_config可以打 ...
- PHP中的11个魔术方法总结:__construct,、__destruct、__call等
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...
- 常用Web框架
1.Aliceui Aliceui是支付宝的样式解决方案,是一套精选的基于 spm 生态圈的样式模块集合,是 Arale 的子集,也是一套模块化的样式命名和组织规范,是写 CSS 的更好方式. git ...
- redis在PHP中的基本使用案例(觉得比较实用)
源地址 http://www.t086.com/article/4901
- 关于clearfix和clear的研究
今天领导跟我说到这个问题,我上网找了些资料,已转载一篇文章到本博客(后一篇),摘自百度文库. ps:还有一种写法就是: CSS代码: .clearfix:after { content: " ...