如何在python中“模拟”C ++引用?

时间:2016-10-31 03:21:28

标签: python

例如,我可能想要编写以下代码:

def is_good(args, status):
  if ....
    status[0] = 'somevalue'
    return True
  return False

并通过

调用它
status = 'somedefault'
some_var = is_good(..., [status])

因此可以在需要时修改状态,就像传递C ++引用一样。

但是,代码似乎不适合读者阅读。是否有更多的pythonic方式来做到这一点?

2 个答案:

答案 0 :(得分:1)

python参数是可变的,这使您的代码更具可读性。 如果你真的需要一个改变一个值的函数,你可以利用一个函数可以返回一个元组的事实(顺便说一句,我发现这个代码更具可读性,因为它明确地告诉它它做了什么并且没有强迫你阅读知道它实际改变status)的函数:

def is_good(args, status):
  if ....
    status[0] = 'somevalue'
    return (True, status)
  return (False, status)

然后:

some_var, status = is_good(..., [status])

答案 1 :(得分:0)

而不是

status = 'somedefault'

使用

# or rename it statusPtr if you want to remember to "dereference" it
status = ['somedefault']  

或者,如果你想保存击键并且你有很多这些引用而且你打算经常使用它们,那么你可以定义一个Ref类:

class Ref:
    def __init__(s, v=None): 
        s.v = v

然后“声明”(实例化)status

status = Ref('somedefault')

status = Ref()
status.v = 'somedefault'

然后像这样使用它:

def is_good(args, status):
    if ....
        status.v = 'somevalue'
        return True
    return False