类似于python中字符串的可变数据类型

苏拉布

我有2个文件,让他们说a.pyb.pyb.py有一个全局变量让说test(数据类型为字符串),和我导入testa.py现在,在运行时,函数 ina.py调用了 的函数b.py,该函数更改了testin的值,b.py但此更改未显示 in,a.py因为测试是字符串数据类型且字符串是不可变的。

我尝试使用该列表,它有效,但我对使用包含一个元素的列表感觉不太好。那么,是否有任何可变数据类型(类似于字符串)可以用于此目的?

test是字符串时的代码

b.py

test = "hello"
def changeTest():
    global test
    test = "hii"

一个.py

from b import test,changeTest

def callFunctionInB():
    changeTest()
    
print(test)
callFunctionInB()
print(test)

输出:

hello
hello

测试列表时的代码。

b.py

test = ["hello"]
def changeTest():
    test[0] = "hii"

一个.py

from b import test,changeTest

def callFunctionInB():
    changeTest()
    
print(test)
callFunctionInB()
print(test)

输出:

['hello']
['hii']
c0deManiac

Python import 语句非常棘手,您的问题是因为 import 语句的使用不当。

from ... import ...创建导入变量的副本以供参考。要在您的 python 副本上验证这一点,请尝试运行:

### a.py
import b
from b import string_value, change_value

print(string_value)
change_value("new value")
print(string_value)
print("a.py ==> b.string_value = \t", id(b.string_value))
print("a.py ==> string_value = \t", id(string_value))
### b.py
string_value = "previous"

def change_value(given_value):
    global string_value
    print("b.py ==> 'global' string_value \t", id(string_value))
    string_value = given_value

import 语句a.py是为自己创建一个变量的副本,所以当你更新模块 b 的全局变量时,它对 a 中的变量没有影响。

要回答您的问题,有几种可能性:

  1. 使用模块级导入。不要使用from ... import .... 这方面的例子是:
### a.py
import b

print(b.string_value)
b.change_value("new value")
print(b.string_value)
### b.py
string_value = "previous"

def change_value(given_value):
    global string_value
    string_value = given_value
  1. 使用第三个c.py配置文件,甚至更好地为您的用例创建一个具有完整 getter 和 setter 的类。这是最好的方法。遵循这种方法以获得干净且可维护的代码库。许多其他 SO 答案对此都有很好的文档。喜欢在文件之间使用全局变量?

  2. 如果您绝对必须使用from ... import ...,则可以使用丑陋的更新语法。请不惜一切代价避免这种情况上述两件事之一应该很容易实现。供您参考,执行此操作的示例代码为:

### a.py
from b import string_value, change_value

print(string_value)
change_value("new value")
print(string_value)
### b.py
# Please don't use this code except for understanding purpose
import sys
string_value = "previous"

def change_value(given_value):
    sys.modules['__main__'].string_value = given_value

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法在闪亮的Flexdashboard中显示可变数据类型

可变数据类型的Django模型

python中的数据类型(在R中寻找类似于str的东西)

包含列表和其他数据类型的字典字符串,而无需更改python中的数据类型

Python中是否有无法以字符串类型转换的数据类型

按数据类型拆分R中的字符串

从JavaScript中输入的字符串检查数据类型

Java中的字符串数据类型

Julia:从字符串中获取数据类型

如何从字符串中检测数据类型?

为什么只有字符串是不可变的而不是其他数据类型

Python中带有可变数字参数的字符串格式

在python中研究具有可变数字的字符串

获取python3中特定字符串部分的数据类型

如何在Python中检查字符串的“自然”数据类型?

将对象数据类型转换为python中的字符串问题

字符串、整数、数据类型

字符串-数据类型

创建可变数量的字符串

当字符串中有符号时,从字符串中获取数据类型

Java中的字符串替换,类似于力度模板

Swift中字符串的类似于Heredoc的语法

类似于mysql的字符串中的参数替换

.net核心(非强类型)中如何拥有和访问可变数量的连接字符串?

R中是否有类似于Python%的字符串格式运算符?

Python - 在可变数量的子字符串之间查找字符串

根据谷歌表格中可变数量的子字符串过滤字符串

读取Java中具有可变数据类型的CSV

在C中扫描和打印可变数据类型“ double”