如何判断多次第一次调用方法的时间

时间:2014-12-23 19:37:46

标签: python methods

我希望能够分辨出第一次调用方法的时间。当我打印到分隔文件时,我主要需要这个,如果是第一次迭代,我想在实际信息之前打印一个标题。这就是我通常做的事情:

def writeFile(number, count):
    if count == 1:
        print('number')
        print(str(count))
    else:
        print(str(count))


count = 1
for i in range(10):
    writeFile(i, count)
    count += 1

这提供了以下输出:

number
1
2
3
4
5
6
7
8
9
10

虽然这实现了我追求的目标,但我很好奇是否有更好/更有效的方式来做到这一点。有没有办法检测方法是否第一次被调用而不必向其传递额外的参数?

谢谢,

3 个答案:

答案 0 :(得分:5)

有多种方法可以做到这一点。这是三个。

首先:

firstRun=True
def writeFile(number):
    global firstRun
    if firstRun:
        print('number')
        firstRun=False
    print(str(number))

for i in range(10):
    writeFile(i)

第二

def writeFile(number):
    print(str(number))

for i in range(10):
    if not i:
        print('number')
    writeFile(i)

第三

for i in range(10):
    print(('' if i else 'number\n')+str(i))

我假设这只是一个测试问题,意味着指示函数调用初始化或重置数据的情况。我更喜欢那些隐藏来自调用函数的信息(例如1)。我是Python新手,所以我可能会使用不好的做法。

答案 1 :(得分:5)

您可以在调用函数之前将标题写入文件。这将否定你对if语句的需要。我是一名基础程序员,但这对我来说似乎合乎逻辑。例如:

def writeFile(count):
    print(str(count))

print('number')
for i in range(10):
    writeFile(i)

答案 2 :(得分:1)

这是对其他答案的更深层的尊重,但我更喜欢它,因为它使用了Python的OOP-ness,其思想是为函数本身分配“被调用”变量:这可以完成,因为Python是一个对象(甚至是其自身作用域内的函数)。

该概念还可以扩展到在其他范围(除类范围之外)中定义的函数。

class SampleClass:
    def sample(self, *args, **kwargs):
        try:
            if self.__class__.sample.called:
                # do what you have to do with the method 
                print("normal execution")
        except AttributeError:
            # do what you have to do with the first call
            print("first call")
            self.__class__.sample.called = True
            self.__class__.sample(self, *args, **kwargs)

示例:

>>>SampleClass().sample()
first call
normal execution
>>>SampleClass().sample()
normal execution