【问题标题】:Why I can't use vars() inside my function for a variable that is outside my function?为什么我不能在函数内部使用 vars() 来处理函数外部的变量?
【发布时间】:2019-10-05 19:42:33
【问题描述】:

我创建了一个名为translate(x) 的函数。在这个函数之外,我创建了一个名为korean 的变量。我想使用vars()[] 函数调用我的korean。但是,没有成功编译,而是发生了错误。

korean = 'ko-KR'
lgf = 'korean'
def translate(x):
     lgfn = vars()[x]
     return lgfn;

translate(lgf)

我以为输出会是'ko-KR',但是编译后它返回一个keyError: 'korean'

【问题讨论】:

  • 你为什么要这样做?这里不需要使用vars(很少使用)。在任何情况下,您都将 字符串 'korean' 传递到您的函数中,并用于键入 vars 返回的字典。这不在局部变量中,所以你得到了关键错误。
  • 更好地使用字典language = { 'korean': 'ko-KR'}然后你可以做return language[x]。不推荐使用vars()
  • 函数vars(),当不带参数调用时,等价于locals()

标签: python python-3.x function variables


【解决方案1】:

正如 cmets 中所建议的,这里不需要vars()。一个简单的字典就足够了

def translate(key):
    #Return value for a given key
    dct = {'korean': 'ko-KR'}
    return dct[key]

print(translate('korean'))

输出将是

ko-KR

【讨论】:

    【解决方案2】:

    你应该改用globals

    korean = 'ko-KR'
    lgf = 'korean'
    def translate(x):
         lgfn = globals()[x]
         return lgfn;
    
    print(translate(lgf))
    

    输出ko-KR

    有几种方法可以获取环境变量:

    • globals() 给出一个全局变量字典
    • locals() 给出了一个 局部变量字典

    var() 在您的情况下将作为 locals() 工作,它将为您提供函数范围内的变量。而 globals 拥有所有的全局函数

    【讨论】:

      猜你喜欢
      • 2019-02-08
      • 2018-11-12
      • 2015-02-10
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      相关资源
      最近更新 更多