Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何判断一个方法何时第一次被调用_Python_Methods - Fatal编程技术网

Python 如何判断一个方法何时第一次被调用

Python 如何判断一个方法何时第一次被调用,python,methods,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): wri

我想知道什么时候第一次调用了一个方法。当我打印到一个带分隔符的文件时,我主要需要它,如果是第一次迭代,我希望在实际信息之前打印一个头。这是我通常做的:

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
虽然这达到了我追求的目标,但我很好奇是否有更好/更有效的方法来实现这一目标。是否有某种方法可以检测是否第一次调用了某个方法,而不必向其传递额外的参数


谢谢,

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

第一:

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新手,因此可能使用了不好的做法。

在调用函数之前,可以将头写入文件。这样就不需要if语句了。我是一名初级程序员,但这在我看来是合乎逻辑的。例如:

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

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

这是对其他答案的一个更深刻的尊重,但我更喜欢它,因为它使用Python的OOP特性,其思想是将“called”变量分配给函数本身:这是可以做到的,因为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

我认为你的方法很好——也就是说,有第二个参数来指示它是否是第一次。我会让它成为一个布尔值,比如
firstWrite
,并给它一个默认值
False
,但这是相同的想法。你不能传入
count
变量,只引用全局值……但也可以查看这个答案,寻找另一种可能的方法:如果你调用
print(str(count))
无论如何,为什么还要有一个else语句呢?如果要向文件或从文件中写入,为什么不在循环之前写入函数并写入头呢