在python中,我将变量设置为字符串,即用户名:
og:url
当我以列表的形式检索用户详细信息时,我想重用变量:
self.loggedInUser = "Hanna"
是否可以这样做,可能更重要的是,这是不好的做法吗?
ħ
答案 0 :(得分:0)
Python允许您随时更改变量的值,因此当然可以将self.loggedInUser
的值从string
更改为list
或{ {1}},或任何其他类型的对象。
但这可能会令人困惑,如果代码期望某种对象并找到不同的类型,可能会导致代码出错,因此最好将其拆分,比如{{1和self.loggedInUser。
答案 1 :(得分:0)
有可能,python变量可以改变它们的类型。 关于不良做法......对此没有规定。就个人而言,我认为它可能会导致很多问题,即将用户带入函数,而不知道它是完整用户还是只知道名称。为什么不是字典?这样用户将始终是一本字典,但未经检索的属性只是在那里。 顺便说一句,在你写的行中它不是一个列表而是一个元组(元组使用圆括号 - (),列表使用方括号 - [])
答案 2 :(得分:0)
在Python中,变量不是强制作为一种类型,变量是对某些对象的引用,如果更改的那些引用仍然是引用。因此,将变量从一个对象更改为另一个不会更改此对象,而是更改引用。
这些操作仅适用于参考:
variable1 = 'ala'
variable1 = []
variable1 = {}
这些操作是关于变量引用的对象的值(inplace):
variable1 ='ala'
variable1 +='o' #variable1 -> 'alao'
所以在你改变的情况下:
self.loggedInUser = "Hanna"
到
self.loggedInUser = (0, "Hanna", "hash", "UID")
您只参与参考...
也可以这样做:
self.loggedInUser = "Hanna"
tp=type(self.loggedInUser)
if tp==str:
self.loggedInUser = (0, self.loggedInUser, "hash", "UID")
elif tp==tuple:
self.loggedInUser = (0, self.loggedInUser[1], "hash", "UID")
else:
print 'sorry, something went wrong...'
带有覆盖引用的未使用对象将变为垃圾。在Cython中,您可以使用cdef定义变量类型。
字典和列表也很好......
以下是自动生存字典的示例:
class vividict(dict):
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
value = self[item] = type(self)()
return value
有了这个,你可以这样做:
self.loggedInUsers=vividict()
self.loggedInUsers['user0']['name']='Hanna'
self.loggedInUsers['user0']['key1']='val1'
self.loggedInUsers['user0']['key2']='val2'
self.loggedInUsers['user0']['key3']='val3'
...