2016-10-31 81 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