Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中定义布尔参数_Python - Fatal编程技术网

如何在Python中定义布尔参数

如何在Python中定义布尔参数,python,Python,我已经定义了一个函数,该函数将根据其值打印特定字符串。但是,我收到一条错误消息,说未定义全局名称“必须打印” 这是我的代码: def myfunction(must_print): must_print = True if bool(must_print) == True: print("Done") elif bool(must_print) == False: print("Change value") if __name__ ==

我已经定义了一个函数,该函数将根据其值打印特定字符串。但是,我收到一条错误消息,说未定义
全局名称“必须打印”

这是我的代码:

def myfunction(must_print):
    must_print = True
    if bool(must_print) == True:
        print("Done")
    elif bool(must_print) == False:
        print("Change value")

if __name__ == "__main__":
    myfunction(must_print)

你知道我为什么会犯这个错误吗

代码中有很多东西需要优化。请查看此示例:

def myfunction(must_print):
    if must_print:
        print("Done")
    else:
        print("Change value")

if __name__ == "__main__":
    myfunction(True)

在代码中有很多东西需要优化。请查看此示例:

def myfunction(must_print):
    if must_print:
        print("Done")
    else:
        print("Change value")

if __name__ == "__main__":
    myfunction(True)

您应该评估全局限制

代码:

must_print = True    

def myfunction(must_print):
    global must_print

    must_print = True
    if bool(must_print) == True:
        print("Done")
    elif bool(must_print) == False:
        print("Change value")

if __name__ == "__main__":
    myfunction(must_print)
Done
输出:

must_print = True    

def myfunction(must_print):
    global must_print

    must_print = True
    if bool(must_print) == True:
        print("Done")
    elif bool(must_print) == False:
        print("Change value")

if __name__ == "__main__":
    myfunction(must_print)
Done

您应该评估全局限制

代码:

must_print = True    

def myfunction(must_print):
    global must_print

    must_print = True
    if bool(must_print) == True:
        print("Done")
    elif bool(must_print) == False:
        print("Change value")

if __name__ == "__main__":
    myfunction(must_print)
Done
输出:

must_print = True    

def myfunction(must_print):
    global must_print

    must_print = True
    if bool(must_print) == True:
        print("Done")
    elif bool(must_print) == False:
        print("Change value")

if __name__ == "__main__":
    myfunction(must_print)
Done

您混淆了一些事情,这在开始使用函数时很容易做到

您所做的事情不需要全局变量,但在某个时候,您应该阅读以了解有关全局变量的更多信息

在定义函数
myfunction
的前6行中,您告诉python有一个参数,名为
must\u print
。此参数在函数中是局部的,您将其设置为的值仅存在于该函数中

您可以通过几种不同的方式调用该函数:

m_p = True
myfunction(m_p)

甚至

myfunction(must_print=True)
它们都归结为同一件事:告诉python调用函数
myfunction
,并将值True传递给第一个参数(名为
must\u print
)。然后python调用该函数,使名为
的局部变量必须打印
。(顺便说一句,在函数的第一行中,您将变量设置为True,从而忽略给定的任何输入。因此,
myfunction(True)
myfunction(False)
将立即得到相同的结果。)

关键的一点是,当您调用函数时,您传递了其他的东西-变量或常量项。(在第三种情况下,您明确告诉它名为
的参数must\u print
设置为True。在这种情况下,在
=
之后,有一个常量或变量。前两种情况只是将第一个参数设置为True,而最后一种情况通过名称指定参数。)在函数
myfunction
之外,没有定义变量
must\u print
,因此python希望它位于全局范围内的某个地方

注意,为了减少混淆,我故意避免:

must_print = True
myfunction(must_print)
这是完全有效的代码,但令人困惑。在这种情况下,if子句有一个局部变量,用于设置传递给函数的参数,然后函数有一个同名的局部变量。这更令人困惑,所以我从
m\p
变量开始

关于python范围的一些好的阅读是,特别是以下两个答案:

根据评论进行编辑

def myfunction(must\u print=True)
myfunction(must\u print=True)
做两件完全不同的事情

关键字
def
是定义函数的地方。在函数定义中,
must\u print=True
表示您有一个名为must\u print的变量,其默认值为True。因此,在函数内部,无论您是执行
myfunction(True)
还是仅执行
myfunction()
,都会有一个名为
must\u print
的参数,其值为True。只有将其显式设置为其他值(例如
myfunction(False)
时,
的变量必须为非真

在第二个版本中,您将显式命名参数。当您只有一个参数时,它没有真正的意义,请尝试以下操作:

def foo(arg1=8, arg2='hello', arg3=True):
    print(arg1, arg2, arg3)
然后您可以执行
foo()
,它将打印“8 hello True”。或者您可以执行
foo(7)
,它将显式设置arg1并使用arg2和arg3的默认值,然后打印“7 hello True”。或者
foo(6,‘再见’)
打印“6再见True”,或者
foo(5,‘whatever’,False)
,将打印“5 whatever False”。但是如何使用默认值并仅更改最后一个参数?这就是命名参数的作用。请尝试
foo(arg3=False)
,输出将为“8 hello False”


最好的学习方法是通过实践。在python解释器中尝试像这样的小函数。你会很快掌握诀窍。

你混淆了一些事情,这在开始使用函数时很容易做到

您所做的事情不需要全局变量,但在某个时候,您应该阅读以了解有关全局变量的更多信息

在定义函数
myfunction
的前6行中,您告诉python有一个名为
must\u print
的参数。该参数在函数中是本地的,您设置它的内容只存在于该函数中

您可以通过几种不同的方式调用该函数:

m_p = True
myfunction(m_p)

甚至

myfunction(must_print=True)
它们都归结为同一件事:告诉python调用函数
myfunction
,并将值True传递给第一个参数(名为
must\u print
),然后python调用该函数,生成名为
must\u print
的局部变量。(顺便说一句,在函数的第一行中,您将变量设置为True,从而忽略给定的任何输入。因此,
myfunction(True)
myfunction(False)
将立即得到相同的结果。)

关键的一点是,当您调用函数时,您传递了其他的东西-变量或常量项。(在第三种情况下,您明确地告诉它名为
的参数must\u print
被设置为True。在这种情况下,在
=
之后,有一个常量或变量。前两种情况只是将第一个参数设置为True,而最后一种情况通过名称指定参数。)out