返回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模块.提及.它非常有用,可以更轻松地调试大型程序.你可以得到时间,消息类型等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |