将变量名称传递给函数?

时间:2018-04-22 14:46:08

标签: python function

我有一个包含多个变量的函数,但我只想在当时为一个变量运行它。例如,只有" 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)

2 个答案:

答案 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。

相关问题