布尔关键字参数如何在方法中求值?

时间:2019-05-30 01:29:48

标签: python

希望这不是很愚蠢/基本,但是我想我缺少一个基本的构建基块。

我正在编写一个Python循环以根据OCR结果重命名文件,但希望保留原始文件名的选项。我刚接触Python和编程,对如何计算布尔逻辑存在疑问。作为背景,我知道True是True,False是False,不是True是False,不是False是True。

对于方法/功能,它检查是否要重命名的关键字参数为True或False。为此,我有一个if循环,仅显示“ if named:”。默认情况下,重命名为False。我不确定为什么说“如果重命名:然后不要重命名文件”不起作用,但是写“如果不重命名:不要重命名文件”确实起作用。

我发现,如果键入“如果不重命名:请不要重命名文件”,则可以得到预期的结果,但是我不确定为什么可以这样做。

def pnid_rename(file_name, new_name, rename = False):
    if not rename:
        print('Not renaming')
        return
    else:
        print('Renaming ' + file_name)
        os.rename(file_name, str(new_name) + '.png')
        return

对我来说,“如果重命名”与“如果假”相同,因为重命名=假,所以文件不应该重命名,因为假==假为True。相反,这将触发重命名循环。

那为什么我不需要'

3 个答案:

答案 0 :(得分:0)

“我不确定为什么说“如果重命名:则不要重命名文件”不起作用,而写“如果不重命名:请不要重命名文件”起作用。” =>是正确的。如果重命名的结果为if,则if块内的语句将不执行,而else块内的语句将执行。如果不重命名,则为if,否则为true,因为not false为true,则if块中的语句将执行。

也许您可以详细说明问题所在?

答案 1 :(得分:0)

类似于询问变量rename是否为空或具有任何值。因此,如果您写:

if rename:
        print('Not renaming')

就像您要询问rename变量是否包含任何内容一样,这是真的吗?否,因为该值为False,因此在这种情况下该函数返回Renaming ...

如果您写:

if not rename:
        print('Not renaming')

就像您问的是,该值是否没有任何值,那是真的,因为False类似于说空。这是一种了解您的逻辑的方法,但实际上这不是问题。

答案 2 :(得分:0)

我刚刚意识到我昨晚太累了。如果if评估为true,则if语句不会进入else条件。通过说“不对”,我确保它是对的。感谢所有帮助!