2013-02-19 97 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