2013-02-19 112 views
0

我試着寫它可以返回處理分配的元素的引用的函數,示例代碼如下所示(Python3):從Python中的函數返回左值?

row_a = ["rowname","items1","items2"] 
def rowname(row): 
    return row[0] 
rowname(row_a) = "another_rowname" 

但是,它不會工作,因爲intepreter抱怨一樣:

SyntaxError: can't assign to function call

有沒有人有關於如何實現這樣的功能的想法?

+0

@wim對不起,我修復它.. – 2013-02-19 04:59:02

+0

@DeepankarBajpeyi當然,我在這兩個'python'和'python3'運行的代碼。這兩個抱怨如下:文件「lvalue.py」,行4 rowname(row_a)=「another_rowname」 SyntaxError:不能分配給函數調用 ' – 2013-02-19 05:01:22

+1

是真的關於返回左值還是你想要一個函數,指定一個給列表中給定索引的值? – Hyperboreus 2013-02-19 05:02:30

回答

0

沒有Pythonic這樣做的方式。你不能在Python中返回一個左值 - Python不是C++!如果你只是想用一個函數來設置列表的第一個元素的值,只是做到這一點:從功能

row_a = ["rowname","items1","items2"] 
def set_rowname(row, value): 
    row[1] = value 
set_rowname(row_a, "another_rowname") 
0

返回值不能作爲一個變量。你可以將返回值賦給一個變量。你的列表定義看起來像你想創建一本字典。爲什麼不坐準你期望得到的?

0

剛剛發現一個醜陋的方式.. Thougn需要setattr ..

row_a = ["rowname","items"] 
def rowname(row): 
    class inner: 
     def __init__(self): 
      self.__dict__["to_l"] = None 
     def __setattr__(self,name,value): 
      row[0] = value 
    return inner() 
rowname(row_a).to_l = 20 
print(row_a) 
+1

不,你沒有。你沒有返回一個左值。您返回一個對象並設置其某個屬性的值。 – Hyperboreus 2013-02-19 06:24:37

+1

你也可以只寫'row_a [0] = 20'而不是所有的代碼。 – Hyperboreus 2013-02-19 06:25:28