传递参数而不是全局变量

时间:2017-06-30 15:19:34

标签: python function parameters

我已经使用Python了一段时间,但我从未真正学过如何传递参数,而我养成了使用全局变量的坏习惯,但现在我正在努力学习和它并不好。是否有人能够发现我在这里做错了什么:

简化版代码:

clickLoad = 0

def get_length(clickLoad):
    listLength = 305     #(Sample Value)

    if listLength < 101:
       clickLoad = 0
    elif 100 < listLength < 201:
       clickLoad = 1
    elif 201 <= listLength < 301:
       clickLoad = 2
    elif 301 <= listLength < 401:
       clickLoad = 3
    return clickLoad

def load_more(clickLoad):
    print(clickLoad)      # Testing value, prints 0
    while clickLoad < 0:
       # Do some stuff
       clickLoad -= 1
    return clickLoad

get_length(clickLoad)
load_more(clickLoad)

clickLoad的值似乎从0变为0.当listLength = 305时,我希望它为3。

3 个答案:

答案 0 :(得分:1)

由于您不再使用全局,因此您在clickLoad上所做的更改仅在函数内部进行。你很好地返回clickLoad你忘了重新影响全局变量clickLoad的新返回值(它仍然是全局的,因为你可以在你的脚本中的任何地方访问它) 所以,这应该工作

clickLoad = 0

def get_length(clickLoad):
    listLength = 305     #(Sample Value)

    if listLength < 101:
       clickLoad = 0
    elif 100 < listLength < 201:
       clickLoad = 1
    elif 201 <= listLength < 301:
       clickLoad = 2
    elif 301 <= listLength < 401:
       clickLoad = 3
    return clickLoad

def load_more(clickLoad):
    print(clickLoad)      # Testing value, prints 0
    while clickLoad < 0:
       # Do some stuff
       clickLoad -= 1
    return clickLoad

clickLoad = get_length(clickLoad)
clickLoad = load_more(clickLoad)

答案 1 :(得分:1)

clickLoad = 0

def get_length(clickLoad):
    listLength = 305     #(Sample Value)

    if listLength < 101:
       clickLoad = 0
    elif 100 < listLength < 201:
       clickLoad = 1
    elif 201 <= listLength < 301:
       clickLoad = 2
    elif 301 <= listLength < 401:
       clickLoad = 3
    return( clickLoad)

def load_more(clickLoad):
    print(clickLoad)      # Testing value, prints 0
    while clickLoad < 0:
       # Do some stuff
       clickLoad -= 1
    return clickLoad

s = get_length(clickLoad)
load_more(s)

试试这个,因为你没有在调用之前将函数返回的值存储到下一个函数,因此它采用全局函数

答案 2 :(得分:0)

当函数返回一个值时,表示该值被提供给调用函数以供进一步使用。但它并没有写入全局变量。

要获得您想要的内容,请尝试:

clickLoad = get_length(clickLoad)
clickLoad = load_more(clickLoad)

这是对函数如何工作的非常基本的理解,你应该阅读有关它的教程。