gpt4 book ai didi

python - 我们如何将字节作为关键字参数的键传递给函数?

转载 作者:太空狗 更新时间:2023-10-30 01:12:40 29 4
gpt4 key购买 nike

让我们举个例子:

def fun(**args):
print(str(args))

dic = {'name': 'Pulkit'}
fun(**dic)

此代码工作正常,我有以下输出:

{'name': 'Pulkit'}

现在让我们将值作为字节传递:

dic_vb = {'name': b'Pulkit'}
fun(**dic_vb)

这也能正常工作并有以下输出:

{'name': b'Pulkit'}

但是当我尝试将 key 作为字节时,情况发生了变化:

dic_kb = {b'name': 'Pulkit'}

这导致 TypeError 说:

TypeError: fun() keywords must be strings

有什么方法可以将字节作为关键字参数传递。我还在 repo 检查了 CPython 代码它处理关键字参数,似乎我们无法通过。是否有任何解决方法,或者我是否需要确保通过了 unicode。

我正在处理一个代码库,其中我们在 Python 2 上有很多这样的实例,需要移植到 Python 3。那么唯一可能的方法是将所有关键字参数转换为 unicode 吗?

最佳答案

不,关键字必须是有效的标识符,这与您不能提供以数字作为键值的字典给期望**kwargs 的函数的原因相同:

>>> dic = {1: 'Pulkit'}
>>> fun(**dic)
TypeErrorTraceback (most recent call last)
<ipython-input-54-83c29ed0f08e> in <module>()
3
4 dic = {1: 'Pulkit'}
----> 5 fun(**dic)

TypeError: fun() keywords must be strings

这也是您在源代码中看到的,PyUnicode_Check 的否定 (!) 充当执行者。

这是必需的;您需要提供能够充当名称的 key 。要查看什么是允许的,什么是不允许的,只需尝试在交互式解释器中将其分配给一个名称,然后看看有什么错误:

>>> b'my_list' = [...]  # err
>>> 23 = [21, 22] # err

一个可行的(也是唯一的,如果不允许 decode)选项是将字典作为另一个参数传递,然后通过正常的字典查找访问值。

当然,如果在调用该函数之前将字节解码为字符串是一个可行的替代方案,我建议您采用该选项:

>>> dic = {b'name': 'Pulkit'}
>>> fun(**{b.decode(): v for b, v in dic.items()})

关于python - 我们如何将字节作为关键字参数的键传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41001122/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com