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的更多相关文章

  1. python函数知识二 动态参数、函数的注释、名称空间、函数的嵌套、global,nonlocal

    6.函数的动态参数 *args,**kwargs:能接受动态的位置参数和动态的关键字参数 *args -- tuple *kwargs -- dict 动态参数优先级:位置参数 > 动态位置参数 ...

  2. python-函数-动态传参,作用域的问题,函数嵌套,global nonlocal

    ⼀. 函数参数--动态传参 之前我们说过了传参, 如果我们需要给⼀个函数传参, ⽽参数⼜是不确定的. 或者我给⼀个 函数传很多参数, 我的形参就要写很多, 很⿇烦, 怎么办呢. 我们可以考虑使⽤动态参 ...

  3. Day 10 动态参数&名称空间,局部全部.函数嵌套&global nonlocal关键字.

    一.动态参数#形参 有3种动态参数#*args 动态参数,不定长参数def func (*args): print(args,type(args))func(1,2,"alex", ...

  4. python's nonlocal

    [python's nonlocal] nonlocal是python3.x中新加的关键字,用于引用本作用域外层作用域的名字 参考:http://blog.csdn.net/chain2012/art ...

  5. python global vs nonlocal (2)

    上一篇中简述了这两个关键字的基本用法: global用于在局部作用于修改或重定义全局变量 nonlocal用于在内部作用域修改或重定义外部变量(全局变量除外) 这只是很浅的理解方式 注意python的 ...

  6. [python]global与nonlocal关键字

    在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local).嵌套作用域(Enclosing function locals).全局作用域(Global).内置作用域(bui ...

  7. python 本地变量和全局变量 locals() globals() global nonlocal 闭包 以及和 scala 闭包的区别

    最近看 scala ,看到了它的作用域,特此回顾一下python的变量作用域问题. A = 10 B = 100 print A #10 print globals() #{'A': 10, 'B': ...

  8. 【学习笔记】--- 老男孩学Python,day10, 函数, 动态参数 命名空间\作用域 global nonlocal

    1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序:位置---*args---默认值---**kwargs 在形参上*聚合, **聚合 在实参上*打散, ...

  9. 【Python成长之路】python 基础篇 -- global/nonlocal关键字使用

    1 课程起源 有一次在工作中编写python工具时,遇到一个 问题:从配置文件读取变量A后,无法在内存中把A的值改变成新的内容.为了解决"更新内存中变量"的这个问题,查找了一些帖子 ...

随机推荐

  1. bat中的“多线程”处理代码

    大家都知道,批处理中运行的都是一步步单进程执行, 但如果进程执行比较慢,如PING一个不通的IP地址,那就会大大影响批处理程序的执行效率. 如下内容将简单举例,在WINDOWS下使用批处理做多进程并发 ...

  2. Bloom Filter(布隆过滤器)的概念和原理

    Bloom filter 适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集 基本原理及要点: 对于原理来说很简单,位数组+k个独立hash函数.将hash函数对应的值的位数组置1,查找时 ...

  3. 【转】每天一个linux命令(27):linux chmod命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/11/29/2794010.html chmod命令用于改变linux系统文件或目录的访问权限.用它控制文 ...

  4. 使用Oracle PROFILE控制会话空闲时间

    客户想实现对会话空闲时间的控制,下面是做的一个例子.Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation.保留所有权利 ...

  5. java 设计模式:单例模式

    Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯 ...

  6. 【appium】根据class_name定位元素

    目前没有尝试成功,等成功后补充 class_name=class可以通过UIAutomatorViewer获得.

  7. C++ 常用函数方法

    /* * 拆分字符串 * 参数: * strData 字符串 * split 分隔符 * 返回: * 返回动态数组std::vector<std::string> ,记得要delete 内 ...

  8. linux 信号处理 三 (信号集的使用)

    sigprocmask系统调用 使用条件: 1.有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数.这种情况是通过阻塞信号实现的. 2. ...

  9. 我的JdbcUtils类

    这是目录结构: 其中后面三个类都是第一个类的子类,第一个类是父类. JdbcUtils: package com.smt.db; import java.io.IOException; import ...

  10. neo4j图数据库入门

    一.安装及启动 1.安装 Java SDK 1)     地址:http://www.oracle.com/technetwork/java/javase/downloads 2)     下载:jd ...