有没有办法检查函数输出是否分配给Python中的变量?

2023-12-08

在Python中,我想编写一个函数,如果它自己调用的话,它会将其结果漂亮地打印到控制台(主要用于交互使用或调试)。出于这个问题的目的,假设它检查某事物的状态。如果我打电话

check_status()

我想看到类似的东西:

Pretty printer status check 0.02v
NOTE: This is so totally not written for giant robots
=================================
System operational: ... ok
Time to ion canon charge is 9m 21s
Booster rocket in AFTERBURNER state
Range check is optimal
Rocket fuel is 10h 19m 40s to depletion
Beer served is type WICKSE LAGER, chill optimal
Suggested catchphrase is 01_FIGHTING_SPIRIT_GOGOGO
Virtual ... on

但是,如果我在变量赋值的上下文中调用它,我还希望它将输出作为列表传递:

not_robot_stat = check_status()
print not_robot_stat
>>> {'cond_op': 1, 't_canoncharge': 1342, 'stage_booster': 5, 'range_est_sigma': 0.023, 'fuel_est': 32557154, 'beer_type': 31007, 'beer_temp': 2, 'catchphrase_suggestion': 1023, 'virtual_on': 'hell yes'}

那么...有没有一种方法可以动态地知道函数内其输出是否被分配?我希望能够做到这一点,而无需诉诸参数传递,或编写另一个专用于此的函数。我用谷歌搜索了一下,据我所知,看起来我不得不求助于字节码。这真的有必要吗?


新解决方案

这是一个新的解决方案,通过检查其自身的字节码来检测函数的结果何时用于分配。没有完成字节码编写,它甚至应该与Python的未来版本兼容,因为它使用opcode模块进行定义。

import inspect, dis, opcode

def check_status():

    try:
        frame = inspect.currentframe().f_back
        next_opcode = opcode.opname[ord(frame.f_code.co_code[frame.f_lasti+3])]
        if next_opcode == "POP_TOP": 
            # or next_opcode == "RETURN_VALUE":
            # include the above line in the if statement if you consider "return check_status()" to be assignment
            print "I was not assigned"
            print "Pretty printer status check 0.02v"
            print "NOTE: This is so totally not written for giant robots"
            return
    finally:
        del frame    

    # do normal routine

    info = {'cond_op': 1, 't_canoncharge': 1342, 'stage_booster': 5}

    return info

# no assignment    
def test1():
    check_status()

# assignment
def test2():
    a = check_status()

# could be assignment (check above for options)
def test3():
    return check_status()

# assignment
def test4():
    a = []
    a.append(check_status())
    return a

解决方案1

这是旧的解决方案,它会在 python -i 或 PDB 下调试时检测您何时调用该函数。

import inspect

def check_status():
    frame = inspect.currentframe()
    try:
        if frame.f_back.f_code.co_name == "<module>" and frame.f_back.f_code.co_filename == "<stdin>":
            print "Pretty printer status check 0.02v"
            print "NOTE: This is so totally not written for giant robots"
    finally:
        del frame

    # do regular stuff   
    return {'cond_op': 1, 't_canoncharge': 1342, 'stage_booster': 5}

def test():
    check_status()


>>> check_status()
Pretty printer status check 0.02v
NOTE: This is so totally not written for giant robots
{'cond_op': 1, 't_canoncharge': 1342, 'stage_booster': 5}

>>> a=check_status()
Pretty printer status check 0.02v
NOTE: This is so totally not written for giant robots

>>> a
{'cond_op': 1, 't_canoncharge': 1342, 'stage_booster': 5}

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

有没有办法检查函数输出是否分配给Python中的变量? 的相关文章

  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 闭包作为数据合并习惯的解决方案

    我正在尝试解决闭包问题 而且我think我发现了一个案例 他们可能会有所帮助 我有以下几部分需要处理 一组正则表达式 旨在清理状态名称 位于函数中 具有州名称 上述函数创建的标准化形式 和州 ID 代码的 data frame 用于链接两者
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • 禁用 PictureBox 上的图像混合

    在我的 Windows 窗体程序中 我有一个PictureBox包含一个小图像 5 x 5 pixels 当这个位图被分配给PictureBox Image属性 它变得非常模糊 我试图找到诸如混合模式 模糊模式或抗锯齿模式之类的东西 但我没
  • 创建新用户集realmRoles时 - Keycloak Admin REST API

    我在创建用户时分配现有领域角色时遇到问题 创建新用户时遵循文档POST realm users 在主体参数中使用UserRepresentation 我们有一个名为realmRoles这是可选的 我已经尝试在以下模式中进行分配 id 123
  • pip install Upgrade 升级私有依赖失败

    背景 pip支持ssh链接后缀 分店名称 提交哈希值 标签名称 一个 git 参考 但是 pip 在升级某些依赖于这些 ssh 链接的软件包时存在问题 在版本 5 1 2 的名为 CurrentPackage 的包的 setup py 中
  • Meteor/Semantic-UI 中的错误?

    如果根元素是流星模板 则语义 UI 模态窗口的使用不起作用 包 semantic ui css 错误重现 你好 html
  • UITableView willDisplayCell 方法的错误行为

    有一个UITableView的帖子 看到的帖子 id 保存在 sqlite 中我想用橙色显示已看过的帖子 用黑色显示其他帖子 但是当我为看到的帖子设置橙色时willDisplayCell方法某些单元格被错误地着色为橙色 否则打印日志 为其着
  • com.mysql.jdbc.driver类未找到异常

    我得到了帮助this博客文章 但我得到 com mysql jdbc driver 类未找到异常 该博客文章的不同之处在于 在我的例子中 他们尝试连接到 mysql 而不是 MS SQL 到目前为止 这是我的代码 包com example
  • Arduino 安卓 USB 连接

    我正在使用 Arduino杜米拉诺夫 and Nexus 7 我已成功检测到 Arduino 板并显示供应商 ID 和产品 ID 我正在尝试将数据从平板电脑传输到 Arduino 板并尝试闪烁LED在黑板上 Android 的代码如下 主要
  • UIWebView 只有一个应该适合整个视图的图像

    所以我现在遇到的问题是 UIWebViews 显示单个图像 我想要的是 如果图像不适合该位置 则缩小图像 如果不适合 则保持其原始大小 所以这是我的做法 在 UIViewController 中 void viewDidLoad super
  • std::bind 是否丢弃 C++11 中参数的类型信息?

    问题发生的情况 请考虑以下 C 代码 include
  • 如何在 Fortran 中创建函数?

    我确信这个问题的解决方案是非常基本的 但我很难弄清楚如何在 Fortran 中使用函数 我有以下简单的程序 PROGRAM main IMPLICIT NONE INTEGER a b a 3 b 5 PRINT funct a b END
  • 关于java实习生

    我的问题是实习生是否正在使用字符串并且字符串具有 SPC 字符串池常量 实习生概念也适用于整数 那么是否有整数池常量 如果没有那么它是如何工作的 class InternExample public void print Integer i
  • 如何使用 webdriver 操作用户选择的文本?

    假设我的网页中有以下代码片段 p 这是一些文字 p 我希望 WebDriver 在该文本中选择 某些 就像用户选择它一样 我应该怎么做 我知道如何获得 p 元素 WebElement editable getDriver findEleme
  • 如何验证两个组件的值是否相同?日本科学基金会

    正如我们在 Asp Net 中有 CompareValidator 那么在 JSF 中我们有什么来验证两个字段的值是否相同 我想验证密码和确认密码字段 不 基本 JSF 实现中不存在这样的验证器 您基本上需要在last组的组成部分并抓住ot
  • 如何在绘图中向散点图添加固定的水平线和垂直线

    我有以下生成散点图的代码 我想添加代表 y 轴和 x 轴平均值的垂直线和水平线 我该怎么做 f lt list family Courier New monospace size 18 color 7f7f7f x lt list titl
  • JavaScript 刷新页面

    我有一个带有弹出按钮的 html 页面 如果我单击此按钮 则会弹出一个新窗口 我会在此窗口中进行所有更改 然后单击关闭按钮 关闭弹出窗口后 带有弹出按钮的 html 页面应该刷新 这可能吗 yes reload opener window
  • C# 中的方法签名

    下面的方法签名是什么 int DoSomething int a int b 返回类型是否是签名的一部分 返回类型不是 C 中方法签名的一部分 仅方法名称及其参数types 但不是参数names 是签名的一部分 例如 您不能使用以下两种方法
  • 如何使用反射检测字段上的“新”修饰符?

    http msdn microsoft com en us library 435f1dw2 aspx public class Base public string Field public class Child Base public
  • 使用定义的输入过程从 Fortran 中的二进制文件读取错误值

    我正在尝试编写一个简单的代码 它采用一些具有相同父抽象类的对象 将它们存储到二进制文件中并将它们读回 我的代码如下所示 module m implicit none type container class a allocatable it
  • R:从列表对象创建自定义输出

    我有一个存储不同数据类型和对象的列表 header lt This is a header a lt 10 b lt 20 c lt 30 w lt 1 10 x lt 21 30 y lt 51 60 z lt 0 9 mylist lt
  • 有没有办法检查函数输出是否分配给Python中的变量?

    在Python中 我想编写一个函数 如果它自己调用的话 它会将其结果漂亮地打印到控制台 主要用于交互使用或调试 出于这个问题的目的 假设它检查某事物的状态 如果我打电话 check status 我想看到类似的东西 Pretty print