首页 > 编程问答 >如何判断一个函数是否被另一个特定函数包装?

如何判断一个函数是否被另一个特定函数包装?

时间:2024-07-23 08:22:42浏览次数:10  
标签:python

使用下面的代码:

def wrap( x ):
  def wrapped( y ):
    return x + y
  return wrapped

f = wrap( 1 )

是否可以看出f是一个被函数包裹的函数 wrap

显示变量f,它是可见的:

>>> f
<function wrap.<locals>.wrapped at 0x10067cf40>

但是有没有办法确定|| |被用作包装函数? wrap 谢谢。

Thanks.


在 Python 中,没有直接的方法可以确定一个函数是否被另一个特定的函数包装。函数包装是一种运行时的行为,Python 不保留被包装函数的创建历史记录。

从你的例子来看:

def wrap( x ):
  def wrapped( y ):
    return x + y
  return wrapped

f = wrap( 1 )

虽然你可以通过 f.__name__ 看到 f 函数的名字是 wrapped ,但这并不能保证它是被 wrap 函数包装的。

一些间接的方法可以帮助你推测一个函数是否被包装,以及被什么包装,但这并不总是可靠:

  1. 检查函数的 __closure__ 属性 : 被包装的函数可能会在其 __closure__ 属性中保存对外部函数作用域的引用。你可以检查这些 cell 对象,看看是否能找到与 wrap 函数相关的线索。

```python

f. closure [0].cell_contents 1 ```

在这个例子中,你可以看到 f.__closure__ 中包含了 wrap 函数中 x 的值。但这仍然不是确凿的证据,只能作为一种参考。

  1. 使用装饰器 : 如果你能控制代码,可以使用装饰器来标记被包装的函数,这样你就可以明确地识别它们。

```python def wrap_marker(func): func. wrapped_by = "wrap" return func

@wrap_marker def wrap( x ): def wrapped( y ): return x + y return wrapped

f = wrap(1)

print(f. wrapped_by ) # 输出: wrap ```

  1. 调试和代码分析 : 你可以使用调试器或代码分析工具来跟踪函数的调用流程,并尝试识别包装函数。

总而言之,没有万无一失的方法可以确定一个函数是否被另一个特定函数包装。你可以使用一些间接的方法来推测,但要记住这些方法并不总是可靠的。

标签:python
From: 78780932

相关文章

  • Python随机库:从帕累托分布进行模拟(使用形状和尺度参数)
    根据Python文档,random.paretovariate(alpha)模拟帕累托分布,其中alpha是形状参数。但帕累托分布同时采用形状和尺度参数。如何从指定这两个参数的分布中进行模拟?你说的对,帕累托分布是由形状和尺度参数定义的,而random.paretovariate(alpha)函数只接受形状参数......
  • 跳过 Python Spark Pyspark Databricks 未知字段异常中的不良记录
    我想知道是否有人知道如何跳过我们从json文件获取的记录这是错误[UNKNOWN_FIELD_EXCEPTION.NEW_FIELDS_IN_RECORD_WITH_FILE_PATH]在解析过程中遇到未知字段:这是失败的代码sent=spark.readStream.format('cloudFiles')\.option('cloudFiles.format','json')......
  • 使用 python 截断 Databricks 中的增量表
    对于Python和SQL,这里给出了Delta表删除操作,并且给出了使用SQL的截断这里但我找不到Python截断表的文档。如何在Databricks中对增量表执行此操作?HowtodoitfordeltatableinDatabricks?虽然Databricks中没有直接使用PythonAPI截断De......
  • 从Python中的列表列表中提取随机列表选择
    我有一个从图像生成的RGB值列表:color_list=[(192,155,120),(132,81,65),(226,226,199),(76,94,117),(140,157,178),(17,34,54),(217,213,139),(134,171,144),(98,123,95),(109,145,96),(181,109,92),(71,47,39),......
  • 这段代码是否保证Python对象被立即删除?
    我正在将Redis异步客户端与Celery一起使用,但在两者之间的集成方面遇到了一些问题。上下文是我需要删除redis.Redis实例(在构造函数中创建)以便关闭连接(该对象有一个close方法,但当asyncio事件循环关闭时我无法使用它,heal_client方法仅在这些情况下才会使用。我的代码如......
  • python selenium 行为错误:AttributeError:“Context”对象没有属性“driver”
    我正在使用pythonselenium与Behavior包一起工作。这是代码:@given('theuserisontheloginpage')defstep_given_user_on_login_page(context):PATH='C:/Users/PycharmProjects/ui_test/chromedriver-win32/chromedriver.exe'context.driver=......
  • python 脚本中的路点用于处理大数据集
    我编写了一个脚本,将一堆来自api的请求写入csv文件。该api中有数千个请求,并且在结束循环/退出程序之前永远不会结束。如何合并航路点,以便如果再次发生停顿,它会自动继续前进并最终打印所有请求?我尝试了一些不起作用的方法,但我不知道下一步该怎么做。以下是使用航路点......
  • Python 中的 SSL 模块不可用(在 OSX 上)
    我在OSX10.13上的virtualenv中运行时遇到问题。我已经运行了pipinstall并且路径brewinstallopenssl指向/usr/local/include/openssl有谁知道如何解决这一问题?在我重新安装../opt/openssl/include/openssl使用python后,这种......
  • AWS Elastic Beanstalk chown PythonPath 错误
    我正在AWS的elasticbeanstalk上部署一个Web应用程序,遇到了同样的错误:[StageApplication].Stoprunningthecommand.Error:chown/var/app/staging/venv/bin/python:nosuchfileordirectory.我在我的环境配置中看到属性:PYTHONPATH:/var/......
  • Python:支持索引的内存对象数据库?
    我正在做一些数据整理,如果我可以将一堆字典放入内存数据库中,然后对其运行简单的查询,这会简单得多。例如,类似:people=db([{"name":"Joe","age":16},{"name":"Jane","favourite_color":"red"},])over_16=db.filter(age__g......