博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python global nonlocal
阅读量:6005 次
发布时间:2019-06-20

本文共 1537 字,大约阅读时间需要 5 分钟。

global: 

方法之外在modual中的变量定义为全局变量。方法内的变量为局部变量。

 一般情况下,全局变量可以被使用,但是不应该被修改,不然会报错。

不过一般不建议对全局变量做修改,如果有多个方法都对全局变量修改,会乱套的。

例子(1):  

global_var = 123def 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 = 123def 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 = 123def test():    print(global_var)test()print(global_var) 结果---- 123 123

此时可以看到使用的是全局的global_val.

例(4): 

global_var = 123def 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 += 15test()---结果: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()--------结果:2934

以上这种形式就是那种面向过程的编程。

 

转载于:https://www.cnblogs.com/DennyZhao/p/8601021.html

你可能感兴趣的文章
PostgreSQL中的大容量空间探索时间序列数据存储
查看>>
敏捷制造:并不是你想像的矛盾体
查看>>
jQuery选择器和事件
查看>>
十、syslog日志与loganalyzer日志管理
查看>>
Python多进程并发写入PostgreSQL数据表
查看>>
mysql 优化
查看>>
2.4 salt grains与pillar jinja的模板
查看>>
简单的验证码程序
查看>>
MySQL主从(介绍,配置主机,配置从机,测试主从同步)
查看>>
不同版本的outlook客户端配置Office 365 exchange online帐户需要安装的补丁
查看>>
Java服务器-resin
查看>>
Linux下搭建JDK和TOMCAT环境
查看>>
关闭windows休眠
查看>>
Ansible之十一:变量详解
查看>>
那些SCOM 管理包开发中遇到的坑1–Powershell scriptBlock Invoke执行结果的类型
查看>>
关于Server Sql 2008触发器的使用
查看>>
mac常见命令
查看>>
Redhat 系统相关调优参数注解
查看>>
nextus的使用
查看>>
Python自动化开发学习5-2-subprocess模块
查看>>