gpt4 book ai didi

php - Python 相当于 PHP 的 compact() 和 extract()

转载 作者:太空狗 更新时间:2023-10-29 21:13:05 24 4
gpt4 key购买 nike

compact () 和 extract () 是 PHP 中的函数,我觉得非常方便。 compact() 获取符号表中的名称列表,并创建一个仅包含它们的值的哈希表。提取物则相反。例如,

$foo = 'what';
$bar = 'ever';
$a = compact('foo', 'bar');
$a['foo']
# what
$a['baz'] = 'another'
extract(a)
$baz
# another

有没有办法在 Python 中做同样的事情?我环顾四周,最接近的是 this thread ,似乎对此皱眉。

我知道 locals()、globals() 和 vars(),但我怎样才能轻松地选择它们值的一个子集?

Python 是否有更好的东西可以避免这种需求?

最佳答案

它不是很 Pythonic,但如果你真的需要,你可以像这样实现 compact():

import inspect

def compact(*names):
caller = inspect.stack()[1][0] # caller of compact()
vars = {}
for n in names:
if n in caller.f_locals:
vars[n] = caller.f_locals[n]
elif n in caller.f_globals:
vars[n] = caller.f_globals[n]
return vars

过去可以像这样实现 extract(),但在现代 Python 解释器中这似乎不再起作用(并不是说它曾经“应该”起作用,真的,但在 2009 年的实现中有一些怪癖让你侥幸逃脱):

def extract(vars):
caller = inspect.stack()[1][0] # caller of extract()
for n, v in vars.items():
caller.f_locals[n] = v # NEVER DO THIS - not guaranteed to work

如果您真的觉得需要使用这些功能,那么您可能做错了事情。它似乎反对 Python's philosophy至少在三个方面:“显式优于隐式”,“简单优于复杂”,“如果实现难以解释,那不是一个好主意”,也许更多(实际上,如果你有足够的 Python 经验你知道这样的事情还没有完成)。我可以看到它对调试器或事后分析很有用,或者可能对某种非常通用的框架有用,这些框架经常需要创建具有动态选择的名称和值的变量,但这有点牵强。

关于php - Python 相当于 PHP 的 compact() 和 extract(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/783781/

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