当前位置: > 其它学习 > Python >

10年Python人的代码手记

时间:2021-11-05 15:18来源:linux.it.net.cn 作者:IT
人生苦短,早用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)
------分隔线----------------------------