2016-10-31 44 views
0

例如,我可能要写入以下代码:如何在python中“模拟”C++参考?

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

而且通过

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

称之为因此状态可以在需要时被修饰,就像传递一个C++参考。

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

+0

返回结果和'status'作为一个元组。 –

+0

这个'[status]'技术不起作用,你意识到了吗? 'status'没有被'is_good'修改,只是临时列表。 –

回答

1

蟒蛇参数是可变的,这使得代码更易读。 如果你真的需要一个函数来改变一个值,你可以利用这个事实,即一个函数可以返回一个元组,因此(顺便说一句,我觉得这个代码更具可读性,因为它明确地告诉它它做了什么,而不是强制你阅读功能要知道,它实际上改变status):

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

然后:

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

而不是

status = 'somedefault' 

使用

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

或者,如果你想节省击键和你有很多这些引用,你打算使用他们很多,那么你可以定义一个参考类:

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