当前位置: 首页 > 面试题库 >

Python中的指针?

臧增
2023-03-14
问题内容

我知道Python没有指针,但有没有办法有这个收益率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;
}

问题答案:

我希望form.data['field']form.field.value始终拥有相同的价值

这是可行的,因为它涉及修饰的名称和索引-即与 裸*完全
不同的结构以及您所要询问的内容,对于您的请求来说是完全不可能的。为什么要索取不可能的东西 而这 又与 您实际 想要
的(可能的)东西完全不同?

a``b *** __

也许您不知道裸名和修饰名有多么大的不同。当您引用裸名时a,您将确切地知道该对象a在该范围中最后绑定到该对象(如果未在该范围内绑定则为例外),这是Python如此深入和基础的方面,它可以不可能被颠覆。当您引用
修饰的
名称时x.y,您正在要求一个对象(该对象所x引用的)请提供“y属性”-并响应该请求,该对象可以执行完全任意的计算(并且索引非常相似:它还允许作为响应执行任意计算)。

现在,您的“实际需求”示例很神秘,因为在每种情况下都涉及两个级别的索引编制或属性获取,因此可以通过多种方式引入您渴望的精妙之处。form.field例如,假设还具有其他哪些属性value?如果没有进一步的.value计算,可能性将包括:

class Form(object):
   ...
   def __getattr__(self, name):
       return self.data[name]

class Form(object):
   ...
   @property
   def data(self):
       return self.__dict__

的存在.value表明采摘第一种形式,加上一种-的无用的包装:

class KouWrap(object):
   def __init__(self, value):
       self.value = value

class Form(object):
   ...
   def __getattr__(self, name):
       return KouWrap(self.data[name])

如果还应将这样的 赋值form.field.value = 23设置为中的条目form.data,则包装器的确必须变得更加复杂,而并非所有这些都没有用:

class MciWrap(object):
   def __init__(self, data, k):
       self._data = data
       self._k = k
   @property
   def value(self):
       return self._data[self._k]
   @value.setter
   def value(self, v)
       self._data[self._k] = v

class Form(object):
   ...
   def __getattr__(self, name):
       return MciWrap(self.data, name)

在Python中,后一个示例大致与您想要的“指针”意义相近-但至关重要的是要了解,这样的微妙只能与 索引 和/或 修饰的名称一起使用
决不能 像您最初要求的那样使用裸名!



 类似资料:
  • 问题内容: 为什么在下面的代码中,使用类变量作为方法指针会导致未绑定的方法错误,而使用普通变量则可以正常工作: 完整错误: 问题答案: 我喜欢从下至上查看这种行为。 Python中的函数充当“描述符对象”。因此,它具有一种方法。 对具有此类方法的类属性的读取访问将“重定向”到该方法。对类的属性访问以方式执行,而对实例的属性访问则映射到。 函数的方法的任务是将函数包装在一个方法对象中,该对象将包装参

  • 本文向大家介绍Python中的id()函数指的什么,包括了Python中的id()函数指的什么的使用技巧和注意事项,需要的朋友参考一下 Python官方文档给出的解释是 id(object) Return the “identity” of an object. This is an integer (or long integer) which is guaranteed to be uniqu

  • 问题内容: 我想在程序获取某些特殊单词的同时,实时地绘制它们。所以我写了一段很好的代码,但是我仍然不能用键盘上的移动键改变指针的位置,并从我移动的位置开始输入文字。谁能给我一个提示,怎么做?这是代码: 问题答案: 轻松做到 正如您似乎已经在使用该模块一样,最简单易行的光标定位方式应该是使用相应的ANSI控件序列(请参阅:http : //en.m.wikipedia.org/wiki/ANSI_e

  • 本文向大家介绍Hadoop中的Python框架的使用指南,包括了Hadoop中的Python框架的使用指南的使用技巧和注意事项,需要的朋友参考一下  最近,我加入了Cloudera,在这之前,我在计算生物学/基因组学上已经工作了差不多10年。我的分析工作主要是利用Python语言和它很棒的科学计算栈来进行的。但Apache Hadoop的生态系统大部分都是用Java来实现的,也是为Java准备的,

  • 问题内容: 我是Java菜鸟。我已经掌握了将C / C ++指针转换为Java引用的概念,并且进展相当顺利。 我打了一段有指针的代码(即* ptr)。我需要取消引用指针并更改其指向的指针的值(即 ptr =&newthing;) 在Java中这似乎要困难得多。是否有人对如何解决此问题有任何想法?快速谷歌搜索什么都没有。 这是C ++中的代码示例。我想在Java中获得类似的工作,但是ptr_to_p

  • 本文向大家介绍在Python文件中指定Python解释器的方法,包括了在Python文件中指定Python解释器的方法的使用技巧和注意事项,需要的朋友参考一下 以下针对Ubuntu系统,Windows系统没有测试过。 Ubuntu中默认就安装有Python 2.x和Python 3.x,默认情况下python命令指的是Python 2.x。因此当将Python脚本设为可执行文件直接在命令行里执行时

  • C++ 类 & 对象 一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。 下面的实例有助于更好地理解指向类的指针的概念: #include <iostream> using namespace std; class Box { public:

  • 问题内容: 是否可以定义输入时间,例如时间,日期,货币或应手动验证?例如: ..在这里(仅)需要时间,如何确保用户以xx:xx格式输入输入,其中xx仅是整数。 问题答案: (在Python 2.any中)将返回用户键入的任何表达式的类型。更好的方法(在Python 2.any中)将使用,它返回一个字符串,然后自己进行转换,并在转换失败时捕获。 Python 3.any的工作方式与2.any的类似,