作者|陈祥安来源|Python学习与开发本文主要分享Python中一些不同的技巧。虽然鲜为人知,但非常实用!下面就跟着我一起体验一下Python给你带来的乐趣吧。1.Print用颜色打印信息。我们都知道Python中的信息打印函数Print。一般我们会用它来打印一些东西作为简单的调试。但是你知道吗,这个Print打印出来的字体颜色是可以设置的。一个小例子defesc(code=0):returnf'\033[{code}m'print(esc('31;1;0')+'Error:'+esc()+'important')incontrol在桌面或Pycharm上运行这段代码后,你就会得到结果。Error:importantError下划线为红色,important为默认颜色。设置格式为:033【显示方式;前景色;背景色m可设置的参数如下:说明:前景色和背景色--------------------------------------3040黑3141红3242绿3343黄3444蓝3545紫红3646青蓝3747白显示方式含义----------------------0终端默认设置1高亮显示4使用下划线5闪烁7反相显示8不可见示例:\033[1;31;40m2。今天在Python中使用timer看到了一个比较人性化的计时模块schedule,目前star数是6432,还是很受欢迎的。这个模块也秉承了ForHumans的原则,在此推荐给大家。地址:dbader/schedule1。它可以通过pip安装。pip安装计划2。用例importscheduleimporttimedefjob():print("I'mworking...")schedule.every(10).minutes.do(job)schedule.every().hour.do(job)schedule.every().day.at("10:30").do(job)schedule.every().monday.do(job)schedule.every().wednesday.at("13:15").do(job)schedule.every().minute.at(":17").do(job)whileTrue:schedule.run_pending()time.sleep(1)从字面意思就知道这是做什么。例如:schedule.every().monday.do(job)这段代码function这个词的意思,timer会在每周一运行这个函数job,怎么会很简单呢?3.实现一个进度条fromtimeimportsleepdefprogress(percent=0,width=30):left=width*percent//100right=width-leftprint('\r[','#'*left,''*right,']',f'{percent:.0f}%',sep='',end='',flush=True)foriinrange(101):progress(i)sleep(0.1)显示效果别说谎了,赶快试试吧。上面代码中的print有几个有用的参数。sep的作用就是什么是分隔符。默认是一个空格。这里设置为空字符串,使每个字符更紧凑。end参数的作用是什么结束,默认是回车换行。这里为了实现进度条的效果,也设置为空字符串。还有最后一个参数flush,这个参数的作用主要是刷新,默认flush=False,不刷新,打印到f的内容先存入内存;而当flush=True时,会立即刷新并输出内容。4.优雅打印嵌套数据大家应该都有印象吧。在打印json字符串或者字典的时候,打印出来的一堆东西根本就没有层级关系。这里的主要问题是输出格式。importjsonmy_mapping={'a':23,'b':42,'c':0xc0ffee}print(json.dumps(my_mapping,indent=4,sort_keys=True))可以自己试试,只用print打印my_mapping,以及此打印方法的示例。如果我们打印一个字典列表,这时候肯定不能使用json的dumps方法,但是使用标准库的pprint方法来实现上面的方法importpprintmy_mapping=[{'a':23,'b':42,'c':0xc0ffee},{'a':231,'b':42,'c':0xc0ffee}]pprint.pprint(my_mapping,width=4)5.类withsimplefunctionsusenamedtupleanddataclassDefinition有时候我们想实现类类的功能,但是没有那么复杂的方法可以操作的时候,这时候可以考虑下面两种方法。第一个,namedtuple,也叫命名元组,是有名字的元组。作为Python标准库集合中的一个模块,它可以实现类似于一个类的功能。fromcollectionsimportnamedtuple#以前简单的类可以使用namedtuple来实现。Car=namedtuple('Car','colormileage')my_car=Car('red',3812.4)print(my_car.color)print(my_car)但是所有的属性都需要提前定义好才能使用。例如,如果您想使用my_car。名称,您必须将代码更改为以下内容。fromcollectionsimportnamedtuple#以前简单的类可以使用namedtuple来实现。Car=namedtuple('Car','colormileagename')my_car=Car('red',3812.4,"Auto")print(my_car.color)print(my_car.name)使用namedtuple的缺点很明显。所以现在更好的解决方案是在Python3.7中将dataclass添加到标准库中。其实3.6也可以用,只是需要作为第三方库使用,用pip安装即可。示例用法如下:fromdataclassesimportdataclass@dataclassclassCar:color:strmileage:floatmy_car=Car('red',3812.4)print(my_car.color)print(my_car)6.f-string's!r,!a,!sf-string出现在Python3.6,作为目前最好的字符串拼接形式,参见f-string的结构f'
