模块的全局变量

首先构件一个settings.py文件,里面包涵多种类型的变量,别的模块从settings.py文件,导入变量测试。

# settings file

class TestClass(object):

    def __init__(self, var):
        self.var = var

var_string = 'change_before'
var_int = 1
var_list = [1]
var_dict = {'a': 'a'}
var_object = TestClass('object var before')

 

1. 使用from . import . 方法导入变量

下面定义了改变settings模块的变量的方法

# change.py file

from settings import var_string, var_int, var_list, var_dict, var_object

def change_setting():
    var_string = "change_after"
    var_int = 2
    var_list.append(2)
    var_dict['a'] = 'b'
    var_object.var = "change_after"


然后是test.py

# test file
import settings
from change import change_setting

change_setting()

print "var_string: %s"  % settings.var_string
print "var_int: %s"  % settings.var_int
print "var_list: %s"  % settings.var_list
print "var_dict: %s"  % settings.var_dict
print "var_object var: %s"  % settings.var_object.var

运行结果为:

var_string: change_before
var_int: 1
var_list: [1, 2]
var_dict: {'a': 'b'}
var_object var: change_after

可以看到string和int类型的变量,其实并未被改变.

 

2. 使用import方法

修改change.py 文件

import settings

def change_setting():
    settings.var_string = "change_after"
    settings.var_int = 2
    settings.var_list.append(2)
    settings.var_dict['a'] = 'b'
    settings.var_object.var = "change_after"

再次运行test.py, 输出结果为:

var_string: change_after
var_int: 2
var_list: [1, 2]
var_dict: {'a': 'b'}
var_object var: change_after

可以看见string和int的类型的变量,被改变了。

 

结论:

    当有类似settings.py的文件时,作为整个项目的全局变量。导入时, 尽量使用import方法, 而不要用from import 方法。否则当动态修改settings.py的变量时,并且变量类型是不可变的。并不会使变量改变。

转载于:https://my.oschina.net/u/569730/blog/751480

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值