如何在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