【问题标题】:Updating a global variable within a function multiple times in Python在 Python 中多次更新函数内的全局变量
【发布时间】:2014-11-18 17:56:03
【问题描述】:

基本上我正在尝试更新我在开头声明的字符串。然后我通过一个函数传递一个列表,该函数在通过测试后会将列表中的项目添加到字符串中,并用分号分隔每个项目。

这是我正在做的事情的精简版,但它证明了我认为的问题。

import os

passList=""

def checkItem(inString):
    if inString.endswith(".tif")==True:
        if passList=="":
            passList=inString
        else:
            passList=passList + ";" + inString

itemList=os.listdir("C:\\temp")

for item in itemList:
    checkItem(item)

print(passList)

我查看了一些有关使用“全局”功能的文档,但它们似乎没有显示适用于我情况的示例。目前,我收到“声明前使用的功能”错误。任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 请包含整个错误日志
  • 你真的根本不想要全局可变状态。这是个坏主意。
  • 尽管阅读了所有文档,但您似乎根本没有使用过 global 语句。在函数内部使用它,错误就会消失。
  • 像@HasanRamezani 建议的那样添加global passList 是必要的,您还遇到脚本不会产生“声明前使用的函数”错误的问题。该错误仅意味着您正在调用代码中实际实现它的位置上方的函数。这在您的示例中没有发生。您运行的脚本与您向我们展示的脚本不同。

标签: python function variables global


【解决方案1】:

试试这个:

def checkItem(inString):
    global passList
    # rest of function code

【讨论】:

    【解决方案2】:

    我相信 Hasan Ramezani 的回答会解决您的错误。但考虑重构以消除对它的需求。

    import os
    
    itemList=filter(lambda x: x.endswith(".tif"), os.listdir("C:\\temp"))
    itemList=";".join(itemList)
    
    print(itemList)
    

    【讨论】:

      【解决方案3】:

      Hasan 和 Clint 都提供了很好的答案。

      由于实际代码的复杂性(无法在此处发布),我最终在函数开头和函数内都为“passList”变量声明了“全局”。

      import os
      
      global passList
      passList=""
      
      def checkItem(inString):
          if inString.endswith(".tif")==True:
              global passList
              if passList=="":
                  passList=inString
              else:
                  passList=passList + ";" + inString
      
      itemList=os.listdir("C:\\temp")
      
      for item in itemList:
          checkItem(item)
      
      print(passList)
      

      它可能看起来不像它应该的那么性感,但它确实有效。

      非常感谢!

      【讨论】:

        猜你喜欢
        • 2020-04-22
        • 1970-01-01
        • 2022-09-25
        • 2022-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-09
        • 1970-01-01
        相关资源
        最近更新 更多