我从未完全理解这一点。我认为这个if语句的作用是允许函数在被调用时运行,而不是在导入函数时运行它。以此代码为例:
# Finds duplicate values in a specified feature class field and populates those reords with a 'Y' in another field
import arcpy
# enter program inputs
def findDupes(inFeatureClass, checkField, updateField, countRec = 0):
with arcpy.da.SearchCursor(inFeatureClass, [checkField]) as rows:
values = [r[0] for r in rows]
with arcpy.da.UpdateCursor(inFeatureClass, [checkField, updateField]) as rows:
for row in rows:
if values.count(row[0]) >= 2:
row[1] = 'Y2'
print "yes"
rows.updateRow(row)
countRec += 1
print countRec
if __name__ == '__main__':
fc = raw_input("paste input feature class path from ArcCatolog: ")
fld = raw_input("duplicate field values: ")
up = raw_input("update field: ")
findDupes(fc, fld, up)
模块arcpy与此问题无关;但是,我看待事物的方式,如果我把原始输入放在脚本的顶部它仍然会运行,但是如果我用这个函数作为模块导入脚本(import CheckforDupes
)它会运行在导入语句中,而不是在__name__ == "__main__"
没有调用函数时。是吗?
答案 0 :(得分:0)
如果模块直接从命令行调用而不是从其他模块导入,则它允许模块具有不同的行为。
在您的示例中,如果input
语句位于顶部,则它们将始终执行,如果从其他位置导入模块并且您想要传入该字段,则可能不是您想要的值而不是提示用户在控制台上键入。