Python 中的静态变量?

2024-04-30

在 C++ 中,我们有 static 关键字,它在循环中是这样的:

for(int x=0; x<10; x++)
    {
      for(int y=0; y<10; y++)
      {
        static int number_of_times = 0;
        number_of_times++;
      }
    }

这里的静态使得number_of_times初始化一次。我怎样才能在 python 3.x 中做同样的事情?

编辑:由于大多数人感到困惑,我想指出我给出的代码只是 C++ 中静态用法的示例。我真正的问题是我只想在函数中初始化一个时间变量,因为我不希望它是全局的(废话!)或默认参数。


假设你想要的是“一个在第一次函数调用时只初始化一次的变量”,Python 语法中没有这样的东西。但有一些方法可以获得类似的结果:

1 - 使用全局。请注意,在 Python 中,“全局”实际上意味着“模块全局”,而不是“进程全局”:

_number_of_times = 0

def yourfunc(x, y):
    global _number_of_times
    for i in range(x):
        for j in range(y):
            _number_of_times += 1

2 - 将代码包装在类中并使用类属性(即:由所有实例共享的属性)。 :

class Foo(object):
    _number_of_times = 0

    @classmethod
    def yourfunc(cls, x, y):
        for i in range(x):
            for j in range(y):
                cls._number_of_times += 1

请注意,我使用了classmethod因为此代码片段不需要实例中的任何内容

3 - 将代码包装在类中,使用实例属性并提供方法的快捷方式:

class Foo(object):
    def __init__(self):
         self._number_of_times = 0

    def yourfunc(self, x, y):
        for i in range(x):
            for j in range(y):
                self._number_of_times += 1

yourfunc = Foo().yourfunc

4 - 编写一个可调用类并提供快捷方式:

class Foo(object):
    def __init__(self):
         self._number_of_times = 0

    def __call__(self, x, y):
        for i in range(x):
            for j in range(y):
                self._number_of_times += 1


yourfunc = Foo()

4之二 - 使用类属性和元类

class Callable(type):
    def __call__(self, *args, **kw):
        return self._call(*args, **kw)

class yourfunc(object):
    __metaclass__ = Callable

    _numer_of_times = 0

    @classmethod
    def _call(cls, x, y):
        for i in range(x):
            for j in range(y):                 
                cls._number_of_time += 1

5 - “创造性”地使用仅在模块导入时实例化一次的函数的默认参数:

def yourfunc(x, y, _hack=[0]):
    for i in range(x):
        for j in range(y):
            _hack[0] += 1

还有一些其他可能的解决方案/黑客,但我想您现在已经了解了大局。

编辑:鉴于操作员的澄清,即“假设您有一个带有默认参数的递归函数,但如果有人实际上尝试为您的函数提供另一个参数,那可能是灾难性的”,看起来操作员真正想要的是这样的:

# private recursive function using a default param the caller shouldn't set
def _walk(tree, callback, level=0):
    callback(tree, level)
    for child in tree.children:
        _walk(child, callback, level+1):

# public wrapper without the default param
def walk(tree, callback):
    _walk(tree, callback)

顺便说一句,这证明我们确实遇到了另一个 XY 问题......

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

Python 中的静态变量? 的相关文章

  • 为什么删除临时文件时出现WindowsError?

    我创建了一个临时文件 向创建的文件添加了一些数据 已保存 然后尝试将其删除 但我越来越WindowsError 编辑后我已关闭该文件 如何检查哪个其他进程正在访问该文件 C Documents and Settings Administra
  • 如何在Python中同时运行两只乌龟?

    我试图让两只乌龟一起移动 而不是一只接着另一只移动 例如 a turtle Turtle b turtle Turtle a forward 100 b forward 100 但这只能让他们一前一后地移动 有没有办法让它们同时移动 有没有
  • Python 2.7 中的断言对我来说不起作用示例assertIn

    我的 Mac 上安装了 python 2 7 通过在终端中运行 python v 进行验证 当我尝试使用任何新的 2 7 断言方法时 我收到 AtributeError 我看过http docs python org 2 library u
  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • 工作日重新订购 Pandas 系列

    使用 Pandas 我提取了一个 CSV 文件 然后创建了一系列数据来找出一周中哪几天崩溃最多 crashes by day bc DAY OF WEEK value counts 然后我将其绘制出来 但当然它按照与该系列相同的排名顺序绘制
  • 在没有模型的情况下将自定义页面添加到 django admin

    我正在尝试在没有模型关联的情况下向管理员添加自定义页面 这就是我迄今为止所取得的成就 class MyCustomAdmin AdminSite def get urls self from django conf urls import
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • 如何使用文本相似性删除 pandas 数据框中相似(不重复)的行?

    我有数千个数据 这些数据可能相似也可能不相似 使用 python 的默认函数 drop duplicates 并没有真正的帮助 因为它们只检测相似的数据 例如 如果我的数据包含类似以下内容怎么办 嗨 早上好 嗨 早上好 Python 不会将
  • 一段时间后终止线程的最 Pythonic 方法

    我想在线程中运行一个进程 它正在迭代一个大型数据库表 当线程运行时 我只想让程序等待 如果该线程花费的时间超过 30 秒 我想终止该线程并执行其他操作 通过终止线程 我的意思是我希望它停止活动并优雅地释放资源 我认为最好的方法是通过Thre
  • 结构差异 sudo() run('sudo 命令')

    我想知道函数之间有什么区别sudo 和函数run sudo u user smth 文档上有 sudo 在所有运行方式上都是相同的 除了它总是换行 调用 sudo 程序中的给定命令以提供超级用户 特权 但有几次 sudo cmd 提示我输入
  • 在 matplotlib 中的极坐标图上移动径向刻度标签

    From matplotlib 示例 http matplotlib org examples pylab examples polar demo html import numpy as np import seaborn as sbs
  • Gspread如何复制sheet

    在 Stackoverflow 上进行谷歌搜索和搜索后 我想我找不到有关如何复制现有工作表 现有模板工作表 并将其保存到另一个工作表中的指南 根据文档 有重复表 https gspread readthedocs io en latest
  • Django 的 request.FILES 出现 UnicodeDecodeError

    我在视图调用中有以下代码 def view request body u for filename f in request FILES items body body Filename filename n f read n 在某些情况下
  • 使用Python计算目录的大小?

    在我重新发明这个特殊的轮子之前 有没有人有一个很好的例程来使用 Python 计算目录的大小 如果例程能够很好地以 Mb Gb 等格式格式化大小 那就太好了 这会遍历所有子目录 总结文件大小 import os def get size s
  • 将seaborn.palplot轴添加到现有图形中以可视化不同调色板

    将seaborn人物添加到子图中是usually https seaborn pydata org examples cubehelix palette html创建图形时通过传递 ax 来完成 例如 sns kdeplot x y cma
  • SocketIO + Flask 检测断开连接

    我在这里有一个不同的问题 但意识到它可以简化为 如何检测客户端何时从页面断开连接 关闭其页面或单击链接 换句话说 套接字连接关闭 我想制作一个带有更新用户列表的聊天应用程序 并且我在 Python 上使用 Flask 当用户连接时 浏览器发
  • Django Admin 中的反向内联

    我有以下 2 个型号 现在我需要将模型 A 内联到模型 B 的页面上 模型 py class A models Model name models CharField max length 50 class B models Model n
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que
  • 多个对象以某种方式相互干扰[原始版本]

    我有一个神经网络 NN 当应用于单个数据集时 它可以完美地工作 但是 如果我想在一组数据上运行神经网络 然后创建一个新的神经网络实例以在不同的数据集 甚至再次同一组数据 上运行 那么新实例将产生完全错误的预测 例如 对 XOR 模式进行训练
  • 查找总和为给定数字的值组合的函数

    这个帖子查找提供的 Sum 值的组合 https stackoverflow com a 20194023 1561176呈现函数subsets with sum 它在数组中查找总和等于给定值的值的组合 但由于这个帖子已经有6年多了 我发这

随机推荐

  • 如何在 R 中导入 matlab 表

    我有一个matlab mat文件与表数据类型我想将其导入 R 中 我为此使用 readMat R 正在将其作为列表读取 之后有没有办法将列表转换为 R 中的数据帧或表格格式 当我使用as dataframe我收到以下错误 Error in
  • 名称中带有点的 php 对象属性

    我有 mysql 表 其中包含 操作 日期 操作 名称 等列 将该表数据作为对象获取后 mysqli gt fetch object 我得到这个 行的 print r stdClass Object id gt 2 operation da
  • Composer - 添加 git 存储库而不使用composer.json

    我尝试从 github designmodo Flat UI 添加存储库 使用配置并收到错误No valid composer json was found in any branch or Your requirements could
  • Autodesk Forge BIM 360 API - 激活服务类型

    我们一直在使用 Forge API 在 BIM 360 中自动设置项目 但似乎无法找到自动激活服务 Field Glue 等 的方法 直觉上 我认为 service types 属性是执行此操作的方法 但服务没有激活 1 service t
  • 生产中未找到 symfony 2 路线

    我有这样的路线 login register 等 在开发环境中工作正常 起初 当我尝试通过 app php 而不是 app dev php 访问我的网站时 出现 404 错误 然后我跟着这个建议 https stackoverflow co
  • 可以将sharedPrefrence与Coroutine kotlin一起使用吗

    我已经注射了sharedPreference in ViewModel 我可以在嵌入 Coroutine 作用域时使用 Android 特定资源吗 当 ViewModel 失去作用域时 Coroutine 作用域会自动挂起 我的意思是 如果
  • 在日期 presto SQL 上运行总和

    我正在尝试使用 Presto SQL 根据下面的示例数据计算某个日期内 t 列和 s 列的累积总和 Date T S 1 2 19 2 5 2 1 19 5 1 3 1 19 1 1 我想得到 Date T S cum T cum S 1
  • ReDim 在 VB6 中保留为多维数组

    我正在使用 VB6 我需要做一个ReDim Preserve到多维数组 Dim n m As Integer n 1 m 0 Dim arrCity As String ReDim arrCity n m n n 1 m m 1 ReDim
  • 如何使用新的 html 文件打开更新电子浏览器窗口

    我是电子新手 我有两个 html 页面 我想在单击按钮时打开第二个页面 我的代码如下 但我只是得到一个空白窗口 不是第二页 这是index js const electron require electron const app Brows
  • 仅当存在 2 个类时,才能使用 CSS 定位元素吗?

    您可能已经知道 元素上可能有多个类 并用空格分隔 Example div class content main div 借助 CSS 您可以瞄准这一点div与任一 content or main 有没有办法瞄准它 如果并且仅当两个班都在吗
  • AspectJ - 匹配具有通用参数的方法的切入点

    我有一个接受任何类型作为其参数的通用方法 例如 我想要一个切入点 它与仅以 String 类型作为参数的方法的调用相匹配 最终的要求是将建议执行的范围限制为 字符串 参数 这是我的通用类和方法 public class Param
  • UIModalTransitionStylePartialCurl 在 iOS 8 上消失

    我试图向我的 ViewController 展示 UIModalTransitionStylePartialCurl 转换 我正在使用以下代码 PuzzleViewController vc PuzzleViewController all
  • Pygame:居中文本系统字体文本

    我读过这篇关于居中文本的文章 Pygame 如何使文本居中 https stackoverflow com questions 23982907 python library pygame centering text 但是 不是从文件导入
  • 开发目录结构[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 iPhone 版 gmap 中的经纬度计算两个地点之间的距离 [重复]

    这个问题在这里已经有答案了 可能的重复 GPS 坐标 以度为单位 来计算距离 https stackoverflow com questions 6994101 gps coordinates in degrees to calculate
  • 获取 iPhone 文档目录。 NSSearchPathForDirectoriesInDomains 仍然是唯一的方法吗?

    Is the NSSearchPathForDirectoriesInDomainss 函数仍然是获取 iPhone Documents 目录路径的最佳方法吗 我之所以这么问 是因为我看到的大多数主题都是去年的 而且这似乎仍然是获取 iPh
  • 将 Django/Python 3.4 部署到 Heroku

    我正在尝试使用 Django Heroku 入门教程使用 Django Heroku 部署我的第一个示例应用程序 我的工具 Python 3 4 和 Windows 7 PowerShell 我的挑战 部署到 Heroku 失败 我不知道为
  • App.config 连接字符串相对路径

    我需要在 app config 中设置 sqlite 连接字符串 我想设置相对于调试 发布文件夹的路径 数据库文件将复制到这些文件夹
  • Windows命令行参数编码是什么?

    Windows 使用什么编码来传递给在 cmd exe 窗口中启动的程序的命令行参数 命令行参数的编码似乎不受使用控制台代码页设置的影响chcp 我将其设置为 UTF 8 代码页 65001 并使用 Lucida Console 字体 如果
  • Python 中的静态变量?

    在 C 中 我们有 static 关键字 它在循环中是这样的 for int x 0 x lt 10 x for int y 0 y lt 10 y static int number of times 0 number of times