如何在Python中声明值为None,然后重新声明并在if语句中使用?
我的问题很简单,怎么在Python里先把一个值声明为None,然后再重新声明它,最后用它来做一个if判断?
global command
command = None
def user_commands():
def take_command():
try:
with sr.Microphone() as source:
print('listening...')
voice = listener.listen(source)
command = listener.recognize_google(voice)
command = command.lower()
if 'alexa' in command:
command = command.replace('alexa', '')
print(command)
except:
pass
return command
def run_alexa():
global command
command = user_commands()
...
if 'Play' in command:
...
当我这样做的时候,出现了这个错误:TypeError: argument of type 'NoneType' is not iterable
我正在做一个Alexa助手,它会询问用户输入命令,然后执行这个命令。命令的变量是根据用户说的话来设置的,但在Python中,变量必须有类型,所以我先把它设为None,然后再重新声明它,但这样做不行。
2 个回答
-1
在你的情况下,你是在设置变量之前就使用了它,这种情况不仅仅发生在global
变量上。也就是说,你可能对global
这个关键词的用法感到困惑。
global
可以让你在一个封闭的范围内创建或修改一个变量,然后这个变量会被提升到全局范围,也就是可以在程序的任何地方使用。
比如,你可以在你的REPL(交互式编程环境)里试试这个:
>>> foo = "x"
>>>
>>> def bar():
... foo = "y"
...
>>> print(foo)
'x'
>>> bar()
>>> print(foo)
'x'
不过,如果你使用global
这个关键词,当你在函数中修改它时,它会被设置为全局变量。
>>> foo = "x"
>>>
>>> def bar():
... global foo
... foo = "y"
...
>>> print(foo)
'x'
>>> bar()
>>> print(foo)
'y'
1
global 这个关键词可能会让人误解。它并不是用来声明一个全局变量的,而是告诉解释器在未来引用变量时应该使用哪个作用域。让我换个方式来解释:
当你写 global command
的时候,你其实是在说:“解释器,请创建一个名为 command 的全局变量。”但实际上 global command
的意思是:“解释器,每当你在这个函数里看到一个叫做 command 的变量时,你应该去全局作用域找它。”
说到这里,你只需要在全局作用域中定义这个变量(也就是在任何函数外面)。然后,所有想要访问这个全局变量的函数都应该加上 global command
这句话:
command = None
def user_commands():
...
...
return command
def run_alexa():
global command
command = user_commands()