加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

返回Python函数之外的计数器

发布时间:2020-12-20 11:29:25 所属栏目:Python 来源:网络整理
导读:我正在尝试构建一些代码,我已经定义了一个函数,以测试一个计数器如何在函数内部工作: def errorPrinting(x): x += 1 return x 然后我在一些条件逻辑中使用该函数,我希望计数器在满足条件时增加. x = 1for row in arcpy.SearchCursor(fc): if not row.INCLUS
我正在尝试构建一些代码,我已经定义了一个函数,以测试一个计数器如何在函数内部工作:

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模块.提及.它非常有用,可以更轻松地调试大型程序.你可以得到时间,消息类型等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读