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语句呢?如果要向文件或从文件中写入,为什么不在循环之前写入函数并写入头呢