[转至 CPyUG:OnMyWay] python的代码写成啥样才算好?我的一点经验(转至cpyUG)

[转至 CPyUG:OnMyWay] python的代码写成啥样才算好?我的一点经验(转至cpyUG)

有P友提出怎样才能写出比较好的Python代码呢?我有一点经验,大家讨论讨论。真理越辩越明。

1. 每个python文件至少包含一个class, 所有的逻辑算法都包含在类的函数中。
2. 函数间传递的参数最好用全局变量,就是在init中定义self.xxx. 对外输出的结果一般也保存在全局变量中。
3. 每个文件必须有一个main函数,如果是库文件则测试代码可以写在main函数中方便调试。

==example==
#!/usr/bin/python
import smtplib,sys
from email.Message import Message
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEImage import MIMEImage
import getopt

class dogmail:
       def __init__(self):
               self.subject = ""
               self.fromAdd = ""
               self.toAdd = ""
               self.CcAdd = ""
               self.mailText = ""
               self.imagePath = []
               self.exchange = "rnd-mx01.hello.com"
               self.internet = "mail.gamil.com"
               self.mailtype = 1
       def htmlMail(self):
               msgRoot = MIMEMultipart('related')
               msgRoot['Subject'] = self.subject
               msgRoot['From'] = self.fromAdd
               msgRoot['To'] = self.toAdd
               msgRoot['Cc'] = self.CcAdd
               msgRoot.preamble = 'This is a multi-part message in MIME format.'

               msgAlternative = MIMEMultipart('alternative')
               msgRoot.attach(msgAlternative)
               msgText = MIMEText('This is the alternative plain text message.')
               msgAlternative.attach(msgText)

               msgText = MIMEText(self.mailText, _subtype='html',_charset='gb2312')
               msgAlternative.attach(msgText)

               if len(self.imagePath) != 0:
                       for x in self.imagePath:
              fp = open(x, 'rb')
                               msgImage = MIMEImage(fp.read())
                               fp.close()
                               imageId = "<image%s>" % str(self.imagePath.index(x)+1)
                               msgImage.add_header('Content-ID', imageId)
                               msgRoot.attach(msgImage)
               return msgRoot.as_string()

       def plainMail(self):
               msgRoot = Message()
               msgRoot['Subject'] = self.subject
               msgRoot['From'] = self.fromAdd
               msgRoot['To'] = self.toAdd
               msgRoot['Cc'] = self.CcAdd
               msgText = MIMEText(self.mailText, _subtype='plain', _charset='gb2312')
               return msgRoot.as_string()[:-1]+msgText.as_string()

       def send(self,msg = ""):
               #body=MIMEText(body, _subtype='plain', _charset='gb2312')
               server = 0
               if self.mailtype == 1:
                       server = smtplib.SMTP(self.exchange)
               else:
                       server = smtplib.SMTP(sefl.internet)
                       print "hello"
               #server.set_debuglevel(1)
               server.sendmail(self.fromAdd, self.toAdd, msg)
               server.quit()
       def usage(self):
               print 'toAdd = aa,bb,cc'

def main():
       aa = dogmail()
       aa.subject = "just a test mail"
       aa.fromAdd = "dog@dogmail.com"
       aa.toAdd = "onmyway.q@google.com"
       aa.mailText = 'Hello, I am there'
       aa.imagePath = ["aa.jpg","bb.jpg"]
       aa.send(aa.plainMail())

if __name__ == "__main__":
  main()



我觉得这个帖子很有实际意义 一直自己写的东西太随意了 怎么快怎么写  一味追求快速 怎么方便这么写 写出的代码有些混乱 不知道大家有没有这样的问题 转过来一起看看 学习一下 也可以讨论一下更好的代码风格

没怎么用类,总是感觉类比较难,都是直接import 进来模块,然后再按照c的方式进行开发。
惭愧。。。


QUOTE:
原帖由 blamos 于 2009-1-14 11:25 发表
没怎么用类,总是感觉类比较难,都是直接import 进来模块,然后再按照c的方式进行开发。
惭愧。。。

用类确实比较麻烦 写起来也一大堆 现在大部分的都是这样的 不过 我在慢慢改变 能写进类尽量写进去 感觉好处还是有 只是还不明显
把__main__那段换成public static void main(String[] args)套进class里就成java了....关键java和python是不同的语言,设计模式的借鉴意义是有的,但照搬模式就整个一OO过度症患者了


QUOTE:
原帖由 3227049 于 2009-1-14 11:41 发表
把__main__那段换成public static void main(String[] args)套进class里就成java了....关键java和python是不同的语言,设计模式的借鉴意义是有的,但照搬模式就整个一OO过度症患者了

以前学过JAVA 所以觉得自己确实有些OO患者 但也确实觉得OO是一个趋势 只是让自己跟着趋势走 有那样的思维
顺便。。转至和转自是相反的意思。。。。
唉,我的意见已经在邮件列表说了,就不帖了。
我也是c风格。

python如果有c语言中的for(;这样的语句就好了。


QUOTE:
原帖由 guotie 于 2009-1-14 15:29 发表
我也是c风格。

python如果有c语言中的for(;这样的语句就好了。

其实习惯py中的for还是蛮爽的。


QUOTE:
原帖由 xiaoyu9805119 于 2009-1-14 15:34 发表


其实习惯py中的for还是蛮爽的。

但是有时候代码长了 循环多了(比如内嵌的三四层循环) 整理起来就不是那么清晰了 特别是格式问题