精彩的!编写优雅Python代码的七个重要技巧区分顶级程序员和普通程序员的终极指标。作为一名Pythoner,有哪些技能可以让我们写出优雅的Python代码?今天Python酱就给大家介绍七大可以快速提升代码质量的重要技巧。0x00规范命名没有程序员会抗拒一段规范命名的代码!命名作为编程界的一大难题,难倒了很多人。不知道你们还记得你们曾经沙雕的名字吗。a,b,cx,y,za1,a24_s,4s...defdo_something():deffun():...相信看到上面的命名你会一头雾水,好的命名不一定是写得多么优雅,至少你必须知道这个名字。统一的命名风格可以让代码看起来更简洁,风格也更统一,让读者一眼就知道这个变量或函数是干什么用的,不会把过多的精力浪费在不必要的事情上长时间猜测。0x01Object-orientedPython是一门面向对象的语言,所以我们有必要熟悉一些面向对象的设计原则。单一职责原则就是一个函数只做一件事,不要把多个函数集中在同一个函数中,不要大而全,要小而精。这样,当需求发生变化时,我们只需要修改相应的部分,程序响应变化的能力就明显提高了。开闭原则就是对扩展开放,对修改关闭。写程序的都知道甲方善变。如果今天这样执行,明天可能会改变主意。这是很正常的。因此,我们在编写程序的时候一定要注意程序的可扩展性。当甲方更改需求时,我们尽量少改或者不改原来的代码,而是通过增加新的实现类来扩展功能,也就是说你系统原有的功能不会被破坏,并且稳定性会大大提高。接口隔离原则是指调用者不要依赖不需要的接口,接口之间的依赖关系应建立在最小功能接口的原则上。单一职责和接口隔离都是为了提高类的内聚性,降低类之间的耦合度。这是面向对象封装思想的完美体现。0x02用with写代码的时候,难免会遇到操作文件的需求。一般都是用open()函数打开一个文件,操作完成后最后通过close()函数关闭文件,但是有时候写多了也难免。我觉得很麻烦,我不能在完成操作后自动关闭文件,是的。使用with操作文件不需要考虑关闭问题,我们只需要关心核心业务逻辑即可。withopen('tmp.txt','w')asf:f.write('xxx')...0x03当我们用get获取字典中不存在的key时,如果是方括号如果要获取,程序会返回KeyError。这时建议通过get()函数获取。同时,通过get()函数获取值时,也可以设置默认值default_value。当key不存在时,返回default_value。0x04Returnearlyifelse之类的控制语句在我平时写的代码中是少不了的,但是有时候有些朋友喜欢嵌套ifelse多层,几个月下来,我当时写的东西都看不懂了。比如下面这个程序,根据考试成绩来做评分。score=100IFSCORE>=60:#andgridifscore>=70:#mediumifscore>=80:#sss>>=90:#优秀ss>=100:#fullscore(“满分”)ELSE:print("excellent")else:print("good")else:print("medium")else:print("pass")else:print("fail")print("endofprogram")这段代码看起来很想打人,可读性极差。代码的逻辑是判断分数是否在一个范围内,然后给出匹配的评分。如果是,可以改写如下:defget_score_level(score):ifscore>=100:#Fullscoreprint("Fullscore")returnifscore>=90:#ii("excellent")returnifscore>=80:#ii("good")Returnifscore>=70:#mediumPrint("medium"ifscore>=60:#passprint("pass")returnreturnprint("fail")print("endofprogram")这种处理方式极其优雅,从上到下一目了然,大大增加了代码的可读性和可读性。0x05Generator0x05Generator我们都知道可以直接通过列表生成来创建一个新的列表,但是受限于内存机器的,list的容量肯定是有限制的,如果list里面的数据是按照一定的规律推导计算的,那么在迭代过程中是不是可以不断的计算后面的元素,这样就不需要创建整个一次列出来,按需使用,这时候,generate设备就派上用场了,0x06Decorator想象一下下面的场景。当后端收到用户请求时,需要对用户进行身份验证。您不能复制验证码;而我们的项目都需要记录日志。这两种情况最适合使用装饰器。事实上,Flask框架使用了大量的装饰器来进行认证操作。一切都是对象!在Python中我们可以在函数中定义函数,从函数返回函数,将函数作为参数传递给其他函数。defhi(name="yasoob"):print("nowyouareinsidethehi()function")defgreet():return"nowyouareinthegreet()function"defwelcome():return"nowyou在welcome()函数中"print(greet())print(welcome())print("现在你回到了hi()函数中")hi()#output#现在你在hi()函数中了#现在你在greet()函数中#现在你在welcome()函数中#现在你回到hi()函数中在上面的代码中,我们定义了两个新函数,无论何时调用hi()函数在里面它会被调用。defhi(name="yasoob"):defgreet():return"nowyouareinthegreet()function"defwelcome():return"nowyouareinthewelcome()function"obyaifname=="":returngreetelse:returnreturnwelcomea=hi()print(a)print(a())#output#
