【发布时间】:2011-03-07 14:35:22
【问题描述】:
我知道 Python 没有指针,但是有没有办法让这个 yield 2 代替
>>> a = 1
>>> b = a # modify this line somehow so that b "points to" a
>>> a = 2
>>> b
1
?
这是一个示例:我希望 form.data['field'] 和 form.field.value 始终具有相同的值。这不是完全必要的,但我认为它会很好。
例如,在 PHP 中,我可以这样做:
<?php
class Form {
public $data = [];
public $fields;
function __construct($fields) {
$this->fields = $fields;
foreach($this->fields as &$field) {
$this->data[$field['id']] = &$field['value'];
}
}
}
$f = new Form([
[
'id' => 'fname',
'value' => 'George'
],
[
'id' => 'lname',
'value' => 'Lucas'
]
]);
echo $f->data['fname'], $f->fields[0]['value']; # George George
$f->data['fname'] = 'Ralph';
echo $f->data['fname'], $f->fields[0]['value']; # Ralph Ralph
输出:
GeorgeGeorgeRalphRalph
或者在 C++ 中这样(我认为这是对的,但我的 C++ 生锈了):
#include <iostream>
using namespace std;
int main() {
int* a;
int* b = a;
*a = 1;
cout << *a << endl << *b << endl; # 1 1
return 0;
}
【问题讨论】:
-
也许我可以问一个类似于 S.Lott 的问题(但更有效率):你能给我们展示一些你想要做的真实代码吗?甚至可能是另一种更符合您口味的语言?您尝试解决的问题很可能会采用更 Pythonic 的解决方案,而专注于“我想要指针”会掩盖真正的答案。
-
不需要太多想象;我可以想到几十个想要这样做的理由。这不是在 Python 等无指针语言中完成的方式。您需要将其包装在一个不变的容器中,如马特的回答中所述。
-
您不会在 Python 中编写交换函数。你会写
a, b = b, a。 -
-1:问题中的结构是 (a) 毫无意义的,并且 (b) 似乎没有人能够提供一个使其合理的示例。说有“几十个原因”和发个例子是不一样的。
-
@Mark:另外,我不是“不同意”。我糊涂了。我在问一个问题,寻找一种方法来理解这是什么以及为什么你认为它如此重要。