python计数器函数start_返回Python函数之外的计数器

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

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之后将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中,积分参数和其他基元通常不通过引用传递. (列表,dicts等等.无意中修改列表实际上是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

不会增加全球价值.

注意:如果您希望密切关注很多事情,我还建议使用@SB的logging模块.提及.它非常有用,可以更轻松地调试大型程序.你可以得到时间,消息类型等.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值