所以我想做的是我需要分配一个变量以在多个函数中使用。但是该变量不应是全局变量。如果可能的话我该怎么办?
编辑:我确实忘记了一件事。这是为我的项目准备的,大部分已经完成,但是。 我的代码需要尽可能不重复。我有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个不同的函数中使用这些变量。
我有一个绘制直线的函数,在此之前,它输入并返回字符,所以这些都不是问题。
答案 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