如何传递Python args和kwargs?

2024-02-12

虽然我对 Python 的 *args 和 **kwargs 有一个大致的了解(我认为),但我很难理解如何将它们从一个函数传递到另一个函数。这是我的模型:

from pdb import set_trace as debug
from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=30)

    def __unicode__(self):
        return u'%s' % self.name

    def save_name_for(self, *args, **kwargs):
        self.name = 'Alex'
        return self

    def save_name(self, *args, **kwargs):
        debug()
        self.save_name_for(self, args, kwargs)
        self.save()

我已将保存名称分成上面的两个函数。这样我就可以通过对 save_name_for 方法进行单元测试来对通常将所有内容放入 save_name 方法中的逻辑进行单元测试。

当我在解释器中运行它并在 save_name 方法中停止时,如我所料,我看到了以下内容:

(Pdb) args
self =
args = (1, 2)
kwargs = {'last': 'Doe', 'first': 'John'}

如果我随后进入 save_name_for 方法,我会看到以下内容:

(Pdb) args
self =
args = (<Person: >, (1, 2), {'last': 'Doe', 'first': 'John'})
kwargs = 

有没有某种方法可以将 save_name 方法接收到的 kwargs 直接传递到 save_name_for 方法中,以便它们出现在后者的 kwargs 中?我希望在 save_name_for 方法的命名空间中看到类似的内容:

(Pdb) args
self =
args = (1, 2)
kwargs = {'last': 'Doe', 'first': 'John'}   # <= I want this

我意识到我可以在 save_name 中解析它们,然后将它们显式传递给 save_name_for 但这看起来相当不优雅。我还想我可能会这样做,因为 args 是一个元组......

kwargs = args[2]

...但它似乎不起作用。 args[2] 就是一切(我不明白这一点)。有Pythonic的方法来做到这一点吗?


The * and **运算符用于两种不同的情况。

  1. 当用作函数定义,

    def save_name_for(self, *args, **kwargs):
    

    它用于表示任意数量的位置或关键字 分别为参数。要记住的一点是,在 功能args将是一个元组, and kwargs将是一个 词典.

  2. 当用作函数调用,

    args = (1, 2)
    kwargs = {'last': 'Doe', 'first': 'John'}
    self.save_name_for(*args, **kwargs)
    

    the * and ** act as 拆包操作符. args必须是一个 可迭代的, and kwargs必须是类似字典的。中的项目args将被解包并作为位置参数发送到函数, 以及中的键/值对kwargs将被发送到函数 关键字参数。因此,

    self.save_name_for(*args, **kwargs)
    

    相当于

    self.save_name_for(1, 2, last='Doe', first='John')
    

另请参阅咸鹤博客 http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/并举例说明。

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

如何传递Python args和kwargs? 的相关文章

  • 下载 PyQt6 的 Qt Designer 并使用 pyuic6 将 .ui 文件转换为 .py 文件

    如何下载 PyQt6 的 QtDesigner 如果没有适用于 PyQt6 的 QtDesigner 我也可以使用 PyQt5 的 QtDesigner 但是如何将此 ui 文件转换为使用 PyQt6 库而不是 PyQt5 的 py 文件
  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9

随机推荐

  • 将小数字加载到 64 位 x86 寄存器中

    在 64 位 x86 CPU 下 通常我们将数字 1 加载到寄存器中 如下所示 mov rdx 1 48BAFFFFFFFFFFFFFFFF 该指令按照旧版本 NASM 的组装方式占用 10 个字节 另一种方法是 xor rdx rdx 4
  • MySQL服务器和MySQL客户端有什么区别

    在 Ubuntu 中 我通常安装两者 但是 MySQL 的客户端和服务器之间有什么区别 另外 当一个新的声明提到它需要 MySQL 5 x 时 它是指客户端 服务器还是两者都需要 例如这个链接https dev mysql com doc
  • 如果我在打字稿中使用 `module("somelib")`,它就无法在浏览器中运行

    我正在尝试在客户端使用带有 angularjs 的打字稿 我发现如果我使用外部模块 生成的js将无法在浏览器中运行 控制器 ts
  • 如何检查 ECMAScript 6 类和函数之间的差异?

    在 ECMAScript 6 中typeof根据规范 类的数量是 function 但是 根据规范 您也不允许将通过类语法创建的对象作为普通函数调用来调用 换句话说 您必须使用new关键字 否则会抛出 TypeError TypeError
  • iPad 上的 Swift Playgrounds 全屏显示

    尝试在 iPad 上创建一个全屏显示的 Swift Playground 我尝试使用获取屏幕的边界UIScreen main bounds 但显示对于默认的游乐场框架来说太大了 我知道这是可能的 因为所有示例游乐场都是全屏的 我只是不明白它
  • 通过命令行获取制表符大小

    是否有一种自动方法来检索 matlab 编辑器和命令窗口的选项卡大小 是的 您可以打开首选项窗口并自行查找 但我希望它是自动化的 实际上我认为这可以推广到检索any下面的屏幕截图中显示了这些用户偏好 我很快找到了解决方案 经过深思熟虑后 最
  • C++ 创建 Windows 屏幕保护程序

    我使用 OpenGL 和 SDL 在 C 中创建了一个动画 它不使用 Windows 库 并希望将其用作 Windows 系统的屏幕保护程序 我读过一个例子 它描述了你只需更改 exe延伸至 scr 我已经这样做了并将动画作为屏幕保护程序运
  • 如何使用 php echo 显示长轮询结果

    我正在使用一个长轮询脚本 如果我附加任何文本进行测试 该脚本可以很好地工作 现在我想显示 user php 从数据 update php 收集的长轮询结果 我在 user php 页面使用了我的轮询脚本 在这里 如果我使用如下的 测试轮询
  • 作为另一个用户安装共享文件夹(vbox)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 很抱歉在这里问这个问题 但我尝试了服务器故障 但 4 天都没有得到任何答复 那里的相关问题 https serverfault com questio
  • ASP.Net 5 类库包项目中的 dnxcore50 框架支持吗?

    我正在尝试开发我的第一个 ASP Net Web 应用程序 在我的解决方案中我有两个项目 AWeb Application and Class Library Package 并注意到 Web 应用程序的框架中有这个project json
  • 如何在 Dockerfile 中指定 ENTRYPOINT 的工作目录

    Docker 映像 基于 Windows 包含一个应用程序目录 位于C App 该目录内有几个子文件夹和文件 包括一个名为process bat Dockerfile 用于构建镜像 的结尾如下 ENTRYPOINT C App proces
  • DataGridView 可调整列大小,但最后一列无法调整得更大?

    For c 0 To grd Columns Count 1 grd Columns c Resizable DataGridViewTriState True Next c 这使得我的 DataGridView 中的所有列都可以调整大小
  • Azure 服务 TopicClient 线程安全且可重用吗?

    我们正在使用 Azure SDK 将消息发布到服务总线 在 Web API 调用中 我们对每个传入请求重复执行这些任务 MessagingFactory factory MessagingFactory CreateFromConnecti
  • 计算OWL本体中子类的深度

    我正在寻找一个 SPARQL 查询 它可以返回 OWL 层次结构中指定子类的位置 我研究了几个例子 但我能达到的最好结果是计算指定超类与其子类之间的相对路径 感谢约书亚 泰勒 https stackoverflow com a 230949
  • 连接到远程 mongoDB 服务器

    我有一台使用 SSH 连接到的远程计算机 我在上面安装了 mongoDB 并且我希望远程使用它 如何使用 nodejs 和 mongoDB compass 连接到它 本地主机是IP吗 const db mongodb what do I w
  • 如何使用 Jackson Mixins 将 json 映射到具有不同结构的 java 对象

    如何转换这个json name abc city xyz 使用 Jackson mixin 到员工对象 3rd party class public class Employee public String name public Addr
  • DataGridView 动态更改数据源

    基本上 当我创建这个 DataGridView 时 我有这段代码来填充它 public void fillDataGrid IQueryable
  • Python For 循环返回最后一个值 |解释

    我有一个简单的问题 我已经解决了 但如果有人能解释一下那就太好了whyfor 循环在 python 中执行此操作 如果有更优雅的方法 如果这是一个愚蠢的问题 真的很抱歉 我已尽力尝试多种方法并查看相关问题 但我仍然不确定为什么它不起作用 我
  • 我怎样才能在 C# 中得到这个正则表达式?

    我正在尝试匹配任何具有type Data 然后将其替换为我想要的文本 下面给出了一个示例输入 可以有一个或多个 layer name cifar type Data top data top label include phase TRAI
  • 如何传递Python args和kwargs?

    虽然我对 Python 的 args 和 kwargs 有一个大致的了解 我认为 但我很难理解如何将它们从一个函数传递到另一个函数 这是我的模型 from pdb import set trace as debug from django