我希望这个问题适合stackoverflow.如果没有,我会马上删除这个问题.
我刚刚编写了我的第一个python程序.我们的想法是你可以发出一个命令,并将它并行发送到几个服务器.
这仅用于个人教育目的.该计划有效!我真的想在python上变得更好,因此我想问下列问题:
我有一个很好的编程背景,但是我花了很长时间才开发出适合PHP的样式(PEAR编码标准,知道使用什么工具以及何时使用).
来源(一个文件,92行代码)
Ism*_*ael 10
通常最好在句子结尾之后的内容:是在一个单独的行中(也不要在它之前添加空格)
if options.verbose:
print ""
Run Code Online (Sandbox Code Playgroud)
代替
if options.verbose : print ""
Run Code Online (Sandbox Code Playgroud)
如果要迭代它,则无需检查列表的len
if len(threadlist) > 0 :
for server in threadlist :
...
Run Code Online (Sandbox Code Playgroud)
是多余的,更"可读"(python足够聪明,不能遍历空列表):
for server in threadlist:
...
Run Code Online (Sandbox Code Playgroud)
另外一个更"'pythonistic'是使用列表的理解(但肯定是一个有争议的意见)
server = []
for i in grouplist : servers+=getServers(i)
Run Code Online (Sandbox Code Playgroud)
可以缩短为
server = [getServers(i) for i in grouplist]
Run Code Online (Sandbox Code Playgroud)
小智 7
在卸载任何批评之前,首先让我祝贺你的第一个Python程序正常运行.从一种语言转移到另一种语言可能是一件苦差事,不断摸索语法问题并通过不熟悉的库进行搜索.
引用最多的风格指南是PEP-8,但这只是一个指南,至少有一部分被忽略......不,我的意思是认为不适用于某些特定情况,并对指南作者和贡献者给予应有的尊重: - ).
我无法将它与PHP进行比较,但与其他Python应用程序相比,很明显您遵循其他语言的样式约定.我并不总是同意其他开发人员说你必须做的很多事情,但随着时间的推移,我认识到为什么使用约定有助于传达应用程序正在做的事情,并将帮助其他开发人员帮助你.
raise 'Server or group ' + sectionname + ' not found in ' + configfile
变
raise RuntimeError('Server or group ' + sectionname + ' not found in ' + configfile)
i和jfor循环索引变量(比如我们熟练的FORTRAN前辈):
for i in grouplist : servers+=getServers(i)
变为:
for section in grouplist:
servers += getServers(section)
while len(threadlist) > 0 :
变
while threadlist:
和
if command.strip() == "" :
变
if command.strip():
(options,args) = parser.parse_args()
if options.verbose : print "floep 0.1"
command = " ".join(args)
if command.strip() == "" : parser.error('no command given')
变
options, args = parser.parse_args()
if options.verbose:
print "floep 0.1"
if not args:
parser.error('no command given')
command = " ".join(args)
for server in threadlist :
foundOne = False
if not server.isAlive() :
...snip...
foundOne = True
if not foundOne :
time.sleep(0.010)
变
for server in threadlist:
if not server.isAlive():
...snip...
break
else:
time.sleep(0.010)
result = proc.readlines()
strresult = ''
for line in result : strresult+=line
self.result = strresult
变
self.result = proc.read()
你的数据类型没问题.
你会得到很多其他的东西:-)
在Python中不推荐使用字符串异常,因此这一行:
if not config.has_section(sectionname):
raise 'Server or group ' + sectionname + ' not found in ' + configfile
Run Code Online (Sandbox Code Playgroud)
应该重做这样的事情:
if not config.has_section(sectionname):
raise ConfigNotFoundError(
"Server or group" + sectionname + "not found in" + configfile)
class ConfigNotFoundError(Exception):
pass
Run Code Online (Sandbox Code Playgroud)
[编辑在评论中反映了dangph的建议]
这是更多的代码行,但它对未来的升级更好.
为了便于阅读,可以这样:
parser.add_option('-q','--quiet',action="store_false", help="Display only server output", dest="verbose", default=True)
Run Code Online (Sandbox Code Playgroud)
可以像这样重写:
parser.add_option('-q',
'--quiet',
action="store_false",
help="Display only server output",
dest="verbose",
default=True)
Run Code Online (Sandbox Code Playgroud)
您可能更喜欢另一种分割方法调用的方法,但其想法是长行很难读取.
您还应该阅读PEP 8以了解Python风格.
| 归档时间: |
|
| 查看次数: |
806 次 |
| 最近记录: |