Function 添加多个函数的结果
使用python 3.3 偶然发现我的程序有另一个问题。这是同一个太阳能项目。我再次决定添加更多功能。这基本上是临时的。我边做边加。我意识到它可以变得更有效,但一旦我决定完成它,我会发布整个编码 无论如何,我需要添加多个函数的结果。以下是我的代码的一部分:Function 添加多个函数的结果,function,python-3.x,mapping,Function,Python 3.x,Mapping,使用python 3.3 偶然发现我的程序有另一个问题。这是同一个太阳能项目。我再次决定添加更多功能。这基本上是临时的。我边做边加。我意识到它可以变得更有效,但一旦我决定完成它,我会发布整个编码 无论如何,我需要添加多个函数的结果。以下是我的代码的一部分: def janCalc(): for a in angle(0,360,10): #angle of orientation for
def janCalc():
for a in angle(0,360,10): #angle of orientation
for d in days(1,32,1.0006630137): #day number of year
for smodule in equation(): #equation() function not shown in this coding
total_jan+=smodule #total_jan is already defined elsewhere
avg_jan=total_jan/(60*(1.0006630137*31))
ratio_jan=avg_jan/5.67
calcJan=(ratio_jan*4.79)
yield calcJan
total_jan=0 #necessary to reset total to 0 for next angle interval
def febCalc():
for a in angle(0,360,10):
for d in days ((1.0006630137*31),61,1.0006630137):
for smodule in equation():
total_feb+=smodule
avg_feb=total_feb/(60*(1.0006630137*28))
ratio_feb=avg_feb/6.56
calcFeb=(ratio_feb*4.96)
yield calcFeb
total_feb=0
#etc..............
是否需要增加每个函数的收益率?
例如:calcJan+calcFeb+
我想得到每个角度间隔下的总结果,然后除以12得到每个间隔的平均值。像这样:-
0度-->总计/12度
10度-->总计/12
20度-->总计/12
30度-->总计/12
360度-->总计/12
如果你需要更多信息,请告诉我
补遗
该解决方案基本上由@jornsharpe解决。但我遇到了一点问题
Traceback (most recent call last):
File "C:\Users\User\Documents\Python\Solar program final.py", line 247, in <module>
output=[sum(vals)/12 for vals in zip(*(gen() for gen in months))]
File "C:\Users\User\Documents\Python\Solar program final.py", line 247, in <listcomp>
output=[sum(vals)/12 for vals in zip(*(gen() for gen in months))]
File "C:\Users\User\Documents\Python\Solar program final.py", line 103, in janCalc
for smodule in equation():
File "C:\Users\User\Documents\Python\Solar program final.py", line 63, in equation
d=math.asin(math.sin(math.radians(23.45))*math.sin(math.radians((360/365.242)*(d-81))))
NameError: global name 'd' is not defined
结果是我不能从函数内部引用函数?我不太确定。因此,即使是我最初的编码也不起作用。我认为它是有效的,因为之前我没有将每个月定义为一个函数。我应该先测试一下
你知道怎么避开这件事吗 演示如何组合多台发电机的简单示例:
>>> def gen1():
for x in range(5):
yield x
>>> def gen2():
for x in range(5, 10):
yield x
>>> [sum(vals) for vals in zip(*(gen() for gen in (gen1, gen2)))]
[5, 7, 9, 11, 13]
或者,用手写体写下:
output = list(gen1())
for index, value in enumerate(gen2()):
output[index] += value
您可以修改任何一个版本以包含一个分部,因此您的案例看起来类似于:
months = [janCalc, fabCalc, ...]
output = [sum(vals) / 12 for vals i zip(*(gen() for gen in months))]
“我只知道如何获得每个函数的收益率,但不知道如何以我想要的方式进行交互”是什么意思?另外,试着把代码中所有的“神奇数字”都计算出来。我不应该把它包括在内。这令人困惑。我想说的是,我只知道如何引用一个函数,但不知道如何引用方程中的多个函数。我希望这是有道理的。我认为问题在于你没有定义总二月数;您当然可以“从函数内部引用函数”。完整的错误回溯在哪里?刚刚发布了回溯错误。问题是函数
方程不起作用;这与你目前发布的代码无关!在从其他代码调用函数之前,应该单独测试该函数;如果你不能让它单独工作,你可能需要打开一个新的问题(包含所有适当的信息)。首先,我建议您去掉任何全局
变量,并显式传递函数所需的参数,这将使名称错误
更容易查找和修复。嗨,jon,很抱歉再次打扰您。我遇到了一点问题。你的编码很好。但这是我的错。我对这个问题作了补充。请检查一下。
months = [janCalc, fabCalc, ...]
output = [sum(vals) / 12 for vals i zip(*(gen() for gen in months))]