从 python 中的函数返回左值

2023-12-24

[抱歉,我是 Python 新手。虽然这似乎是一个非常基本的问题,但在询问听众之前,我做了尽职调查,试图避免真正愚蠢的问题]。

我试图找出从函数返回左值的正确习惯用法。假设我有一个包含 64 个对象的容器,并且我希望能够返回对这些对象的引用。

class ChessBoard:
    def __init__(self):
        self.squares = [None for x in range(64)]

    square( row, col ):
        return self.squares(row*8+col)    <---- I'd like this to be l-value

然后,在课外我想:

board = ChessBoard()
board.square(0,0) = Piece( Shapes.ROOK, Colors.White )    <-- I'm getting an error here
board.square(0,1) = Piece( Shapes.BISHOP, Colors.White )
... etc.

所以,我希望函数“at”返回一个左值(类似于 C++ 中的引用),但我在该语言中找不到任何类似于引用或指针的内容。如果我存储了一个list在每个包含一块的方块中,我可能可以这样做: board.square(0,0)[0] = Piece - 但这看起来很疯狂(或者也许不是 - 正如我所说,我是这门语言的新手)。

您将如何处理这个数据结构?


在Python中,一切是一个参考。唯一的问题是None is 不可变的,因此您不能使用返回的引用来更改值。

您也不能覆盖赋值运算符,因此您不会得到这种特殊的行为。然而,一个好的且非常灵活的解决方案是覆盖__setitem__ http://docs.python.org/reference/datamodel.html#object.__setitem__ and __getitem__ http://docs.python.org/reference/datamodel.html#object.__getitem__实现订阅运算符的方法([])对于班级:

class ChessBoard(object):
  def __init__(self):
    self.squares = [None] * 64

  def __setitem__(self, key, value):
    row, col = key
    self.squares[row*8 + col] = value

  def __getitem__(self, key):
    row, col = key
    return self.squares[row*8 + col]

Usage:

>>> c = ChessBoard()
>>> c[1,2] = 5
>>> c[1,2]
5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 python 中的函数返回左值 的相关文章

随机推荐

  • 对小型设备中的列重新排序 Bootstrap 4

    不幸的是 Beta 版本中的 Bootstrap 下降了push and pull 类 所以我不知道如何重新排序 xs 和 sm 设备中的列 列 1 列 2 列 3 to 第 1 列 第 3 列 第 2栏 有任何想法吗 有新的重新排序 ht
  • lambda 函数返回 false

    我在 pyqt 中有一个 python 程序 带有一个带有以下内容的按钮 this 1 k button clicked connect lambda x this self testFunction str x 当我按下按钮时我得到tes
  • 如何使用 node.js 代码在 Firestore 中创建集合

    我不知道如何使用 node js firestore api 创建新的集合 有什么建议么 当您向集合添加 写入文档时 会自动创建集合 不需要 也不需要 API 显式创建集合 来自文档 https firebase google com do
  • 如何在 PrimeFaces 数据表列中显示带换行符(漂亮的打印)的 XML 内容?

    如何在 PrimeFaces 数据表列中显示带换行符 漂亮的打印 的 XML 内容 我的 XML 内容已经是漂亮的打印格式 当从 FacesConverter 执行 System out println 时 我可以通过换行看到它 在将字节呈
  • 存储过程和 LINQ、Dbml 文件无法解释结果集

    我有几个存储过程 当它们添加到我的 dbml 中时 似乎 LINQ 在幕后无法解释结果集 而只会将结果映射为 int 然后我必须自己创建结果类 这很痛苦 而且每次添加到 dbml 时我都必须去更改设计器文件 因为它会重新加载它并将结果映射回
  • java导入错误“类型android.widget.Filter.FilterResults不可见”

    这个问题已经被问过 类型 android widget Filter FilterResults 不可见 https stackoverflow com questions 18135039 the type android widget
  • .gitignore 文件中的路径有何不同?

    我一直在使用 git 但仍然对 gitignore文件路径 那么 以下两条路径有什么区别 gitignore file tmp public documents 我可以理解tmp 将忽略其中的所有文件和文件夹 我对吗 但是第二行路径是什么意
  • 如何从绝对路径获取相对路径

    我的应用程序中有一部分显示用户通过 OpenFileDialog 加载的文件路径 它占用了太多空间来显示整个路径 但我不想只显示文件名 因为它可能不明确 所以我更愿意显示相对于 assembly exe 目录的文件路径 例如 程序集位于C
  • Apache启动libphp7.3.so找不到

    我已经安装了 php 7 3 和 apache2 但是当我尝试启动 apache2 时 出现此错误 service apache2 start apache2 Syntax error on line 146 of etc apache2
  • 仅将 Maven 依赖项声明为测试运行时

    将 Maven 依赖项声明为仅用于测试运行时 而不是测试编译 类路径的最佳方法是什么 具体来说 我想要slf4j api 日志门面 作为典型的编译范围依赖项 但我想要slf4j simple 适用于单元测试的准系统实现 仅在测试运行时类路径
  • 这个 PowerShell 命令行引用/转义是怎么回事?

    我显然不知道自己在做什么 我终于让这个 PowerShell 命令可以工作了 但我不明白为什么它有效 我关心的是最后的 字符 C Program Files IIS Microsoft Web Deploy msdeploy exe ver
  • 在android中应用RGB滤色器后如何将图像保存在SD卡中

    目前我正在设计一个基于照片编辑的应用程序 在这样做时我遇到了一个问题 即 我已经完成了教程 如何为图像应用 RGB 滤色器 link http android er blogspot in 2012 09 adjust lightness
  • VS Code - git 存储库有太多活动更改,仅启用 Git 功能的子集

    我正在设置 VS Code 以处理保存在 BitBucket 中的现有 Salesforce 项目 我将存储库克隆到我的设备 现在当我打开 VS Code 时 我收到消息 C Users 我的存储库目录 处的 git 存储库有太多活动更改
  • 如何在Godot 4.0游戏引擎中实现可组合的角色/技能系统?

    我目前正在使用 Godot 尝试 MOBA 风格游戏的原型 我正在努力寻找一种管理角色及其技能的方法 所有角色都将具有相似的属性 姓名 生命值 奔跑速度 力量等 然而 所有角色的技能都会有所不同 尽管有些角色非常相似 例如基于投射物的技能将
  • 如何在 Buddypress 中获取用户名/显示名称?

    在 buddypress 默认模板中 发布某个活动的用户名显示如下 bp activity action 但这带来的不仅仅是用户名 有没有更简单的方法来获取用户对象 名称 WordPress 获取用户数据功能不起作用 因为它显示页面作者 而
  • Rails 日期验证与年龄

    在我的 Rails 应用程序中 有一个注册表单 其中包含 DOB 字段 用户的年龄不必超过 18 岁 我如何对此进行验证 我的出生日期格式是 mm dd yy 这个语法非常有趣 你可以这样做 old enough 10 23 2000 to
  • 如何在使用 cardUseCompatPadding 时覆盖 CardView 中的标准填充?

    当我使用 cardUseCompatPadding 在卡片视图中显示阴影时 顶部填充比左侧填充大 如何使两个填充相等 因为我的丝带看起来不漂亮 它在上面更大 谢谢
  • 在博览会应用程序上请求通知权限时收到错误

    我有一个简单的代码 要求过去有效的通知权限 但突然间 它给了我这个错误 错误 调用本机方法时遇到异常 在模块 ExpoNotificationPermissionsModule 上执行导出方法 requestPermissionsAsync
  • 如何使用 pybabel 在 jinja 2.10 {% trans %} 中转义 '%' 字符?

    我正在使用 jinja 2 10 和 pybabel 当我的模板包含以下代码 trans 块内有 字符 时 pybabel compile 不会翻译该字符串 提取的字符串 在 po 中 正常 但在结果页面上它根本没有被翻译 h3 class
  • 从 python 中的函数返回左值

    抱歉 我是 Python 新手 虽然这似乎是一个非常基本的问题 但在询问听众之前 我做了尽职调查 试图避免真正愚蠢的问题 我试图找出从函数返回左值的正确习惯用法 假设我有一个包含 64 个对象的容器 并且我希望能够返回对这些对象的引用 cl