当前位置: 首页 > 后端技术 > Python

妙不可言!写出优雅的 Python 代码的七条重要技巧

时间:2023-03-26 12:14:20 Python

精彩的!编写优雅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#.greetat0x7fe3e547a0e0>#现在你在这个greet()函数中在示例中,a=hi()返回greet函数,因为默认参数名称=yasoob。a还指向hi()函数内的greet()函数。defhi():返回“嗨,yasoob!”defdoSomethingBeforeHi(func):print("我在执行hi()之前做了一些无聊的工作")print(func())doSomethingBeforeHi(hi)#output#我在执行hi()之前做了一些无聊的工作#嗨yasoob!在最后一个例子中,我们将hi()函数传递给另一个函数,它们愉快地执行了。现在,让我们看看Python中的装饰器。defnew_decorator(a_func):defwrapTheFunction():打印(“在执行a_func()之前我正在做一些无聊的工作”)a_func()打印(“在执行_defa_func()之后我正在做一些无聊的工作”)返回):打印(“我是需要一些装饰来去除我的臭味的函数”)a_new_function_requiring_decoration=a_new_decorator(a_function_requiring_decoration)a_new_function_requiring_decoration()#output#在执行需要的函数之前我正在做一些无聊的工作#a_func()somedecorationtoremovemyfoulsmell#我在执行a_func()后在做一些无聊的工作你明白吗,它是我们上面介绍的基本操作的组合。事实上,这就是python中的装饰器所做的,以这种方式修改函数的行为。但是每次都这样写太麻烦了,所以python为我们提供了一个方便的操作@。defnew_decorator(a_func):...@a_new_decoratordefa_function_requiring_decoration():print(“我是函数,需要一些装饰来去除我的臭味”)a_function_requiring_decoration()#输出#在执行a_func()之前我正在做一些无聊的工作#我是函数,需要一些装饰来去除我的臭味#我在执行a_func()后做了一些无聊的工作总结今天,我介绍了几个提高代码质量的重要技巧。技巧可以在评论区交流~以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发“J”还能收到海量学习资料,涵盖Python电子书、教程、数据库编程、Django、爬虫、云计算等。或者去编程学习网了解更多编程技术知识。