繁体   English   中英

Python:在无限循环函数中仅运行一次代码段。

[英]Python: Run code segment only once inside infinite loop function..?

我有一遍又一遍地运行的功能。 在该函数内部,我希望特定段仅在该函数第一次运行时运行。

我不能使用函数外部的任何变量,例如

    firstTime = True

    myFunction(firstTime): #function is inside a loop
        if firstTime == True:
            #code I want to run only once
            firstTime = False
        #code I want to be run over and over again

我也不想使用全局变量。

任何想法如何做到这一点?

利用可变的默认参数:

>>> def Foo(firstTime = []):
    if firstTime == []:
        print('HEY!')
        firstTime.append('Not Empty')
    else:
        print('NICE TRY!')


>>> Foo()
HEY!
>>> Foo()
NICE TRY!
>>> Foo()
NICE TRY!

为什么这样做? 查看问题以获取更多详细信息。

你可以使用一个class实现了__call__魔术方法。 这样的好处是您可以使用多个实例或重置实例。

class MyFunction():
    def __init__(self):
        self.already_called = False

    def __call__(self):
        if not self.already_called:
            print('init part')
            self.already_called = True
        print('main part')

func = MyFunc()
func()
func()

这将导致:

init part
main part
main part 

我是否可以在地狱中生存100年:

#Actually may I not get 100 years in hell for this; my method has the advantage that you can run every single part of it with no hitch whereas, all the other code requires you to run some other part 'only once'.
try:
    if abc=='123':
        print("already done")
except:
    #Your code goes here.
    abc='123'

那应该只在try语句中运行一次代码。 ...现在当然可以使用if 'myVar' in locals():检查变量是否存在if 'myVar' in locals():但是我更喜欢这种方式。

这是我以前的代码的改进。 某些信息告诉我,我可以使用var()['VerySpecificVariableName']进行操作。 IDK,尽管这个不会隐藏异常

try:
    if VerySpecificVariableName=='123':
        print("You did it already.")
except NameError as e:
    if not ('VerySpecificVariableName' in repr(e)):
        raise
    print ('your code here')
    VerySpecificVariableName='123'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM