gpt4 book ai didi

python - 在 Python 函数之外返回一个计数器

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:41 25 4
gpt4 key购买 nike

我正在尝试构建一些代码,并且我已经定义了一个函数来测试计数器如何在函数内部工作:

def errorPrinting(x):
x += 1
return x

然后我在某些条件逻辑中使用该函数,如果满足条件,我希望计数器增加。

x = 1

for row in arcpy.SearchCursor(fc):

if not row.INCLUSION_TYPE or len(row.TYPE.strip()) == 0:
errorPrinting(x)
print x

elif len(row.TYPE) not in range(2,5):
errorPrinting(x)
print x

elif row.INCLUSION_TYPE.upper() not in [y.upper() for y in TableList]:
errorPrinting(x)
print x

我对使用函数还是很陌生,所以我可能不明白如何在 for 循环的下一次迭代中使用的函数之外返回值。它不断向我返回 1。任何人都可以告诉我如何在 x += 1 增加 1 后返回函数外部的 x 吗?

谢谢,迈克

最佳答案

您不是在递增全局 x,而是在递增也恰好命名为 x 的局部参数! (您的 errorPrinting 参数可以命名为任何名称。我称它为 xLocal。)

正如您在此处所见,x 并未随函数递增。

>>> def inc(xLocal):
... xLocal += 1
... return xLocal
...
>>> x = 4
>>> inc(x)
5
>>> x
4

每次都需要将x的值重新赋值给函数的返回值。像这样

x = 1
for row in arcpy.SearchCursor(fc):

if not row.INCLUSION_TYPE or len(row.TYPE.strip()) == 0:
x = errorPrinting(x) # <=== here
print x

elif len(row.TYPE) not in range(2,5):
x = errorPrinting(x) # <=== here
print x

elif row.INCLUSION_TYPE.upper() not in [y.upper() for y in TableList]:
x = errorPrinting(x) # <=== here
print x

整数参数和其他原语在 Python 中通常不通过引用传递。 (Lists、dicts等都是,无意中修改lists其实是Python中很常见的错误。)

编辑:通过“引用”和“值”传递在 Python 中的讨论并不正确。参见 this了解更多详细信息的好问题。

所以,使用我之前的例子:

>>> x = 4
>>> x = inc(x)
>>> x
5

请注意,如果这是通过引用传递的参数,如列表,则此策略会奏效。

>>> def incList(xList):
... for i in range(len(xList)):
... xList[i] += 1
...
>>> xList
[1]
>>> incList(xList)
>>> xList
[2]

请注意,正常的 Pythonic 语法:

for i in xList:
i += 1

不会增加全局值。

注意:如果您想密切关注很多事情,我还推荐 logging @SB 的模块。提及。它非常有用,可以让调试大型程序变得更加容易。您可以获得时间、消息类型等。

关于python - 在 Python 函数之外返回一个计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18521522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com