整理了几个100%提高Python代码质量的技巧,直呼过瘾
创始人
2024-03-31 07:22:56
0

在这里插入图片描述
B站|公众号:啥都会一点的研究生

相关阅读

整理了几个100%会踩的Python细节坑,提前防止脑血栓
整理了十个100%提高效率的Python编程技巧,更上一层楼
Python-列表,从基础到进阶用法大总结,进来查漏补缺
Python-元组,从基础到进阶用法大总结及与列表核心区别,进来查漏补缺
Python-字典,从基础到进阶用法大总结,进来查漏补缺
Python-集合,从基础到进阶大总结,进来查漏补缺
订阅专栏 ===> Python

哈喽我是啥都生,本期整理了几个100%提高你Python代码质量的技巧,一起来看看吧~

case 1

第一个,使用元组或字典进行解包传参,像如下这种函数定义方式在Python中是相当常见的,为比较常规的传参方式

def product(a, b):return a * bres = product(3, 4)
print(res) # 12

但其实,使用元组与字典也极为方便,尤其是字典方式,工程中由于参数较多,经常将以字典对象将键值存于py文件中

def product(a, b):return a * barg_tuple = (3, 4)
arg_dict = {'a': 3, 'b': 4}print(product(*arg_tuple))  # 12
print(product(**arg_dict)) # 12

此外,同样的适用于函数返回值的解包

def product(a, b):return a * bdef fn_iterable():return 3, 4def fn_dict():return {'a': 3, 'b': 4}print(product(*fn_iterable())) # 12
print(product(**fn_dict()))    # 12

像fn_iterable,其返回值就是元组,只是换上了敌军的衣服隐藏起来了

def fn_iterable():return 3, 4res = fn_iterable()
print(type(res))  # 

case 2

下一个,在Python中,其实布尔值也可以当做整数值使用
,可以不这么用,但看了这么多期总结,这个知识点必须让你们知道,True相当于1,False相当于0,同样适用于各类运算与索引等场景中

isinstance为True,a<=5也为True,打印结果为2,a % 2 == 0为False,列表索引为0,结果为is odd

a = 3print(isinstance(a, int) + (a <= 5))     # 2
print(["is odd", "is even"][a % 2 == 0]) # is odd

case 3

说到布尔值,你可能不知道,Python3中,在循环中直接使用True或者False是可能带来耗时问题,为方便说明问题,首先定义一个函数如下

def test_true():count = 100while True:  # here is Trueif count < 0:breakcount -= 1

我们知道,除开None、False、0、非空等都能表示True,将上述例子while True更改如下

def test_1():count = 100while 1:  # here is 1if count < 0:breakcount -= 1

接下来,借助timeit库,我们来综合对比下运行100万次两种方法耗时,在我的机器上结果如下,性能越好差异越小,为什么会这样呢?因为Python3中似乎将True或False也当成了变量,不要小看这种提升,简单改变就能带来改进,积累起来很可怕的~

from timeit import timeitdef test_true():count = 100while True:  # here is Trueif count < 0:breakcount -= 1def test_1():count = 100while 1:  # here is 1if count < 0:breakcount -= 1print(timeit(test_true, number=1000000)) # 1.9993100020219572
print(timeit(test_1, number=1000000)) # 1.9615642849821597

case 4

关于布尔耗时,这个例子也挺有意思,使用bool()方法获得真实性其实是较慢的,因为它是全局变量,需要在多个命名空间进行查找

class L:def __init__(self):self.some_val = 5def __bool__(self):return bool(self.some_val)
l = L()

那么如何改善呢,很简单,使用not可以带来性能上的提升,not not与bool()的效果是相同的

class F:def __init__(self):self.some_val = 5def __bool__(self):return not not self.some_val
f = F()

同样的,引入timeit库进行对比,在我的机器上结果如下,可以看到对比还是挺明显的

import timeitslow_setup = """
class L:def __init__(self):self.some_val = 5def __bool__(self):return bool(self.some_val)
l = L()
"""fast_setup = """
class F:def __init__(self):self.some_val = 5def __bool__(self):return not not self.some_val
f = F()
"""print(timeit.timeit('l.__bool__()', slow_setup)) # 0.12642534699989483print(timeit.timeit('f.__bool__()', fast_setup)) # 0.08172031096182764

case 5

关于布尔值,Python有两种常见的条件赋值方式都与其极其相关,第一种是标准的三元表达式

b = True
print(True if b else False) # Trueb = False
print(True if b else False) # False

第二种,我们经常也会借助or达到目的,请一定一定注意,如果第一个值是假的,则自动返回第二个值,即使该值也是假的,这里稍不注意就出错

b = None or False
print(b) # Falseb = False or None
print(b) # None

case 6

下一个,如果想print一个很长的字符串,往往使得整个程序排版难看

long_text = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"

如果你将其变成如下形式,上述问题就解决啦

long_text = ("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC")

以上就是本期的全部内容,该系列仍将继续更新,点赞关注鼓励下吧~

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...