我希望能够分辨出第一次调用方法的时间。当我打印到分隔文件时,我主要需要这个,如果是第一次迭代,我想在实际信息之前打印一个标题。这就是我通常做的事情:
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
虽然这实现了我追求的目标,但我很好奇是否有更好/更有效的方式来做到这一点。有没有办法检测方法是否第一次被调用而不必向其传递额外的参数?
谢谢,
答案 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