2015-08-14 85 views
0

我有一個名爲myGlobal.py的python文件,在這個文件中我把count聲明爲一個全局變量。計數值不增加

import datetime 
import time 
import os 

count = 0 
failCount = 0 

def counterstart: 
    global count 
    count +=1 

我在另一個文件中調用此計數器。所以每次我調用一個函數的時候,我希望通過計數器1,增加該文件是scripts.py

import os 
from selenium import webdriver 
import datetime 
import time 
from myGlobal import * 

def main(): 
    fnfirst() 
    fnsecond() 
    fnthird() 

def fnfirst(): 
    global count 
    print count 

def fnsecond(): 
    global count 
    print count 

def fnthird(): 
    global count 
    print count 

main() 

但每當我跑script.py,計數顯示爲只有0。

這是怎麼發生的?

+2

您有兩個*不同*'計數',因爲每個模塊都有自己的'全局'。 – jonrsharpe

+2

'來自foo import *'不是很好的做法,更好地使用'import foo'然後'foo.count'。這可能也會解決你的問題。 –

+0

我寧願使用一個單例來存儲全局變量,所以你不必繼續使用'全局var'語法無處不在 – muddyfish

回答

0
import myGlobal 

print myGlobal.count # 0 
myGlobal.count += 1 

def foo(): 
    myGlobal.count += 1 

foo() 
print myGlobal.count # 2 

所以這裏是一個基於Python的裝飾解決方案。它會計算特定功能的呼叫次數:

# File script.py 

import myGlobal 

def count_call(func): 
    def _wrapper(*args, **kwargs): 
     myGlobal.count += 1 
     func(*args, **kwargs) 
    return _wrapper 

@count_call 
def fnfirst(): 
    pass # do something 

@count_call 
def fnsecond(): 
    pass # do something 

def main(): 
    print myGlobal.count # 0 
    fnfirst() 
    print myGlobal.count # 1 
    fnsecond() 
    print myGlobal.count # 2 
    fnfirst() 
    print myGlobal.count # 3 

if __name__ == "__main__": 
    main() 
+1

no在scripts.py中每個都是一個獨立的函數,我不想再次調用它。每當我添加一個新函數並調用全局計數時,它應該增加1.因此,如果5個函數,當我添加第6個函數和調用計數時,它應該打印6.但不工作:-( –

+0

Eddited。是你正在尋找? – FunkySayu

+0

@harimadhav你在這裏說'count'應該計算函數的數量或函數被調用的次數嗎? – SuperBiasedMan