试图在输入函数Python之外传递变量



我正在尝试在输入函数之外识别col_numberuser_input

我似乎能够在输入函数之外使用col_number的唯一方法是在内部定义一个全局变量——这似乎是不对的。我已经尝试将语句放置在def get_input之上,但在赋值之前可能会引用一个'col_number'。

我需要使用user_input作为图形标题的txt字符串,但不知道如何传递它。代码中最后一行的print语句给了我一个未解析的引用。

有什么建议吗。

col_number = int
def get_input(prompt):
#global col_number
#locals col_number
global col_number
while True:
user_input = input(prompt).lower()
if user_input in ('apples', 'pears', 'oranges', 'quit'):
# the user = int(0),int(1), int(2) values just assign a different column numnber
if user_input == 'apples':
col_number = 0
if user_input == 'pears':
col_number = 1
if user_input == 'oranges':
col_number = 2
return col_number, user_input
print(get_input(prompt='Enter apples, pears, oranges or q to quit'))
print(user_input)

您不是在中定义全局变量。global语句告诉Python解释器使用在global作用域中创建的col_number对象,而不是创建一个名为col_number的新本地作用域对象。

更好的方法是分配函数返回的对象,而不是预先定义它们:

def get_input(prompt):
while True:
user_input = input(prompt).lower()
if user_input in ('apples', 'pears', 'oranges', 'quit'):
if user_input == 'apples':
col_number = 0
if user_input == 'pears':
col_number = 1
if user_input == 'oranges':
col_number = 2
# I think this next line should be indented?
# I left it here as is to reference your code but it'll error out
# if the input is not valid since col_number will not be created.
return col_number, user_input
# Assign and make use of your returned objects!
my_col, my_input = get_input('Enter apples, pears, oranges or q to quit')
print(my_col)
print(my_input)

最好避免在函数中引用全局变量,因为代码越复杂,全局变量就会变得混乱。

您从不将user_input声明为全局变量。您可以通过在函数之前添加user_input=""和在其他全局语句之后添加global user_input来解决此问题,但这是从函数返回值的一种非语法方式。相反,您应该将函数的结果分配给变量,例如:col_number, user_input = get_input(prompt='Enter apples, pears, oranges or q to quit')。通过执行此操作,您可以访问这些值,也可以删除不再需要的col_number = intglobal col_number

要从get_input中获得user_input,您有两个选项:

从函数中声明变量:

col_num, usr_inpt = get_input(prompt='Enter apples, pears, oranges or q to quit')
print(usr_inpt)

将user_input设为全局变量

col_number = 0
user_input = None
def get_input(prompt):
global col_number
global user_input
while True:
user_input = input(prompt).lower()
if user_input in ('apples', 'pears', 'oranges', 'quit'):
# the user = int(0),int(1), int(2) values just assign a different column numnber
if user_input == 'apples':
col_number = 0
if user_input == 'pears':
col_number = 1
if user_input == 'oranges':
col_number = 2
return col_number, user_input
print(get_input(prompt='Enter apples, pears, oranges or q to quit'))
print(user_input)

但是,正如@r.ook所指出的,使用全局变量通常是个坏主意。

谢谢你-我已经看了一整天了1,因为它起作用了,现在我正试图包括"break"行,以退出最后一部分。它有效,但却崩溃了。我错过了别的东西。

def get_input(prompt):
while True:
user_input = input(prompt).lower()
if user_input in ('apples', 'pears', 'oranges', 'quit'):
# the user = int(0),int(1), int(2) values just assign a different column numnber
if user_input == 'apples':
col_number = 0
if user_input == 'pears':
col_number = 1
if user_input == 'oranges':
col_number = 2
if user_input == 'quit':
break
return col_number, user_input

my_col, my_input = get_input(prompt='Enter apples, pears, oranges or q to quit')
print(my_input)

最新更新