提问人:user2345 提问时间:7/31/2015 最后编辑:Jon Skeetuser2345 更新时间:8/1/2015 访问量:127
难以理解引用传递
Trouble understanding pass by reference
问:
我发现在 c# 中理解引用传递真的很令人困惑。在我的代码中,我有函数,它需要两个参数
private bool SerialUnEscape(byte serialData, ref byte serialResult)
{
if (((SerialProcessValue)serialData == SerialProcessValue.SERIAL_PACKET_START) ||
((SerialProcessValue)serialData == SerialProcessValue.SERIAL_PACKET_END)) {
serialEscaped = false;
serialResult = 0;
return (true);
}
} else if (serialEscaped) {
if ((SerialProcessValue)serialData == SerialProcessValue.SERIAL_PACKET_ESCAPE_START) {
serialResult = (int)SerialProcessValue.SERIAL_PACKET_START;
serialEscaped = false;
return (true);
}
} else {
serialResult = serialData;
return (true);
}
}
我调用的函数引用为 & 。serialDataLsb
serialDataMsb
现在我的困惑是关于,or 的价值是什么,
它是否得到 ??serialDataLsb
serialDataMsb
serialResult
for (i = 0; i < serialElements; i++) {
serialDataLsb = 0;
serialDataMsb = 0;
while (serialBufferWalk < serialIndex) {
if (SerialUnEscape(serialBuffer[serialBufferWalk++], ref serialDataLsb)) {
break;
}
}
while (serialBufferWalk < serialIndex) {
if (SerialUnEscape(serialBuffer[serialBufferWalk++], ref serialDataMsb)) {
break;
}
}
serialElementData[i] = (UInt16)(serialDataLsb + (serialDataMsb << 8));
}
我需要将这段代码移植到 Python 中,1) 如何在 Python 中实现引用传递
我试过用这个
while serialBufferWalk < serialIndex:
if self.SerialUnEscape(serialBuffer[serialBufferWalk += 1],serialDataLsb):
break
while serialBufferWalk < serialIndex:
if self.SerialUnEscape(serialBuffer[serialBufferWalk += 1],serialDataLsb):
break
答:
0赞
31eee384
8/1/2015
#1
如果真的想模仿按引用传递而不是更改代码以返回值,则可以将要更改的基元包装在对象中。为简单起见,我使用了一个列表:
def change_reference(byteContainer):
byteContainer[0] = 42
b = 123
print(b) # Prints 123
# Copy the data into the container list.
container = [b]
# Pass a pointer to that list into the function.
change_reference(container)
# Take the value out of the container.
b = container[0]
print(b) # Prints 42
不过,这会使您的函数变得非常混乱。您真正应该做的是在返回值中包含修改后的字节:
def test_and_subtract(v):
if v == 1:
return (v - 1, True)
return (v - 2, False)
v = 1
v, b = test_and_subtract(v)
print(v) # 0
print(b) # True
v = 5
v, b = test_and_subtract(v)
print(v) # 3
print(b) # False
这里将这两个结果放入一个元组中,并将它们从该元组中删除。return (v - 1, True)
b, v
上一个:Nim:具有变异状态的并行环路
评论
out
关键字