Python理解结构和全局变量

时间:2015-01-20 14:19:23

标签: python global-variables

我对python很新,我需要一些建议。

这是我如何组织和编写我的脚本的:

#!/usr/bin/python

import ...

exitCode = 1   

def sendmail(mess,type): 
    [...]
    if ...
       exitCode = 9
    else
       exitCode = 1

    [...]
    return 0

#=====
#start

[...]

try:
    [...]

except:  
    sendmail(message,"connect")
    sys.exit(exitCode)

sys.exit(0)
  1. 导入部分
  2. 变量定义
  3. function sendmail
  4. start(应该是我的主要内容),其中包含一些try/exceptif/else
  5. 我想了解一些事情:

    1. 我是否以正确的方式构建了脚本?我不明白主要功能是如何定义的,有时使用它,有时候不是......应该最好做什么?

    2. 在" main"在某个点调用sendmail函数,如果出现问题,将变量exitCode设置为9.比进一步处理完成并返回0.现在exitCode定义为最顶层所以我希望成为一个全局变量。但如果我在其中读取它的值(在sendmail之后不久)它的值是" 1"虽然我期待一个" 9"。如果我在sendmail函数中读取它,则值正确" 9"。我究竟做错了什么?我想我可以使用return exitCode代替return 0,但我想了解错误。

2 个答案:

答案 0 :(得分:1)

代码中有两个不同的exitCode。全局范围中的一个,您在import之后分配;和sendmail内的那个。修改一个对另一个没有影响。如果要从函数中修改全局exitCode,请使用global语句。

def sendmail(mess,type): 
    global exitCode
    [...]

答案 1 :(得分:1)

  1. 最好的事情是使用

    if __name__ == "__main__":
    
  2. 作为代码的主要入口点(请参阅解释here)。

    1. 要解决全局范围内的变量,应在其前面加上:

      global exitCode
      
    2. 但是,通常不鼓励使用全局变量。在您的情况下,最好将sendmail()函数的返回值设置为退出代码,因此它将如下所示:

      #!/usr/bin/python
      
      import ...
      
      def sendmail(mess,type): 
          [...]
          if ...
             exitCode = 9
          else
             exitCode = 1
      
          [...]
          return exitCode
      
      #=====
      #start
      
      [...]
      
      try:
          [...]
      
      except:  
          exitCode = sendmail(message,"connect")
          sys.exit(exitCode)
      
      sys.exit(0)