我正在使用此代码:
def copy_part_of_space(row,column,lenght):
#Copy String to Presentation Space (15)
#Prerequisite Connect Presentation Space
#Prerequisite function: connect_pcomm(presentation_space)
function_number = c_int(8)
data_string = create_string_buffer(lenght*2*2) #number of unicode char *2*2
lenght = c_int(lenght)
ps_position = c_int(((row - 1) * 80)+ column)
foo = hllapi(byref(function_number), data_string, byref(lenght), byref(ps_position))
data_string.value
return {{
0 : 'The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked.',
1 : 'Your program is not connected to a host session.',
4 : 'The host presentation space contents were copied. The connected host presentation space was waiting for host response.',
5 : 'The host presentation space was copied. The keyboard was locked.',
9 : 'A system error was encountered.',
'x' : 'Undocumented error found. Run in circles.',
}.get(foo, 'x'),data_string.value}
想法是从终端复制一些信息;函数需要返回状态信息(使用字典和0,1,4,5,9,x参数)和复制的信息 - 使用data_string.value
要运行一些测试,我使用的代码使用上面的函数:
for a in range(15,22):
print copy_part_of_space(a,7,8)
结果如下:
set(['The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked.', '36343581'])
set(['36343663', 'The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked.'])
set(['The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked.', '36343708'])
set(['36344673', 'The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked.'])
set(['36344740', 'The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked.'])
set(['The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked.', '36344758'])
set(['36344869', 'The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked.'])
正如您所看到的,有时我会在从主机应用程序复制之前获取状态信息 - 就像第一行一样。
但有时我会获得在状态信息之前复制的信息,如第二行。
我不熟悉使用dict
来返回信息,所以我想这可能是一个问题,特别是在混合我试图返回两个变量的事实时。
任何人都可以解释为什么会这样吗?
我知道我可以简单地使用dict
并在返回之前将返回信息保存到变量中,但我真的认为这是一个更优雅的解决方案 - 我错了吗?
答案 0 :(得分:6)
set
s是无序的(或更好,它们的顺序是任意的)。除了使用有序的数据类型之外,你无能为力。
例如,删除set
构造函数{...}
:
return {
0 : 'The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked.',
1 : 'Your program is not connected to a host session.',
4 : 'The host presentation space contents were copied. The connected host presentation space was waiting for host response.',
5 : 'The host presentation space was copied. The keyboard was locked.',
9 : 'A system error was encountered.',
'x' : 'Undocumented error found. Run in circles.',
}.get(foo, 'x'), data_string.value
现在这段代码返回一个tuple(第一个元素是来自&#34的查询结果;错误消息字典",第二个是data_string.value
中包含的内容)。
答案 1 :(得分:3)
您专门返回set
,它被定义为无序数据类型。也就是说,可以以任何顺序返回集合的元素。集合已针对成员资格测试进行了优化(if x in set:
)。集合类似于字典的键:它们可以按任何顺序迭代。
我怀疑为您提供更好的数据类型是一个元组:return (a, b)
然后结果将始终保持相同的顺序。
请注意文字符号的差异:
{'a': 'b', 'c': 'd')
。{'a', 'b', 'c', 'd'}
('a', 'b', 'c', 'd')
['a', 'b', 'c', 'd']