Python:如何避免在函数中编写大量的if / elif?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:如何避免在函数中编写大量的if / elif?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1856字,纯文字阅读大概需要3分钟。
内容图文
![Python:如何避免在函数中编写大量的if / elif?](/upload/InfoBanner/zyjiaocheng/734/628c6d451620467882fdf46676571884.jpg)
我写了一个作为计算器执行的函数.它适用于以下变量.
但是我想扩展它以处理15个不同的级别值,以及15个不同的销售和成本值.该功能将对每个级别应用不同的销售和成本计算,如下所示. (由于每个计算都适用于特定级别,因此可能会在函数外部定义计算.)
我可以为15个级别中的每个级别编写大量的if / elif语句,但这似乎不是Pythonic.有没有一种方法可以以编程方式扩展这样的功能,以获得更多的销售,水平和成本?
为清楚起见,输出将与下面相同(取决于当然输入的值),但该功能应该只能处理更多的值.
levels_list = [4, 5] # ultimately 15 values in this list
sale4 = 18280 # ultimately 15 of these values
sale5 = 19180
sale6 = 22170
cost1 = 224 # and 15 of these values
cost2 = 335
cost3 = 456
def sales(level, foo, bar):
for level in levels_list:
if level == 4:
x = cost1 + sale4 * foo
y = cost2 + sale4 * bar
z = x + y
elif level == 5:
x = cost2 + sale5 * foo
y = cost3 + sale5 * bar
z = x + y
return pd.DataFrame({'Total Cost':[z], 'x_Cost':[x], 'y_Cost':[y]})
销售额(5,10,10)
Total Cost x_Cost y_Cost
0 384391 192135 192256
解决方法:
使用dict将相关值与每个级别相关联是有意义的:
levels_dict = {4 :(sale4, cost1, cost2),
5 :(sale5, cost2, cost3)}
这样,levels_dict [level]将为您提供销售和计算中使用的两个成本:
def sales(level, foo, bar):
sale, x_cost, y_cost = levels_dict[level]
x = x_cost + sale * foo
y = y_cost + sale * bar
...
如果范围(15)中的级别始终为true,则使用列表将删除对键的需要,您可以使用列表:
levels_data = [None, #0
None, #1
None, #2
None, #3
(18280, 224, 335),
(19180, 335, 456)]
虽然如果等级从4开始,那么这需要许多占位符.
也可能最好使用namedtuple来确保始终按正确的顺序放置值:
import collections
level = collections.namedtuple("level",["sale","xcost","ycost"])
levels_dict = {4 :level(sale4, cost1, cost2),
5 :level(sale5, cost2, cost3)}
这仍然与上面的方式相同,但也允许您使用名称而不是顺序:
def sales(level, foo, bar):
data = levels_dict[level]
x = data.xcost + data.sale * foo
y = data.ycost + data.sale * bar
...
内容总结
以上是互联网集市为您收集整理的Python:如何避免在函数中编写大量的if / elif?全部内容,希望文章能够帮你解决Python:如何避免在函数中编写大量的if / elif?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。