在C++中一個被允許返回到一個值的基準,然後寫至是,例如:分配給一個函數調用類似於C++ 11
#include <iostream>
int main() {
int data[] = {1,2,3,4};
std::cout << data[0] << " " << data[1] << " " << data[2] << " " << data[3] << '\n';
auto key =
[](int data[]) -> int &
{
return data[1];
};
key(data) = 6;
std::cout << data[0] << " " << data[1] << " " << data[2] << " " << data[3] << '\n';
}
這工作,並且輸出的在C++ 11的代碼是:
1 2 3 4
1 6 3 4
同時,在Python 3:
data = (1,2,3,4)
key = lambda d: d[2]
key(data) = 5
print(data)
這工作,但不請,因爲它很好地指出,我不得轉讓好玩ction要求:
File "gett.py", line 4
key(data) = 5
^
SyntaxError: can't assign to function call
那麼如何傳遞可用於獲取和設置的callable? Python 3的做法是什麼?
我的特定用例是,我有這樣的事情:
#Data = namedtuple('Data', ['meta', 'value', 'othervalue'])
# since namedtuples are not muteable
class Data:
def __init__(self, meta, value, othervalue):
self.meta = meta; self.value=value; self.othervalue=othervalue;
data = [Data('blabla', None, 543), Data('blabla', 5, 54), Data('blabla', 324, None), Data('blabla', None, 34), Data('blabla', 432, None)]
,我想對於任何一個value
或othervalue
以前的值替換每個None
,就像這樣:
def nearest_before_interpolate(self, l, key):
last = 0
for i in range(len(l)):
with getattr(l[i], key) as val:
if val == None:
setattr(l[i], key, last)
else:
last = val
現在我將密鑰作爲字符串傳遞,但如果這是一個通用的lambda
,它可以以任何它認爲合適的方式提取正確的字段(不是它確實需要這種靈活性,但我喜歡lambda
我比猜想更多,也更適合這個用例)。
有沒有人有一個很好的建議如何做到這一點?
元組是不可變的,所以你簡單的例子就沒有意義了。 –
區別在於C++允許函數返回可分配給*的東西* - Python不會,所以它根本沒有意義。 – jonrsharpe
>>> A [2] = 5 回溯(最近通話最後一個): 文件 「」,1號線,在 類型錯誤: '元組' 對象不支持項目分配 –
Markon