再谈变量作用域与变量引用

by:授客 QQ1033553122

module3.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
__author__ = 'shouke'
 
var = 'var_in_module3'
 

module2.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
__author__ = 'shouke'
from module3 import var
 
class ClassOne:
    var = 'global var in ClassOne' # 类中的全局变量
 
    def func(self):

print('var in func for ClassOne: %s' % var) # 引用module3.var

       ClassOne.var = 'var whose value changed in func of ClassOne'

module1.py

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 

__author__ = 'shouke'

from module3 import var

from module2 import ClassOne

def function():

print('var in function: %s' % var)  # 引用module3.var

var1 = 'value_for_var1'

    if True:

print('var1 in if: %s' % var1)

var1 = 'value_changed_for_var1'

        print('var1 in if: %s' % var1)

print('var1 out of if: %s' % var1)

print('\nbegan for loop \n')

for num in range(1, 2):

var1 = 'var1_in_for_loop'

        if True:

print('var1 in if for loop: %s' % var1)

var1 = 'value_changed for var1 in if for_loop'

            print('var1 in if for loop: %s' % var1)

print('var1 out of if for loop: %s' % var1)

print('var1 out of for loop: %s' % var1)

class ClassTwo:

def func(self):

var = ClassOne.var # 引用值

print('var in func of ClassTwo: %s' % var)

def func2(self):

ClassOne.var = 'value changed in ClassTwo' # 修改值

if __name__ == '__main__':

function()

print('\n')

obj1 = ClassTwo()

obj1.func()

obj2 = ClassOne()

obj2.func()

print('\n')

obj2.func()

obj1.func()

print('\n')

obj1.func2()

obj2.func2()

输出:

说明:

1、如何在不同模块中引用同一个变量?

答案:在一个模块中定义一个全局变量并赋值,然后在其它模块中通过导入定义的变量,在适当的位置引用该变量,如上例中,在module3中定义一个变量,然后通过语句 from module3 import var 导入变量

2、如何在类中定义一个全局变量?

答案:

class ClassName:

var_name = xxxxxxxx

在其它模块中,通过导入该类,然后通过ClassName.var_name方式引用变量,或者给变量赋值。

3、try……except,if,for,while子句中的变量作用域与赋值

举例说明


Python 再谈变量作用域与变量引用的更多相关文章

  1. javascript中的变量作用域以及变量提升

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...

  2. javascript中的变量作用域以及变量提升详细介绍

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解变量作用域 “一个变量的作用域表示这个变量存在的上下文 ...

  3. 再谈java两种变量(基本类型和引用类型)(综合各路大神)

    基本类型: 基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值. int  a:   a=250: //声明变量a的同时,系统给a分配了数据空间. 引用类型: 是一个对象类型,值是什么呢? ...

  4. PHP变量作用域以及地址引用问题

    作用域的概念: 在PHP脚本的任何位置都可以声明变量,但是,声明变量的位置会大大影响访问变量的范围.这个可以访问的范围称为作用域. 主要的常用的包括:局部变量.全局变量.静态变量. 1.局部变量:就是 ...

  5. js的变量作用域 ,变量提升

    (function(){ a = 5; alert(window.a); var a = 10; alert(a); })(); 结果: undefined 10 代码等同于下面 var a = un ...

  6. [TimLinux] Python 再谈元类 metaclass

    本博文通过对以下链接进行理解后,编写. https://stackoverflow.com/questions/100003/what-are-metaclasses-in-python 1. 类 类 ...

  7. [TimLinux] Python 再谈装饰器

    参考链接:https://stackoverflow.com/questions/739654/how-to-make-a-chain-of-function-decorators 1. 函数对象 能 ...

  8. Python 再谈字符串

    字符串除了要用引号来创建之外,其他和元组一样,不能修改,如果要修改只能用切片或者拼接的方式. 其他的什么乱七八糟的运算符都一样 一些不同 capitalize()-将字符串的第一个字母大写 str1. ...

  9. JavaScript基础——理解变量作用域

    一旦你开始在JavaScript应用程序中添加条件.函数和循环,就需要理解变量作用域.变量作用域规定了如何确定正在执行的代码行上的一个特定变量名的值. JavaScript允许你既定义全局版本又定义局 ...

随机推荐

  1. Mybatis框架三:DAO层开发、Mapper动态代理开发

    这里是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下来做到了简单的增删改查:http://www.cnblogs.com/xuyiqi ...

  2. 1,rocketmq 的原理与安装教程

    参考文档 http://blog.csdn.net/a19881029/article/details/34446629 https://github.com/alibaba/RocketMQ htt ...

  3. typescript 的安装

    1.全局安装 typeScript 包       npm install typescript -g (tsc -v 查看ts版本)2.解决模块的声明文件问题   npm install @type ...

  4. python 使用PyInstaller将程序打包

    PyInstaller可以用来打包python应用程序,打包完的程序就可以在没有安装Python解释器的机器上运行了.类似于C#窗体程序使用Setup Factory 9 Trial进行打包. 安装: ...

  5. Python日常实践(1)——SQL Prompt的Snippets批量整理

    引言 个人平时在写sql脚本的时候会使用到SQL Prompt这款插件,除了强大的智能提示和格式化sql语句功能,我还喜欢使用Snippets代码段功能.比如我们可以在查下分析器输入ssf后按Tab键 ...

  6. dart之旅(二)- 内建类型

    目录 number 类型 字符串 布尔类型 像大多数语言一样,dart 也提供了 number,string,boolean 等类型,包括以下几种: numbers strings booleans ...

  7. 可重入锁 & 不可重入锁

    可重入锁指同一个线程可以再次获得之前已经获得的锁,避免产生死锁. Java中的可重入锁:synchronized 和 java.util.concurrent.locks.ReentrantLock. ...

  8. Java并发编程笔记之Timer源码分析

    timer在JDK里面,是很早的一个API了.具有延时的,并具有周期性的任务,在newScheduledThreadPool出来之前我们一般会用Timer和TimerTask来做,但是Timer存在一 ...

  9. 附实例!实现iframe父窗体与子窗体的通信

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 本文主要会介绍如何基于MessengerJS,实现iframe父窗体与子窗体间的通信,传递数据信息.同时本 ...

  10. About me & 一些置顶的博文

    About me 一只历史上最弱的 \(\text{hnoier}\) ... 身在 \(\text{hn}\) 弱校,除了在四大名校夹缝中生存,还要受到同校 \(\text{Julao}\) 的鄙视 ...