在Python中通过字符串调用类型

5 投票
6 回答
2165 浏览
提问于 2025-04-15 15:32

我知道可以用globals()、locals()和getattr这些方法在Python中通过字符串来引用东西(就像在这个问题里提到的那样),但是如果我没有遗漏什么明显的东西,我似乎无法用这些方法来调用类型。

比如:

In [12]: locals()['int']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)

e:\downloads_to_access\<ipython console> in <module>()

KeyError: 'int'

In [13]: globals()['int']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)

e:\downloads_to_access\<ipython console> in <module>()

KeyError: 'int'

getattr(???, 'int')...

这样做的最佳方法是什么呢?

6 个回答

3

在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它并没有按照预期工作。这种情况下,了解其他人的经验和解决方案就显得特别重要。

在社区网站上,比如StackOverflow,很多人会分享他们遇到的问题和解决办法。这些讨论通常会涉及到具体的代码示例,帮助大家更好地理解问题所在。通过查看这些内容,编程小白也能学到很多实用的知识,逐步提高自己的技能。

总之,遇到问题时,不要害怕寻求帮助,看看别人是怎么解决类似问题的,这样可以让你在编程的道路上走得更顺利。

getattr(__builtins__,'int')
7

你已经用内置的方法找到了一个解决方案,但还有一种值得掌握的技巧叫做“调度表”。如果你的CSV文件是为了多个用不同编程语言写的应用程序而设计的,它可能会像这样:

Integer,15
String,34
Float,1.0
Integer,8

在这种情况下,你可能想要一个这样的结构,其中 csv 是一个包含上述数据的元组列表:

mapping = {
    'Integer': int,
    'String': str,
    'Float': float,
    'Unicode': unicode
}
results = []
for row in csv:
    datatype = row[0]
    val_string = row[1]
    results.append(mapping[datatype](val_string))
return results

这样做可以让你灵活地将任意字符串映射到有用的类型。你不需要对数据进行复杂的处理来得到Python所期望的确切值。

12

在编程中,有三种变量的范围:局部变量、全局变量和内置变量。
也许你在寻找的是内置变量:

import __builtin__
getattr(__builtin__,'int')

撰写回答