更新函数外的空变量

时间:2015-03-31 19:37:10

标签: python string function variables

我试图弄清楚如何在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新手,欢迎任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:0)

您应该查看global statement以直接回答您的问题。

def addparams():
    global param1
    global param2
    ...

除此之外,我必须说你的代码也有一个奇怪的缩进和一些错别字:param 2不是Python中的有效名称,typeans的第二项应该是{{1并且您在循环中对'param 1'进行了额外调用。最后,我不知道addparams()是什么。它应该看起来像:

param1.update()

然而,它不一定是最好的方式;我宁愿从函数中返回params列表:

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"

您可能希望更进一步并实际返回完整的网址:

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

答案 1 :(得分:0)

如果没有更大的参考框架,它可能听起来完全切向,但你可以考虑在一个函数中简单地构建整个目标,并摆脱更新外部变量的整个问题。

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

如果您需要单独存储每个参数,那么您可以让它返回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)

通过这种方式,您只需处理已经准备好使用的返回值,而不是将全局变量设置为在其他地方进行更改。