好的变量和注释不是写给计算机的,而是写给每一个看代码的人的。变量和注释是作者表达思想的依据,是读者理解代码的第一扇大门。他们对代码质量的贡献是毋庸置疑的。1.1基础知识1.1.1变量常用方法author='piglei'print('Hello,{}!'.format(author))author,reader='piglei','raymond'author,reader=reader,author变量拆包它是一种特殊的赋值操作,将可迭代对象的所有成员一次赋值给多个变量。usernames=['piglei','raymond']author,reader=usernamesattrs=[1,['piglei',100]]user_id,(username,score)=attrs动态拆包,星号表达式(*variables)作为变量名可以贪婪地捕获多个值对象并将捕获的内容作为列表分配给表达式。data=['piglei','apple','orange','banana',100]username,*fruits,score=data#相当于下面的切片语句username,*fruits,score=data[0],data[1:-1],data[-1]#解包操作可以用在循环语句中forusername,scorein[('piglei',100),('raymand',90)]:print(username)单下划线变量名_通常在赋值语句中作为无意义的占位符出现惯例:#展开时忽略第二个变量author,_=usernames#忽略第一个和最后一个变量之间的所有变量username,*_,score=dataInthePython交互式命令行,_变量的特殊含义是:默认保存最后输入的表达式的返回值。1.1.2指明变量函数文档的类型:??Sphinx格式文档defremove_invalid(items):"""消除items中的无效元素:paramitems:objecttoberemoved:typeitems:listcontainingintegers,[int,...]"""typeannotationfromtypingimportlistdefremove_invalid(items:List[int]):"""Removeinvalidelementsinitems"""list表示参数是列表类型,[int]表示里面的成员是整数。类型注解只是关于类型的注解,不提供任何验证功能。需要用mypy之类的静态类型检查工具来检查。jira库大量使用了这种注解方式。参考client.py中的如下函数:defproject(self,id:str,expand:Optional[str]=None)->Project:"""从服务器获取一个项目Resource.args:id(str):要扩展的项目的ID或密钥(可选[str]):要为项目获取的额外信息,例如projectKeys和描述。返回:Project"""returnself._find_for_resource(Project,id,expand=expand)1.1。3变量命名原则计算机科学中只有两件难事:缓存失效和命名。---PhilKarlton遵循PEP8原则。描述尽可能简短。尽量不要超过4个字。匹配类型int类型的变量名最好不要使用名词的复数形式,比如apples、trips等,因为这样的名字很容易和那些普通的容器对象混淆(List[Apple]、List[Trip])持有Apple和Trip。超短命名1.1.4注解基础知识代码中的注解接口注解Sphinx文档风格Google风格写注解3个常见错误:用注解屏蔽代码复述代码有注解解释性注解引导注解降低代码错误的认知成本受众接口注解1.2Casestories1.3编程建议1.3.1保持变量一致1.3.2变量定义要尽可能接近使用1.3.3定义临时变量,提高可读性1.3.4同一作用域不要有太多变量1.3.5如果你能定义变量,就不要定义未来。如果你不来,你就不需要为未来做准备。1.3.6不要使用locals()这个内置函数返回当前范围内的所有局部变量。显式优于隐式。Python之禅:显式优于隐式。1.3.7空行也是注释的一种1.3.8先写注释,再写代码在写出令人信服的界面注释之前,不要写任何功能代码。1.4总结
