首页 > 编程问答 >如何将 *args 参数作为字符串传递给 Python 函数

如何将 *args 参数作为字符串传递给 Python 函数

时间:2024-08-05 16:28:40浏览次数:12  
标签:python keyword-argument

我正在使用 pytubefix 制作一个Youtube下载器。

API允许我编写如下代码:

YouTube(url).streams.filter(progressive=True)

但是假设我有一个字符串存储在像

args = "progressive=True"

这样的变量中,我如何使用 args 字符串来调用函数,就像我直接指定相同的关键字参数一样?

如果我尝试

YouTube(url).streams.filter(args)

那不会做我想要的事情。


不能直接将字符串作为关键字参数传递给函数。 Python 将其解释为一个字符串,而不是代码。 你需要做的是将字符串解析成一个字典,然后使用 **kwargs 将其解包为关键字参数。

以下是如何实现的:

import ast

args = "progressive=True"

# 将字符串转换为字典
args_dict = dict(arg.split("=") for arg in args.split(","))

# 将字符串值转换为布尔值
for key, value in args_dict.items():
  if value.lower() == "true":
    args_dict[key] = True
  elif value.lower() == "false":
    args_dict[key] = False

# 使用 **kwargs 将字典解包为关键字参数
YouTube(url).streams.filter(**args_dict)

解释:

  1. 将字符串转换为字典:

    • 首先,我们使用 args.split(",") 将字符串按逗号分隔符分割成多个键值对字符串。
    • 然后,使用列表推导式对每个键值对字符串进行 arg.split("=") , 以 = 为分隔符,得到键和值。
    • 最后,使用 dict() 函数将键值对列表转换为字典。
  2. 将字符串值转换为布尔值:

    • 我们遍历字典中的每个键值对。
    • 如果值的字符串形式为 "true" 或 "false"(忽略大小写),则将其转换为对应的布尔值。
  3. 使用 kwargs 解包字典:**

    • 在调用 filter() 函数时,我们在字典 args_dict 前面加上 ** 。这会将字典解包,并将键值对作为关键字参数传递给函数。

注意:

  • 此代码假设你的字符串参数都采用 key=value 的形式,并且以逗号分隔。
  • 对于更复杂的字符串解析,你可能需要使用正则表达式或其他更强大的解析技术。

标签:python,keyword-argument
From: 78833502

相关文章

  • Python Telegram Bot 从数据库获取数据时出错
    我正在开发用于管理企业用途任务的电报机器人。团队负责人注册他的公司并获得唯一的ID,然后可以分配任务。问题是,当团队负责人分配任务时,他可以使用/viewtasks访问它们。但是,当员工尝试查看任务时,它会打印出“错误。您尚未注册”。似乎无法检索与用户关联的company_id,即使......
  • 在 Glue 作业中使用 python3+ 创建 CloudFront 签名 URL
    是否可以使用python3+为GlueJob中S3文件中的一个特定文件创建具有一定时间限制的CloudFront签名URL?我看到可以在Lambda中做到这一点,但在Python文档中找不到任何内容,特别是胶水工作。任何人都可以提供一些提示吗?defload_private_key(key_path):withopen(......
  • 【Python学习手册(第四版)】学习笔记14-迭代器和列表解析(一)
    个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。本文主要以通俗易懂的语言介绍迭代器(文件迭代、手动迭代iter和next等),列表解析式包括基础知识包括写法、文件上使用列表解析、扩展列表解析语法等,对列表解析不懂的同学着重推荐......
  • 如何获取部署在 Azure 应用服务上并通过 Microsoft 身份提供商进行身份验证的 Python
    我使用PythonDash包构建了一个Web应用程序,并将该应用程序部署在Azure应用服务上。Web应用程序当前通过Azure门户的应用程序服务使用Microsoft身份提供程序进行身份验证。但是如何获取登录用户的详细信息呢?在本地运行时如何验证我的Web应用程序?我当前的登录流......
  • 使用 Python 打印此图案
    1010101010101010使用python打印此我已经尝试过defprint_pattern(rows):foriinrange(rows):start_char='1'ifi%2==0else'0'pattern=''.join(start_charifj%2==0else('0'ifs......
  • python discord bot nextcord 斜线命令 更改语言
    我想根据用户的不和谐语言更改斜杠命令的名称。如果语言是韩语/서버如果语言是英语/服务器像这样。我可以使用ctx.locale更改里面的内容,但我也想更改名称和描述。我应该怎么办?当我问ChatGPT时,他们说的很奇怪,谷歌上也没有任何信息。但是有一个机器人可以根据语言......
  • 学习Python的书籍推荐--《Python编程从入门到实践》
    版权信息:书名:Python编程:从入门到实践(第3版)作者:[美]埃里克·马瑟斯(EricMatthes)译者:袁国忠评价:1.北京邮电大学副教授陈光老师是这样评价的:    编程教学之道,一是重在实践,二是循序渐进一一通过巧妙的实战项目,激发和保持学习的热情,让学习渐入佳境。在这两方......
  • 我可以将 Python 与 javascript 结合起来用于网站或应用程序吗
    我不知道如果j添加Python和javascript可以吗我尝试过。但决定在继续之前询问一下是否可以继续但是如果我只使用javascript还是只使用python会更好吗?我只需要建议或答案将Python与Javascript结合用于网站或应用程序不仅完全可行,而且也是一种非常常见的做法!二者......
  • Python 网络抓取与请求和美丽的汤被需要 javascript 阻止
    我正在尝试从网站上抓取文本。我使用简单的代码:requests.get(url_here)。我的代码直到最近才有效。现在,当我使用请求时,我收到一条消息,而不是获取网站的文本:“该网站需要启用JavaScript!您使用的浏览器不支持JavaScript,或者已关闭JavaScript。“我已验证我的浏览器确实......
  • python实现局域网及广域网私人聊天(Socket库局域网应用)
    引言在当今这个数字化时代,即时通讯已成为我们日常生活的一部分。无论是通过手机还是电脑,人们都在寻找更高效、更私密的沟通方式。想象一下,在你自己的局域网内,与朋友或同事建立一个专属的聊天室,无需担心数据泄露或者被第三方监听。本文将引导你从零开始,利用Python和Socket库......