是否可以分配一个要在函数中使用的变量,但不应该是全局变量

时间:2018-12-07 09:35:57

标签: python python-3.x

所以我想做的是我需要分配一个变量以在多个函数中使用。但是该变量不应是全局变量。如果可能的话我该怎么办?

编辑:我确实忘记了一件事。这是为我的项目准备的,大部分已经完成,但是。 我的代码需要尽可能不重复。我有5个变量和15个函数来使用部分或全部这些变量。

Edit2:让我在这里发布一个函数。

def draw_stairs(top_stair_wide, stair_height, stair_count, character):
for o in range(stair_count):
    for b in range(stair_height):
        draw_straight_line(top_stair_wide, character)
        print("")
    top_stair_wide += 3

我需要做的是在使用该功能时,需要用非全局变量填充“ top_stair_wide”,“ stair_height”,“ stair_count”。我不能只放数字,因为我将在数学中再次在14个不同的函数中使用这些变量。

我有一个绘制直线的函数,在此之前,它输入并返回字符,所以这些都不是问题。

5 个答案:

答案 0 :(得分:3)

创建一个类,使变量成为实例变量,然后将函数转换为方法。然后,您无需显式传递即可访问每种方法中的实例变量。

class C:
    def __init__(self, var1, var2, var3):
        self.var1 = var1
        self.var2 = var2
        self.var3 = var3

    def add_them(self):
        return self.var1 + self.var2 + self.var3

    def multiply_them(self):
        return self.var1 * self.var2 * self.var3

以此类推。

答案 1 :(得分:2)

您需要在函数定义中使用parameter(s),然后在调用它时将变量作为argument(s)传递。

答案 2 :(得分:1)

您可以将其传递给函数,例如:

def func1(variable):
    # your logic here with variable
    return 'something'

def func2(variable):
    # your logic here with variable
    return 'something'

或者您可以在当前文件中将其设置为常量:

VARIABLE = 'variable'

def func1():
    # your logic here with VARIABLE
    return 'something'

def func2():
    # your logic here with VARIABLE
    return 'something'

答案 3 :(得分:1)

使用您在评论中告诉我的主要功能,您可以这样编写:

def main():
    # Here are your NOT GLOBAL variables:
    top_stair_wide = 1
    stair_height = 2
    stair_count = 3
    character = "O"

    def draw_stairs(top_stair_wide, stair_height, stair_count, character):
        for o in range(stair_count):
            for b in range(stair_height):
                draw_straight_line(top_stair_wide, character)
                print("")
            top_stair_wide += 3

    # ... more definitions follow 

    # Then call the functions...

# Job done when you execute the program:
main()

或者:

def main(top_stair_wide, stair_height, stair_count, character): # <-- cram all the expected arguments there

    def draw_stairs(top_stair_wide, stair_height, stair_count, character):
        for o in range(stair_count):
            for b in range(stair_height):
                draw_straight_line(top_stair_wide, character)
                print("")
            top_stair_wide += 3

    # ... more definitions follow 

    # Then call the functions...

# Job done when you execute the program:
main(1, 2, 3, "O")

也可以使用kwargs,因为那样的话,您必须在调用main()时而不是在定义它时知道参数:

def main(**kwargs):

    def draw_stairs(**kwargs):
        for o in range(kwargs["stair_count"]):
            for b in range(kwargs["stair_height"]):
                draw_straight_line(kwargs["top_stair_wide"], kwargs["character"])
                print("")
            kwargs["top_stair_wide"] += 3

    # ... more definitions follow 

    # Then call the functions...
    function1(**kwargs)
    function2(**kwargs)
    function3(**kwargs)


# Job done when you execute the program:
main(top_stair_wide = 1,
     stair_height = 2,
     stair_count = 3,
     character = "O")

答案 4 :(得分:0)

另一种选择是使用存储共享参数的字典,并仅将此字典(而不是单独分配所有变量)作为参数传递:

df_list <- by(df, df$Date, function(unique) unique)
df_list
df$Date: 2018-01-07
    ID       Date Status Category
8 TR-6 2018-01-07 Passed        A
------------------------------------------------------------------------------------------ 
df$Date: 2018-01-08
    ID       Date Status Category
5 TR-4 2018-01-08 Failed        B
6 TR-5 2018-01-08 Passed        C
7 TR-5 2018-01-08 Failed        A
------------------------------------------------------------------------------------------ 
df$Date: 2018-01-09
    ID       Date Status Category
2 TR-2 2018-01-09 Passed        B
3 TR-3 2018-01-09 Failed        C
4 TR-3 2018-01-09 Failed        A
------------------------------------------------------------------------------------------ 
df$Date: 2018-01-10
    ID       Date Status Category
1 TR-1 2018-01-10 Passed        A