我有一个包含多个变量的函数,但我只想在当时为一个变量运行它。例如,只有" exrate"。我们的想法是通过" exrate"进入函数然后for循环" exrate"只计算结果。不幸的是价值"营业额"不会改变。
exrate = 100
sales = 0
def sim(var, min, max):
for var in range(min, max):
turnover = 1000 * (exrate/100) + sales
print(turnover)
sim(exrate, 100, 105)
sim(sales, 1000, 1100)
答案 0 :(得分:1)
让我们尝试重构原始代码:
def f(exrate, sales):
return 1000 * (exrate/100) + sales
首先,我们可以将sim中使用的函数分解出来,即:
1000/100=10
该函数可以进一步简化def f(exrate, sales):
return 10 * exrate + sales
:
exrate=100, sales=0
你正在使用全局def f(exrate=100, sales=0):
return 10 * exrate + sales
,但这不是一个好主意,所以让我们来看看。通过使用默认参数来摆脱这些全局变量:
(exrate or sales)
现在,在这一点上,我们可以使用一个可以用作其他功能的输入的功能,它是一个具有单一责任的功能。
所以,让我们想看看这个函数如何根据其中一个独立变量for i in range(100, 1000, 100):
print(f(exrate=i))
for i in range(0, 1000, 200):
print(f(sales=i))
发展:
for i in range(0, 1000, 200):
print(f(exrate=200, sales=i))
或两者:
f(x)=ax+b
主要思想是,在模拟某些东西时,最好将代码拆分为进行模拟的代码(在图形中绘制函数,将值打印到控制台上,......)和代码是模拟本身(在这种情况下,public partial class AddRatingMig : DbMigration
{
public override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "UserType",
table:"AbpUsers",
nullable:true
);
}
public override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name:"UserType",
table:"dbo.AbpUsers"
);
}
}
形式的simple linear function
答案 1 :(得分:0)
您在定义中使用函数外部的变量。考虑在函数定义中用var替换exrate。