python 运行 一次在函数中的代码
python run code that is in a function once
我试图让 Python 中的一个变量连续增加一个,但在函数内部。我正在使用的是这样的:
def func1():
def set1():
x=5
y=10
##lots of code
x+=1
y+=1
def func2():
while True:
func1()
set1()
func2()
我想知道是否有更好的方法来做到这一点?
x = None
y = None
def set1():
global x, y
x=5
y=10
def func1():
global x, y
x+=1
y+=1
def func2():
while True:
func1()
set1()
func2()
可能最好的方法是将 x 和 y 的定义放入函数 2 中,并将它们作为函数 1 的输入和输出。
def func1(x, y):
##lots of code
x+=1
y+=1
return x, y
def func2():
x = 5
y = 10
while True:
x, y = func1(x, y)
其他替代方案包括全局定义 x 和 y 并使用 global x
、global y
或使用可变默认参数使函数保持状态,但通常最好不要求助于这些选项,如果你不不必。
一些代码审查和建议:
def func1():
def set1():
x=5
y=10
##lots of code
x+=1
y+=1
def func2():
while True:
func1()
set1() # This won't work because set1 is in the local scope of func1
# and hidden from the global scope
func2()
您似乎希望函数在每次调用时都进行计数。我可以推荐这样的东西吗?:
x=5
y=10
def func1():
global x, y
x+=1
y+=1
print x, y
def func2():
while True:
func1()
func2()
比使用全局变量更好,将它们放在嵌套范围内的可变对象中:
Counts = dict(x=5, y=10)
def func1():
Counts['x'] += 1
Counts['y'] += 1
print Counts['x'], Counts['y']
def func2():
while True:
func1()
func2()
** 刚刚看到关于上升而不是下降的编辑 - 修改代码以适应**
很难从你的问题中判断出你的实际用例是什么,但我认为 Python 生成器可能是适合你的解决方案。
def generator(x, y):
yield x,y
x += 1
y += 1
然后使用:
if __name__ == "__main__":
my_gen = generator(10,5)
for x,y in my_gen:
print x,y
if x+y > 666:
break
对于 Python 的新手来说,这可能有点高级。您可以在此处阅读有关生成器的信息:http://anandology.com/python-practice-book/iterators.html
首先,set1
这个函数好像没什么用,可以去掉。
如果你想保持调用次数或保持调用之间的状态,最好、更易读的方法是将其保存在一个对象中:
class State(object):
def __init__(self):
self._call_count = 0
self.x = 5
def func1(self):
self._call_count += 1
self.x = ... Whatever
def func2():
state = State()
while True:
state.func1()
我试图让 Python 中的一个变量连续增加一个,但在函数内部。我正在使用的是这样的:
def func1():
def set1():
x=5
y=10
##lots of code
x+=1
y+=1
def func2():
while True:
func1()
set1()
func2()
我想知道是否有更好的方法来做到这一点?
x = None
y = None
def set1():
global x, y
x=5
y=10
def func1():
global x, y
x+=1
y+=1
def func2():
while True:
func1()
set1()
func2()
可能最好的方法是将 x 和 y 的定义放入函数 2 中,并将它们作为函数 1 的输入和输出。
def func1(x, y):
##lots of code
x+=1
y+=1
return x, y
def func2():
x = 5
y = 10
while True:
x, y = func1(x, y)
其他替代方案包括全局定义 x 和 y 并使用 global x
、global y
或使用可变默认参数使函数保持状态,但通常最好不要求助于这些选项,如果你不不必。
一些代码审查和建议:
def func1():
def set1():
x=5
y=10
##lots of code
x+=1
y+=1
def func2():
while True:
func1()
set1() # This won't work because set1 is in the local scope of func1
# and hidden from the global scope
func2()
您似乎希望函数在每次调用时都进行计数。我可以推荐这样的东西吗?:
x=5
y=10
def func1():
global x, y
x+=1
y+=1
print x, y
def func2():
while True:
func1()
func2()
比使用全局变量更好,将它们放在嵌套范围内的可变对象中:
Counts = dict(x=5, y=10)
def func1():
Counts['x'] += 1
Counts['y'] += 1
print Counts['x'], Counts['y']
def func2():
while True:
func1()
func2()
** 刚刚看到关于上升而不是下降的编辑 - 修改代码以适应**
很难从你的问题中判断出你的实际用例是什么,但我认为 Python 生成器可能是适合你的解决方案。
def generator(x, y):
yield x,y
x += 1
y += 1
然后使用:
if __name__ == "__main__":
my_gen = generator(10,5)
for x,y in my_gen:
print x,y
if x+y > 666:
break
对于 Python 的新手来说,这可能有点高级。您可以在此处阅读有关生成器的信息:http://anandology.com/python-practice-book/iterators.html
首先,set1
这个函数好像没什么用,可以去掉。
如果你想保持调用次数或保持调用之间的状态,最好、更易读的方法是将其保存在一个对象中:
class State(object):
def __init__(self):
self._call_count = 0
self.x = 5
def func1(self):
self._call_count += 1
self.x = ... Whatever
def func2():
state = State()
while True:
state.func1()