嵌套的if语句,干净的代码,并且是Python风格的,带有控制器/键盘输入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了嵌套的if语句,干净的代码,并且是Python风格的,带有控制器/键盘输入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2640字,纯文字阅读大概需要4分钟。
内容图文
![嵌套的if语句,干净的代码,并且是Python风格的,带有控制器/键盘输入](/upload/InfoBanner/zyjiaocheng/679/13a01d1ffda24de1b7bde830cc14121e.jpg)
首先是背景:我使用Python和PyGame.我已经尝试编写自己的输入/控制器模块,该模块允许用户以自己喜欢的任何方式重新映射控件.这必然要求编写我的代码以处理不同类型的输入(例如,键盘键,控制器按钮和控制器轴/帽子/等).
例如,如果将按钮“ Right”映射到箭头键,则用于处理GetPush(“ Right”)或GetRelease(“ Right”)的代码与将其映射到沿操纵杆推动的控制棒有些不同.一定的轴.为了解决这个问题,我创建了一个辅助函数__GetButtonType(),顾名思义,该函数返回其类型的按钮.对于此处显示的代码,按钮称为字符串.字符串的第一个字母表示按钮类型,其余的表示按钮.例如,k97指的是具有97值的键盘键(A键).
现在解决当前的问题.我的代码完成了我想要的工作.但是当我开始清理它时,我碰到了一个困扰我的部分.我有以下代码段可以处理键盘上的按下操作. (DoSomething()函数完全替换了不相关的代码,我认为对于手头的问题没有关系.)
for n in TheController.ControlMap:
if __GetButtonType(n)=="key":
if event.type == KEYUP:
if event.key == int(n[1:]): DoSomething()
if event.type == KEYDOWN:
if event.key == int(n[1:]): DoSomethingElse()
对我来说,这有点不对劲.可能是if event.key == int(n [1:])条件重复.这似乎很浪费.但是,如果event.key不是KEYUP或KEYDOWN,则该事件将不具有key属性(这是pyGame的工作方式,这不是我的设计.)这意味着条件为(event.type == KEYDOWN每当event.type是其他东西时,event.key == int(n [1:])都会引发错误.
但是,我考虑了一下,意识到我可以通过以下方式构造代码,从而将代码缩短一行:
for n in TheController.ControlMap:
if event.type == KEYUP:
if __GetButtonType(n)=="key" and event.key == int(n[1:]): DoSomething()
if event.type == KEYDOWN:
if __GetButtonType(n)=="key" and event.key == int(n[1:]): DoSomethingElse()
这两个代码段均有效.两者都做同样的事情.第一个看起来更容易阅读,但不是很多.第二个使用更少的行.我的问题是这样的:
哪种风格更好?一个人的表现是否比另一个人的表现快不容忽视?还是只是被认为是“不良做法”?实际上,也许两者都是.我对编程还比较陌生.
谢谢,
>克里斯
解决方法:
您的两种陈述都有一个相同的特征,这会使人们畏缩.如果语句重复两次,则等效.这是不好的,因为它会使您的代码混乱,而且绝对不必要:
if event.type in [KEYUP, KEYDOWN] and __GetButtonType(n)=="key" and event.key == int(n[1:]):
if event.type == KEYUP:
DoSomething()
elif event.type == KEYDOWN:
DoSomethingElse()
这里的第一个条件是确保您不会在event.key上收到错误.
也可以使用elif,因为这些选项是互斥的.简单的else也可以满足要求,但出于可读性的考虑,我将省略elif.您也可以将其隐藏到DoSomething(event.type)中.
根据您询问的人的不同,另一个看起来可能丑陋或漂亮的选择是将其全部折叠成扁平的if-else:
if event.type in [KEYUP, KEYDOWN] and __GetButtonType(n)=="key" and event.key == int(n[1:]):
(DoSomething if event.type == KEYUP else DoSomethingElse)()
但这有点怪异…仍然有效.
在性能方面,这里完全没有什么可担心的.优化是另一个主题,要优化的第一件事是程序设计/算法,而不是局部的低重要性命令.
内容总结
以上是互联网集市为您收集整理的嵌套的if语句,干净的代码,并且是Python风格的,带有控制器/键盘输入全部内容,希望文章能够帮你解决嵌套的if语句,干净的代码,并且是Python风格的,带有控制器/键盘输入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。