使用 *args、**kwargs 和可选/默认参数调用 Python 函数

2023-12-03

在Python中我可以定义一个函数如下:

def func(kw1=None,kw2=None,**kwargs):
   ...

在这种情况下,我可以打电话func as:

func(kw1=3,kw2=4,who_knows_if_this_will_be_used=7,more_kwargs=Ellipsis)

我还可以将函数定义为:

def func(arg1,arg2,*args):
    ...

可以称为

func(3,4,additional,arguments,go,here,Ellipsis)

最后,我可以将这两种形式结合起来

def func(arg1,arg2,*args,**kwargs):
    ...

但是,不起作用的是调用:

func(arg1,arg2,*args,kw1=None,kw2=None,**kwargs):  #SYNTAX ERROR (in Python 2 only, apparently this works in Python 3)
    ...

我最初的想法是这可能是因为一个函数

def func(arg1,arg2,*args,kw1=None):
    ...

可以称为

func(1,2,3)  #kw1 will be assigned 3

所以这会带来一些关于是否应该将 3 打包到中的歧义args or kwargs。然而,在 Python 3 中,可以指定仅关键字参数:

def func(a,b,*,kw=None):  # can be called as func(1,2), func(1,2,kw=3), but NOT func(1,2,3)
    ...

这样看来,以下内容似乎没有语法歧义:

def func(a,b,*args,*,kw1=None,**kwargs):
    ...

然而,这仍然会带来语法错误(使用Python3.2测试)。我缺少这个原因吗?并且,有没有办法获得我上面描述的行为(有*args使用默认参数)——我知道我可以通过操纵来模拟这种行为kwargs函数内的字典。


You can在 Python 3 中执行此操作。

def func(a,b,*args,kw1=None,**kwargs):

裸露的*仅当您想要指定仅关键字参数时才使用without接受可变数量的位置参数*args。你不用两个*s.

引用语法,在Python 2, 你有

parameter_list ::=  (defparameter ",")*
                    (  "*" identifier [, "**" identifier]
                    | "**" identifier
                    | defparameter [","] )

而在Python 3, 你有

parameter_list ::=  (defparameter ",")*
                    (  "*" [parameter] ("," defparameter)*
                    [, "**" parameter]
                    | "**" parameter
                    | defparameter [","] )

其中包括在之后提供附加参数*范围。

UPDATE:

最新的 Python 3 文档here.

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

使用 *args、**kwargs 和可选/默认参数调用 Python 函数 的相关文章

  • 如何删除 PyCharm 中的项目?

    如果我关闭一个项目 然后删除该项目文件夹 则在 PyCharm 重新启动后 会再次创建一个空的项目文件夹 只需按顺序执行以下步骤即可 他们假设您当前在 PyCharm 窗口中打开了该项目 单击 文件 gt 关闭项目 关闭项目 在 PyCha
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • 从 pyspark.sql 中的列表创建数据框

    我完全陷入了有线的境地 现在我有一个清单li li example data map lambda x get labeled prediction w x collect print li type li 输出就像 0 0 59 0 0
  • 如何获取numpy.random.choice的索引? - Python

    是否可以修改 numpy random choice 函数以使其返回所选元素的索引 基本上 我想创建一个列表并随机选择元素而不进行替换 import numpy as np gt gt gt a 1 4 1 3 3 2 1 4 gt gt
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • Python MySQL 操作错误:1045,“用户 root@'localhost' 的访问被拒绝

    我试图通过以下方式从我的 python 程序访问数据库 db mysql connect host localhost user Max passwd maxkim db TESTDB cursor db cursor 但是 我在第一行代码
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • Jupyter 笔记本中未显示绘图图表

    我已经尝试解决这个问题几个小时了 我按照上面的步骤操作情节网站 https plot ly python getting started start plotting online并且图表仍然没有显示在笔记本中 这是我的情节代码 color
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 无法在 PyCharm 版本 9.3.3 中安装 NumPy。 Python版本3.8.2

    在 PyCharm 中安装 NumPy 时出错 尝试安装 Microsoft Visual C 14 0 还是行不通 NumPy 正在通过命令安装pip3 install numpy在 cmd 终端中 但是当尝试将其安装在 PyCharm
  • 将字符串中的随机字符转换为大写

    我尝试随机附加文本字符串 这样就不只是有像这样的输出 gt gt gt david 我最终会得到类似的东西 gt gt gt DaViD gt gt gt dAviD 我现在的代码是这样的 import random import stri
  • 使用 suds SOAP 库进行 HTTP 身份验证的奇怪行为

    我有一个正在运行的 python 程序 它使用 suds 通过 SOAP 获取大量数据 Web服务是通过分页功能实现的 这样我就可以抓取nnn每个 fetch 调用的行并获取下一个nnn与后续的电话 如果我使用如下代码向 HTTP 服务器进
  • 基于值而不是类型的单次调度

    我在 Django 上构建 SPA 并且有一个庞大的功能 其中包含许多功能if用于检查我的对象字段的状态名称的语句 像这样 if self state new do some logic if self state archive do s
  • 使用 selenium 和 python 来提取 javascript 生成的 HTML?萤火虫?

    这里是Python新手 我遇到的是数据收集问题 我在这个网站上 当我用 Firebug 检查我想要的元素时 它显示了包含我需要的信息的源 然而常规源代码 没有 Firebug 不会给我这个信息 这意味着我也无法通过正常的 selenium
  • 非法指令:MacOS High Sierra 上有 4 条指令

    我正在尝试在 pygame 3 6 中制作一个看起来像聊天的窗口 我刚刚将我的 MacBook 更新到版本 10 13 6 在我这样做之前它工作得很好 但在我收到消息之后 非法指令 4 Code import pygame from pyg
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我
  • 描述符“join”需要“unicode”对象,但收到“str”

    代码改编自here http wiki geany org howtos convert camelcase from foo bar to Foo Bar def lower case underscore to camel case s

随机推荐

  • 如果在 iframe 中则隐藏标题

    我需要隐藏基于 WordPress 的网站的标头 以防该网站加载到 iFrame 中 我应该用 javascript 函数还是 css 来实现 我该怎么做呢 我找到了这个
  • 电话号码的 UITextField

    我想知道如何格式化我用于电话号码的文本字段 即像iPhone上的 添加新联系人 页面 当我输入新手机时 例如1236890987 它将其格式设置为 123 689 0987 我已经将键盘设置为数字键盘 这是我的解决方案 效果很好 实时格式化
  • 在MATLAB中绘制椭圆和椭球体

    如何使用 MATLAB 绘制椭圆和椭球体 x 2 a 2 y 2 b 2 1 n 40 a 0 b 2 pi c 0 d 2 pi for i 1 n u a b a i 1 n 1 for j 1 m v a d c j 1 m 1 x
  • try catch 块中未捕获异常

    我做一个简单的抛出 测试抛出 它没有被我的catch std 异常 e 是因为我正在抓一个std 异常 e 我的意思是 只有从 std exception 派生的异常类才会被捕获吗 如果不是 是我做错了什么还是正常的 顺便说一句 两个 ca
  • 使用JAVA在HANA中插入数组

    我有一个对象数组列表 并尝试将该列表插入到 HANA 中 所以我的插入代码看起来像 PreparedStatement stmt conn prepareStatement INSERT INTO SCHEMA TABLE VALUES A
  • 在 inno Setup 中使用 DOM 添加节点到 xml - 奇怪的问题

    非常奇怪的问题 我使用 DOM 编辑 xml 文件 需要与我们交互的应用程序的 exe config 文件 但是由于我必须批量添加几个类似的部分 所以我创建了一个函数来插入整个需要的块 调用这个函数一次就完美了 之后使用不同的参数再次调用它
  • 使用 GROUP SEPARATOR 的 Explode() 函数

    根据发现通过MySQL GROUP CONCAT 转义这个我有用GROUP CONCAT SELECT topic response response GROUP CONCAT comment SEPARATOR 0x1D AS comme
  • 你能用 javascript (jxa) 编写文件夹操作吗?

    我正在寻找 AppleScript 的直接翻译 on adding folder items to this folder 但我似乎无法在任何地方找到它 无论是术语的用法还是关键字 this folder 本身 使用 Automator 我
  • 在引导输入字段中放置清除按钮

    我试图在输入字段内 搜索图标之前的右侧放置一个清除按钮 但它不起作用 x 显示在输入字段的前面 我使用绝对定位 right 0 和 top 4px 您可以在这里查看我的示例 http www bootply com YUwdJ5Kvx6 一
  • Delphi Windows 服务设计

    Delphi Windows 服务设计 我从未创建过 Windows 服务 但一直在阅读我发现的所有内容 我遇到的所有文章或示例在实现上都非常基础 并且范围有限 还没有看到任何超出此范围或解决特定场景的内容 所以 我已经掌握了我可能会找到的
  • jQuery 的“uploadProgress”未在“$.ajax”中触发

    我是 jQuery 新手 现在正在处理文件上传 我想在每次上传图像时添加一些进度条 我用的是uploadProgress在 jQuery 中 但它似乎不起作用 这是我的代码 form on submit function e var fil
  • Progress 元素内的 html 文本

    您好 有人可以帮我处理这个进度 html 元素吗 我需要能够在进度的右侧放置一个文本值 并根据进度是否减少文本来配合该元素 progress webkit appearance none progress webkit progress b
  • 在 OleDbCommand 中使用“... where Column like ...”不起作用

    我正在使用 C 从 Access 我认为是 2003 或 2007 数据库中选择某些内容 但它没有选择任何内容 我在 Access 本身中尝试了 SQL 语法 它似乎工作正常 我对 C 和 Access 相当陌生 到目前为止我所拥有的 Ol
  • Jquery 从脚本标签获取文本时出现问题?

    我有这个小 HTML 文档
  • 在 Windows 10 中批量运行 VBS 脚本时解压缩文件错误

    运行VBS时解压码在 Win 10 中执行批处理 出现以下错误 鉴于其他人之前曾报告过它可以工作 这可能是什么原因 更改目标目录或显式设置它们不会影响该错误 echo off setlocal enabledelayedexpansion
  • python:直接编辑ISO文件

    是否可以获取 ISO 文件并直接编辑其中的文件 即不解压 更改文件并重新打包 1 可以用Python来做吗 我该怎么做呢 您可以用于列出和提取 我测试了第一个 https github com barneygale iso9660 blob
  • 为 Sklearn 重塑数据

    我有一个颜色列表 initialColors u black u black u black u white u white u white u powderblue u whitesmoke u black u cornflowerblu
  • 角度 $watch |从函数返回项目

    我很想知道为什么我总是必须这样做 scope watch function return scope someData function value console log value 为了让 Angular 真正观察数据 为什么我必须这样
  • Web 配置文件中的 Windows 模拟代码错误

    我在 Web 配置文件中声明了以下部分以允许模拟 我已将该文件夹共享给另一台计算机上的网络内的公共访问
  • 使用 *args、**kwargs 和可选/默认参数调用 Python 函数

    在Python中我可以定义一个函数如下 def func kw1 None kw2 None kwargs 在这种情况下 我可以打电话func as func kw1 3 kw2 4 who knows if this will be us