人生苦短,早用Python!直接开始: 15个点 1. 变量 2. 条件分支 3. 字符串拼接 4. 容器 5. 函数 1. 变量 匈牙利命名法,命名方法由 JOEL SPOLSKY 在 2015 的一篇文章中提出:就是把变量的『类型』缩写,放到变量名的最前面! 举个列子说明一下:比如自定义一个person类,一般会使用students、teachers来指代一个person的list,但是这样写总觉得缺少了什么,那么就可以使用 pl_students 或pl_teachers ,前面的pl指代person的list,是不是感觉更好了! 2. 条件分支 德摩根定律,相信一定都听过,就是: not A or not B 等价于 not (A and B)! 举个列子:判断用户吐过不是使用嘿嘿浏览器或者没有登录,那么就不能访问该黑客网站! 一般会这样写: if not user.has_logged_in or not user.is_from_heihei: return "our service is only available for heihei logged in user" 但是这样会不会好点: if not (user.has_logged_in and user.is_from_heihei): return "our service is only available for heihei logged in user" 3. 字符串拼接 你一定听说过:“Python 里的字符串是不可变的,所以每一次对字符串进行拼接都会生成一个新对象,导致新的内存分配,效率非常低”,导致你不敢使用+或+=来拼接字符串,相信在Java里也听过这个说法。但要记住:语言的更新非常快,不要被别人的经验所左右,+= 的方式来拼接字符串,效率已经和 “”.join(str_list)差不多了!并且Java中常量字符串的拼接(String s=“a”+“b”)并不会产生新的对象! 4. 容器 了解容器类型的底层实现,可以帮助你写出性能更好的代码,换句话说:提炼需求里的抽象概念,面向接口而非实现编程!emm…… 举个例子:有一个列表,里面装着很多用户评论,为了在页面正常展示,需要将所有超过一定长度的评论用省略号替代:这里面使用了强依赖List[str] def add_ellipsis(comments: typing.List[str], max_length: int = 12): index = 0 for comment in comments: comment = comment.strip() if len(comment) > max_length: comments[index] = comment[:max_length] + '...' index += 1 return comments comments = [ "Implementation note", "Changed", "ABC for generator", ] print("\n".join(add_ellipsis(comments))) 此时不是一个列表了,是一个tuple或者一个set,那么不是意味着方法需要重新写吗,或者这样:add_ellipsis(list(comments)) 改一下,不是太好吧,那么这样呢:让函数依赖“可迭代对象”这个抽象概念,而不是一个list类型 def add_ellipsis_gen(comments: typing.Iterable[str], max_length: int = 12): for comment in comments: comment = comment.strip() if len(comment) > max_length: yield comment[:max_length] + '...' else: yield comment print("\n".join(add_ellipsis_gen(comments))) 5. 函数 不要局限于return,某些情况下使用yield 返回生成器对象,raise 抛出异常对象,要来的更加的好用! (责任编辑:IT) |