试图了解__self__ ==" __ main __"

时间:2016-07-21 17:35:31

标签: python

我从未完全理解这一点。我认为这个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__"没有调用函数时。是吗?

1 个答案:

答案 0 :(得分:0)

如果模块直接从命令行调用而不是从其他模块导入,则它允许模块具有不同的行为。

在您的示例中,如果input语句位于顶部,则它们将始终执行,如果从其他位置导入模块并且您想要传入该字段,则可能不是您想要的值而不是提示用户在控制台上键入。