考虑我的简单课程
class stud():
def __init__(self,a,b):
self.name=a
self.mark=b
self.message=self.name + ' ' +str(self.mark)
s1=stud('student1',40)
print s1.message --->output=student1 40
s1.name='student2'
print s1.message ----> output =student1 40 , but i expected student2 40
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么当我打印self.message [在修改对象的name属性后],它打印旧的值?我知道init方法在对象创建期间只调用一次,name属性在那时设置为值'student1'.但是,我正在改变下一行,再次打印self.message不应该列出新值?
为什么这个self.message没有更新修改后的值?
我试图difflib.SequenceMatcher在Python中使用返回最大的公共字符串
string1="""ERROR agave_util.py:64 Timed out waiting for HA alert generated CRITICAL ha_test_util.py:44 HA alert generated, Stack:File "/main/qa/py/qa/agave/nutanix_test_runner_worker.py", line 909, in <module> main(FLAGS, sync_state) File "/main/qa/py/qa/agave/nutanix_test_runner_worker.py", line 878, in main worker.run(sync_state) File "/main/qa/py/qa/agave/nutanix_test_runner_worker.py", line 326, in run if not self.__test_phase_wrapper(test_method): File "/main/qa/py/qa/agave/nutanix_test_runner_worker.py", line 502, in __test_phase_wrapper func() File "/main/qa/test/agave/acropolis_tests/ha/best_effort_power_off_test.py", line 87, in test_stargate_master_power_off self._host_power_off_test_cycle(host_of_stargate_master) File "/main/qa/test/agave/acropolis_tests/ha/best_effort_power_off_test.py", line 27, in _host_power_off_test_cycle self.ha_util.power_off_and_check_ha(host) File "/main/.python/qa/util/agave_tools/ha_test_util.py", line 469, in power_off_and_check_ha self.wait_for_ha_alert(cutoff_usecs=latest_alert_start, **kwargs) File "/main/.python/qa/util/agave_tools/ha_test_util.py", line 418, in wait_for_ha_alert interval=interval, File "/main/.python/qa/util/agave_tools/ha_test_util.py", line …Run Code Online (Sandbox Code Playgroud) 列表理解中的一个基本问题是我开始这样做,
列表理解可以返回两个数组吗?
就像我试图将我的代码转换为列表理解
b=[10,2,3]
c=[10,11,12]
d=[]
f=[]
a=10
for i in b:
if a>i:
for j in c:
d.append(j)
print d
Run Code Online (Sandbox Code Playgroud)
我可以使用list comprehension将上面的代码转换为
print [j for i in b if a>i for j in c ]
Run Code Online (Sandbox Code Playgroud)
但现在我想在我的初始代码中添加一个额外的块,看起来像
b=[10,2,3]
c=[10,11,12]
d=[]
f=[]
a=10
for i in b:
if a>i:
for j in c:
d.append(j)
else:
f.append(i)
print d
print f
d=[10, 11, 12, 10, 11, 12]
f=[10]
Run Code Online (Sandbox Code Playgroud)
有什么方法可以将这个额外的东西添加到我的初始列表理解中吗?
我刚试过这样的列表理解
[i if i==0 else i+100for i in range(0,3)]
Run Code Online (Sandbox Code Playgroud)
它工作,但当我尝试类似的字典理解时,它会抛出一个错误:
d={3:3}
{d[i]:0 if i==3 else d[i]:True for i in range(0,4) }
Run Code Online (Sandbox Code Playgroud)
可能是什么原因?我怎样才能使用dict理解if else?
这会产生错误:
{d[i]:0 if i==3 else d[i]:True for i in range(0,4) }
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
注意:我在这里使用的示例只是一个随机的,而不是我的实际代码.我可以用替代解决方案来做到这一点,但我现在只是在研究dict理解.
如何创建不同的变量名称?
就像我在循环中迭代一样,比如从 0 到 100。
我需要在每次迭代中创建不同的变量并为其分配一些值。一个例子
for i in range(0,100):
'var'+i=i
Run Code Online (Sandbox Code Playgroud)
似乎无效。我想在每次迭代中创建变量,例如 var0、var1 等,并且应该能够使用该名称访问它。有人能给我建议一个解决方案吗
OOP中的一个基本问题.
test.py 文件内容:
class test(object):
def __init__(self):
print 'INIT of test class'
obj=test()
Run Code Online (Sandbox Code Playgroud)
然后我打开了另一个文件.
我刚刚继承了上面的测试类:
from test import test
class test1(test):
def __init__(self):
pass
Run Code Online (Sandbox Code Playgroud)
所以当我运行这个类时,父类的init正在执行.
我读到我可以通过使用来避免它
if __name__='__main__'
Run Code Online (Sandbox Code Playgroud)
我可以解决这个问题,但我的问题是为什么父类的init正在执行,因为我只是在我的第二个文件中导入这个类,对象创建代码是如何执行的?