python - 如何将对象给关键字参数作为键
问题描述
我想做的是这样
class Foo:
def __init__(self):
self.name = "james"
def foo(**kwargs):
for obj, new_name in kwargs.items():
obj.name = new_name
f = Foo()
foo(f="Tom") # f have to be recognized as an object not a string "f"
据我所知,kwargs 是一本字典。
我测试了将对象作为字典中的键。并且字典可以有一个对象作为键。
dd = {f: 12}
print(dd)
>>>
{<__main__.Foo object at 0x00D685D0>: 12}
但是当我给函数的参数一个对象作为键时,它就变成了字符串“f”。
有没有办法不破坏原始语法
function(obj=value, obj2=value2, ...)
不像这样
function((obj, value), (obj2, value2), ...)
proper process to tuple
编辑:在函数内使用此代码
obj = getattr(sys.modules[__name__], f"{obj_name}")
解决方案
kwargs 作为一个字典,将每个关键字映射到我们旁边传递的值。这就是为什么当我们遍历 kwargs 时,它们的打印顺序似乎没有任何顺序。
def myFun(**kwargs):
for key, value in kwargs.items():
print ("%s == %s" %(key, value))
# Driver code
myFun(first ='Geeks', mid ='for', last='Geeks')
你可以去 **args
在参数之前使用 ** 符号将关键字参数字典传递给函数,当我们不知道有多少关键字参数将被发送到函数时,这种语法用于成功运行代码.
# function definition
def displayArgument(**arguments):
for arg in arguments.items():
print(arg)
# function call
displayArgument(argument1 ="hello", argument2 = 4,
argument3 ="code")
推荐阅读
- ssis - 如何在 SSIS 派生列的列中删除带有数字的字符串?
- java - 方法合并不能应用于给定类型
- javascript - Firebase:获取当前聊天室(或任何抽象资源)中的用户数量
- wamp - Wamp:收到“配置失败”错误
- r - 在数据框中重新编码多个数值变量
- javascript - 如何用找到的不区分大小写的正则表达式替换匹配项,但扩展结果
- powershell - Powershell 查找和替换字符串
- excel - VBA 循环:如何将 Ticker 符号放入 Ticker 列?
- python - Python无法检查值是否在列表中
- jenkins-pipeline - docker-workflow-plugin (docker-pipeline-plugin) java.io.IOException: 无法 rm 容器