在函数外更新空变量
Updating empty variables outside a function
我想弄清楚如何在 Python 中更新函数外部的空变量。这样做的原因是创建一个循环,向用户查询他们可以添加的其他参数。
我目前的情况如下:
param1 = ""
param 2 = ""
typeans = ['parameter 1', 'param 2']
typeansa = ['parameter 2', 'param 2']
def addparams():
while True:
again = raw_input('Would you like to add another parameter? Enter y/n: ')
if again == "n":
break
if again == "y":
additionalparams = raw_input("Would you like to add any other parameters? (Parameter 1, Parameter 2): ")
if additionalparams.lower() in typeans:
param1 = raw_input('Please enter the first search criteria: ')
param1.update() = param1+"one"
elif additionalparams.lower() in typeansa:
param2 = raw_input('Please enter the second search criteria: ')
param2.update() = param2+"two"
addparams()
addparams()
url = www.website.com/+param1+param2
此代码的目的是允许我查询用户是否有其他参数,然后将它们添加到 url/uri。我在函数之外将它们留空的原因是,以防用户只选择使用其中一个变量或其中的几个变量(在我的真实代码中,我有 7 个参数)。
我知道这可能不是解决此问题的最佳方法,非常感谢任何建议。我是 Python 的新手,欢迎任何帮助。
谢谢!
您应该查看 global
statement 以直接回答您的问题。
def addparams():
global param1
global param2
...
除此之外,我必须说您的代码还有一个奇怪的缩进和一些拼写错误:param 2
不是 Python 中的有效名称,typeans
的第二项可能应该是 'param 1'
并且您在循环中还有一个对 addparams()
的额外调用。最后,我不知道 param1.update()
是什么。它应该看起来像:
param1 = ""
param2 = ""
def addparams():
global param1
global param2
typeans = ['parameter 1', 'param 1']
typeansa = ['parameter 2', 'param 2']
while True:
again = raw_input('Would you like to add another parameter? Enter y/n: ')
if again == "n":
break
if again == "y":
additionalparams = raw_input("Would you like to add any other parameters? (Parameter 1, Parameter 2): ")
if additionalparams.lower() in typeans:
param1 = raw_input('Please enter the first search criteria: ')
param1 = param1+"one"
elif additionalparams.lower() in typeansa:
param2 = raw_input('Please enter the second search criteria: ')
param2 = param2+"two"
但是,这不一定是最好的方法;我宁愿 return 从函数中编辑参数列表:
def addparams():
param1 = ''
param2 = ''
typeans = ['parameter 1', 'param 1']
typeansa = ['parameter 2', 'param 2']
while True:
[...] # same code as above
return param1, param2
param1, param2 = addparams()
url = 'www.website.com/'+param1+param2 # not sure that's the url you want
您可能想更进一步,实际上 return 完整 url:
def createURL():
param1 = ''
param2 = ''
typeans = ['parameter 1', 'param 1']
typeansa = ['parameter 2', 'param 2']
while True:
again = raw_input('Would you like to add another parameter? Enter y/n: ')
if again == "n":
break
if again == "y":
additionalparams = raw_input("Would you like to add any other parameters? (Parameter 1, Parameter 2): ")
if additionalparams.lower() in typeans:
param1 = raw_input('Please enter the first search criteria: ')
param1 = param1+"one"
elif additionalparams.lower() in typeansa:
param2 = raw_input('Please enter the second search criteria: ')
param2 = param2+"two"
return 'www.website.com/'+param1+param2
url = createURL()
如果没有更大的参照系,这听起来可能完全无关紧要,但您可以考虑简单地在一个函数中构建整个目的地,从而摆脱更新外部变量的整个问题。
def get_params():
target = 'http://www.example.com'
asking = True
while asking:
next_param = raw_input('Add another param? Y/N')
if 'y' in next_param.lower():
target += "/{}".format(raw_input('Enter parameter: '))
else:
asking = False
return target
如果您有更大的需要分别存储每个参数,那么您可以只使用 return 一个 list
参数,然后使用 '/'.join(x for x in returned_list)
。这将有一个额外的好处,即为您提供参数列表和最终搜索字符串,而不必让所有这些全局变量四处浮动。
def get_list_of_params():
target = ['http://www.example.com']
asking = True
while asking:
next_param = raw_input('Add another param? Y/N')
if 'y' in next_param.lower():
target.append(raw_input('Enter parameter: '))
else:
asking = False
return target
您将按如下方式使用:
param_list = get_list_of_params()
search_string = '/'.join(param_list)
通过这种方式,您无需设置全局变量来改变其他地方,您只需使用已经准备好使用的 return 值。
我想弄清楚如何在 Python 中更新函数外部的空变量。这样做的原因是创建一个循环,向用户查询他们可以添加的其他参数。
我目前的情况如下:
param1 = ""
param 2 = ""
typeans = ['parameter 1', 'param 2']
typeansa = ['parameter 2', 'param 2']
def addparams():
while True:
again = raw_input('Would you like to add another parameter? Enter y/n: ')
if again == "n":
break
if again == "y":
additionalparams = raw_input("Would you like to add any other parameters? (Parameter 1, Parameter 2): ")
if additionalparams.lower() in typeans:
param1 = raw_input('Please enter the first search criteria: ')
param1.update() = param1+"one"
elif additionalparams.lower() in typeansa:
param2 = raw_input('Please enter the second search criteria: ')
param2.update() = param2+"two"
addparams()
addparams()
url = www.website.com/+param1+param2
此代码的目的是允许我查询用户是否有其他参数,然后将它们添加到 url/uri。我在函数之外将它们留空的原因是,以防用户只选择使用其中一个变量或其中的几个变量(在我的真实代码中,我有 7 个参数)。
我知道这可能不是解决此问题的最佳方法,非常感谢任何建议。我是 Python 的新手,欢迎任何帮助。
谢谢!
您应该查看 global
statement 以直接回答您的问题。
def addparams():
global param1
global param2
...
除此之外,我必须说您的代码还有一个奇怪的缩进和一些拼写错误:param 2
不是 Python 中的有效名称,typeans
的第二项可能应该是 'param 1'
并且您在循环中还有一个对 addparams()
的额外调用。最后,我不知道 param1.update()
是什么。它应该看起来像:
param1 = ""
param2 = ""
def addparams():
global param1
global param2
typeans = ['parameter 1', 'param 1']
typeansa = ['parameter 2', 'param 2']
while True:
again = raw_input('Would you like to add another parameter? Enter y/n: ')
if again == "n":
break
if again == "y":
additionalparams = raw_input("Would you like to add any other parameters? (Parameter 1, Parameter 2): ")
if additionalparams.lower() in typeans:
param1 = raw_input('Please enter the first search criteria: ')
param1 = param1+"one"
elif additionalparams.lower() in typeansa:
param2 = raw_input('Please enter the second search criteria: ')
param2 = param2+"two"
但是,这不一定是最好的方法;我宁愿 return 从函数中编辑参数列表:
def addparams():
param1 = ''
param2 = ''
typeans = ['parameter 1', 'param 1']
typeansa = ['parameter 2', 'param 2']
while True:
[...] # same code as above
return param1, param2
param1, param2 = addparams()
url = 'www.website.com/'+param1+param2 # not sure that's the url you want
您可能想更进一步,实际上 return 完整 url:
def createURL():
param1 = ''
param2 = ''
typeans = ['parameter 1', 'param 1']
typeansa = ['parameter 2', 'param 2']
while True:
again = raw_input('Would you like to add another parameter? Enter y/n: ')
if again == "n":
break
if again == "y":
additionalparams = raw_input("Would you like to add any other parameters? (Parameter 1, Parameter 2): ")
if additionalparams.lower() in typeans:
param1 = raw_input('Please enter the first search criteria: ')
param1 = param1+"one"
elif additionalparams.lower() in typeansa:
param2 = raw_input('Please enter the second search criteria: ')
param2 = param2+"two"
return 'www.website.com/'+param1+param2
url = createURL()
如果没有更大的参照系,这听起来可能完全无关紧要,但您可以考虑简单地在一个函数中构建整个目的地,从而摆脱更新外部变量的整个问题。
def get_params():
target = 'http://www.example.com'
asking = True
while asking:
next_param = raw_input('Add another param? Y/N')
if 'y' in next_param.lower():
target += "/{}".format(raw_input('Enter parameter: '))
else:
asking = False
return target
如果您有更大的需要分别存储每个参数,那么您可以只使用 return 一个 list
参数,然后使用 '/'.join(x for x in returned_list)
。这将有一个额外的好处,即为您提供参数列表和最终搜索字符串,而不必让所有这些全局变量四处浮动。
def get_list_of_params():
target = ['http://www.example.com']
asking = True
while asking:
next_param = raw_input('Add another param? Y/N')
if 'y' in next_param.lower():
target.append(raw_input('Enter parameter: '))
else:
asking = False
return target
您将按如下方式使用:
param_list = get_list_of_params()
search_string = '/'.join(param_list)
通过这种方式,您无需设置全局变量来改变其他地方,您只需使用已经准备好使用的 return 值。