如何访问函数内部的变量

时间:2019-07-16 03:45:22

标签: python

我正在尝试执行4个步骤,要求用户提供“关键字符”和字符串,然后大写字符串,然后从字符串中删除所有关键字符实例。这些步骤中的每一个都应该是自己的功能。但是,步骤3和4依赖于访问步骤1和2中位于函数中的变量。

我已经阅读了一些有关以下内容的主题... How to access the variables declared inside functions in python ...这表明您必须在定义变量后“返回”变量,但我已经做到了(我认为),并且它什么都没有改变。

def main():
    get_key_character()
    get_string()
    sentence_capitalizer()
    remove_key_character()

def get_key_character():
    key_character=str(input("Please enter a SINGLE character to act as key? "))
    if len(key_character)!=1:
        get_key_character()
    else:
        return key_character

def get_string():
    phrase_input=str(input("Please enter a phrase or sentence >=4 and <=500 characters: "))
    if len(phrase_input) <4 or len(phrase_input)>500:
        get_string()
    else:
        return phrase_input

def sentence_capitalizer():
    import re
    sentence_capitalized=(re.sub(r"(^|\?|\.|\!)\s*(\w)", lambda q: q[0].upper(), phrase_input))
    return sentence_capitalized 

def remove_key_character():
    sentence_capitalized.replace(key_character, "")


main()

错误:def句子大写字母中的未定义名称短语输入和def remove_key_character中的未定义名称key_character

2 个答案:

答案 0 :(得分:2)

您缺少的是,返回值必须存储在另一个变量中。 例如,

def test():
    x = 1
    return x

def main():
    z = test()
    print(z)

main()

该程序将输出:

1

您必须将函数的输出作为 parameters 传递给不同函数的后续调用。我已经对您的代码进行了重新设计,使其可以像这样工作。

def main():
    key_character = get_key_character()
    phrase_input = get_string()
    sentence_capitalized = sentence_capitalizer(phrase_input)
    removed = remove_key_character(key_character, sentence_capitalized)
    print(removed)

def get_key_character():
    key_character=""
    while len(key_character) < 1:
        key_character=str(input("Please enter a SINGLE character to act as key? "))

    return key_character

def get_string():
    phrase_input=str(input("Please enter a phrase or sentence >=4 and <=500 characters: "))
    if len(phrase_input) <4 or len(phrase_input)>500:
        get_string()
    else:
        return phrase_input

def sentence_capitalizer(phrase_input):
    import re
    sentence_capitalized=(re.sub(r"(^|\?|\.|\!)\s*(\w)", lambda q: q[0].upper(), phrase_input))
    return sentence_capitalized 

def remove_key_character(key_character, sentence_capitalized):
    return sentence_capitalized.replace(key_character, "")


main()

答案 1 :(得分:0)

  

如果len(key_character)!= 1:      get_key_character()

在这种情况下,您的函数不会return任何内容(因此隐式返回None)。您想return get_key_character()(或者可能更有用的方法是进行重构以避免递归,即添加一个while循环并在收到有效字符时退出,而不是让函数本身调用直到收到有效字符)。

通常,应避免使用全局变量。每当函数返回有用的内容时,调用代码应将该值分配给 local 变量。如果需要将该值传递给另一个函数,请使该函数将参数接受到其自身的另一个 local 变量中。