python冷知识_Python 实用冷门知识整理

1.print 打印带有颜色的信息

大家知道 Python 中的信息打印函数 print,一般我们会使用它打印一些东西,作为一个简单调试。

但是你知道么,这个 Print 打印出来的字体颜色是可以设置的。

一个小例子

def esc(code=0):

return f'\033[{code}m'

print(esc('31;1;0') + 'Error:'+esc()+'important')

在控制台或者 Pycharm 运行这段代码之后你会得到结果。

Error:important

其中 Error 是红色加下划线的,important 为默认色

其设置格式为:\033[显示方式;前景色;背景色 m

下面可以设置的参数:

说明:

前景色 背景色 颜色

---------------------------------------

30 40 黑色

31 41 红色

32 42 绿色

33 43 黃色

34 44 蓝色

35 45 紫红色

36 46 青蓝色

37 47 白色

显示方式 意义

-------------------------

0 终端默认设置

1 高亮显示

4 使用下划线

5 闪烁

7 反白显示

8 不可见

例子:

\033[1;31;40m

2.在 Python 中使用定时器

今天看到一个比较人性化的定时模块 schedule,目前 star 数为 6432,还是非常的受欢迎,这个模块也是秉承这 For Humans 的原则,这里推荐给大家。地址 https://github.com/dbader/schedule

1.通过 pip 即可安装。

pip install schedule

2.使用案例

import schedule

import time

def job():

print("I'm working...")

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)

while True:

schedule.run_pending()

time.sleep(1)

从单词的字面意思,你就知道这是做什么的。

举个例子:

schedule.every().monday.do(job)

这句代码作用就是就是单词意思,定时器会每个周一运行函数 job,怎么样是不是很简单。

3.实现一个进度条

from time import sleep

def progress(percent=0, width=30):

left = width * percent // 100

right = width - left

print('\r[', '#' * left, ' ' * right, ']',

f' {percent:.0f}%',

sep='', end='', flush=True)

for i in range(101):

progress(i)

sleep(0.1)

展示效果

别卧槽了,赶紧快试试吧。

上面的代码中的 print 有几个有用的参数,sep 的作用是已什么为分隔符,默认是空格,这里设置为空串是为了让每个字符之间更紧凑,end 参数作用是已什么结尾,默认是回车换行符,这里为了实现进度条的效果,同样设置为空串。还有最后一个参数 flush,该参数的作用主要是刷新, 默认 flush = False,不刷新,print 到 f 中的内容先存到内存中;而当 flush = True 时它会立即把内容刷新并输出。

之前在Python 下载夏目友人帐中提到了的 tqdm 模块,更好的实现一个进度条.

4.优雅的打印嵌套类型的数据

大家应该都有印象,在打印 json 字符串或者字典的时候,打印出的一坨东西根本就没有一个层次关系,这里主要说的就是输出格式的问题。

import json

my_mapping = {'a': 23, 'b': 42, 'c': 0xc0ffee}

print(json.dumps(my_mapping, indent=4, sort_keys=True))

大家可以自己试试只用 print 打印 my_mapping,和例子的这种打印方法。

如果我们打印字典组成的列表呢,这个时候使用 json 的 dumps 方法肯定不行的,不过没关系

用标准库的 pprint 方法同样可以实现上面的方法

import pprint

my_mapping = [{'a': 23, 'b': 42, 'c': 0xc0ffee},{'a': 231, 'b': 42, 'c': 0xc0ffee}]

pprint.pprint(my_mapping,width=4)

5.功能简单的类使用 namedtuple 和 dataclass 的方式定义

有时候我们想实现一个类似类的功能,但是没有那么复杂的方法需要操作的时候,这个时候就可以考虑下下面两种方法了。

第一个,namedtuple 又称具名元组,带有名字的元组。它作为 Python 标准库 collections 里的一个模块,可以实现一个类似类的一个功能。

from collections import namedtuple

# 以前简单的类可以使用 namedtuple 实现。

Car = namedtuple('Car', 'color mileage')

my_car = Car('red', 3812.4)

print(my_car.color)

print(my_car)

但是呢,所有属性需要提前定义好才能使用,比如想使用my_car.name,你就得把代码改成下面的样子。

from collections import namedtuple

# 以前简单的类可以使用 namedtuple 实现。

Car = namedtuple('Car', 'color mileage name')

my_car = Car('red', 3812.4,"Auto")

print(my_car.color)

print(my_car.name)

使用 namedtuple 的缺点很明显了。

所以现在更优的方案,那就是 Python3.7 加入到标准库的 dataclass。

其实在 3.6 也可以使用不过需要它被作为第三方的库使用了,使用 pip 安装即可。

使用示例如下:

from dataclasses import dataclass

@dataclass

class Car:

color: str

mileage: float

my_car = Car('red', 3812.4)

print(my_car.color)

print(my_car)

6.f-string 的 !r,!a,!s

f-string出现在Python3.6,作为当前最佳的拼接字符串的形式,看下 f-string 的结构

f ' { } ... '

其中'!s' 在表达式上调用str(),'!r' 调用表达式上的repr(),'!a' 调用表达式上的ascii()

(1) 默认情况下,f-string将使用str(),但如果包含转换标志,则可以确保它们使用repr () !

class Comedian:

def __init__(self, first_name, last_name, age):

self.first_name = first_name

self.last_name = last_name

self.age = age

def __str__(self):

return f"{self.first_name} {self.last_name} is {self.age}."

def __repr__(self):

return f"{self.first_name} {self.last_name} is {self.age}. Surprise!"

调用

>>> new_comedian = Comedian("Eric", "Idle", "74")

>>> f"{new_comedian}"

'Eric Idle is 74.'

>>> f"{new_comedian}"

'Eric Idle is 74.'

>>> f"{new_comedian!r}"

'Eric Idle is 74. Surprise!'

(2) !a的例子

>>> a = 'some string'

>>> f'{a!r}'

"'some string'"

等价于

>>> f'{repr(a)}'

"'some string'"

(3) !d的例子

类似2

pycon2019有人提出的一个展望!d的功能实现:

在 Python3.8 中已经实现上述功能,不过不再使用 !d 了改为了 f"{a=}" 的形式,看过这个视频的发现没有 !d 应该很懵逼

7.f-string 里"="的应用

在 Python3.8 里有这样一个功能

a = 5

print(f"{a=}")

打印之后的结果为

a=5

是不是很方便,不用你再使用 f"a={a}"了。

8.海象运算符:=的使用

a =6

if (b:=a+1)>6:

print(b)

赋值的时候同时可以进行运算,和 Go 语言的赋值类似了。

代码的运行顺序,首先计算 a+1 得到值为 7,然后把 7 赋值给 b,到这里代码相当于下面这样了

b =7

if b>6:

print(b)

怎么样?是不是简单了不少,不过这个功能 3.8 开始才能用哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解CSS核心精髓(一)

CSS 1.css外联 正确写法&#xff1a;<link rel"stylesheet" href"css/style.css" /> <style type"text/css"> import url(xxx.css); </style> 2.w3c盒子模型与IE盒子模型 W3C 盒子模型的范围包括 margin、border、padding、co…

php中$tpl= add_member_info ;什么意思,DEDECMS会员信息在个人模板info和index的调用问题...

会员信息在个人模板info和index的调用问题&#xff0c;好长时间没解决 论坛发帖没人回答 看了一晚上代码 自己解决了。会员个人空间 index.htm 、 listarticle.htm不能像infos.htm模板一样使用<?php echo GetEnumsValue(pfirst,$row[pfirst]); ?> 语句来调用自定义联动…

【周末阅读】5G时代新型基础设施建设白皮书

来源&#xff1a;智东西【导读】当今世界&#xff0c;新一代信息技术与经济社会深度交融&#xff0c;正引领全球新一轮科技革命和产业变革&#xff0c;其速度、广度、深度前所未有。加快 5G 商用和人工智能、工业互联网、物联网等新型基础设施建设是发挥投资关键作用&#xff0…

pandas取出某一列_Pandas高级运算 | apply与applymap方法详解

大家好&#xff0c;今天我们来聊聊pandas的一些高级运算。在之前文章中&#xff0c;我们介绍了panads的一些计算方法&#xff0c;比如两个dataframe的四则运算&#xff0c;以及dataframe填充Null的方法。今天这篇文章我们来聊聊dataframe中的广播机制&#xff0c;以及apply函数…

Protobuf使用规范分享

Protobuf使用规范分享 一、Protobuf 的优点 Protobuf 有如 XML&#xff0c;不过它更小、更快、也更简单。它以高效的二进制方式存储&#xff0c;比 XML 小 3 到 10 倍&#xff0c;快 20 到 100 倍。你可以定义自己的数据结构&#xff0c;然后使用代码生成器生成的代码来读写这个…

深度|​揭秘5G+AI时代的机器人世界!七大核心技术改变人类生活!

来源&#xff1a;电子工程世界AI 和 5G 与机器人技术结合&#xff0c;正在不断催生新的消费电子品类。AI 解决机器理解世界&#xff0c;以及人机交互的问题。5G 拓展机器人的活动边界&#xff0c;并为机器人提供更大的算力和存储空间&#xff08;云协作机器人&#xff09; 。根…

卡农 matlab,matlab 编的卡农

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼% Cripple Pachebels Canon on Matlab% Have fun fs 44100; % sample ratedt 1/fs; T16 0.125; t16 [0:dt:T16];[temp k] size(t16); t4 linspace(0,4*T16,4*k);t8 linspace(0,2*T16,2*k); [temp i] size(t4);[temp j] si…

点击按钮,缩放图片(img.width、img.style.width、img.offsetWidth)

前几天在慕课网上看到一个关于图片缩放的教学视频&#xff0c;因为当时对老师使用img.width,而不是使用img.style.width而感到奇怪&#xff0c;所以周末得空了&#xff0c;想来自己试着写出来&#xff0c;相关视频网址如下&#xff1a;http://www.imooc.com/video/1111&#xf…

sql怎么继续编辑已经保存的代码_某团购CMS的GETSHELL操作代码审计

作者&#xff1a;会上树的猪合天智汇 0x00 写点废话在渗透测试中&#xff0c;获取一个webshell应该是我们不屑的追求&#xff0c;今天要通过这个CMS从代码的角度看一下可利用的getshell的方法。这一次的代码审计需要借助工具来定位可能存在的漏洞点&#xff0c;选择Seay源代码审…

测温枪的工作原理全面解析,如何测出你的温度

来源&#xff1a;世界先进制造技术论坛内容来源&#xff1a;网络测温枪&#xff0c;学名是“红外线测温仪”或者“红外线辐射测温仪”。它的原理是&#xff1a;被动吸收目标的红外辐射能量&#xff0c;从而获得物体温度数值。这次疫情&#xff0c;让这个小东西一下子&#xff0…

mysql不要放docker,Docker从入门到放弃

本文将以比较简单的的方式让大家理解docker&#xff0c;以平时常用到的测试环境为主&#xff0c;从用开始&#xff0c;慢慢理解docker。0x00 用docker进行漏洞测试0x01 docker运行busybox0x02 Docker 搭建运行apache-php环境0x03 用Dockerfile自动化构建可ssh登陆的镜像0x04 Do…

二叉树02

为了加强记忆我又写了一遍二叉树的基本代码。比上一次多了一点点功能。 1 #include<stdio.h>2 #include<iostream>3 using namespace std;4 struct Bitree{//二叉树的结构 5 int val;6 Bitree *lchild,*rchild;7 };8 void creat(Bitree * &T)//创建树 …

一个对称性解释三个宇宙学难题;引力波碰撞会发光?粘液霉菌助力寻找宇宙网 | 一周科技速览...

来源&#xff1a;返朴撰文 &#xff1a;董唯元、杨凌、顾舒晨、洪俊贤、太阁尔、姜小满目 录1. 一个对称性解释三个宇宙学难题2. 引力波碰撞会发光&#xff1f;3. 粘液霉菌助力寻找宇宙网4. 听&#xff0c;是杂质原子的声音5. 更快了&#xff01;地球的大型生态系统在崩溃6. 究…

如何用python爬虫赚早餐_如何利用python爬虫挣钱

Python爬虫是用Python编程语言实现的网络爬虫&#xff0c;主要用于网络数据的抓取和处理&#xff0c;相比于其他语言&#xff0c;Python是一门非常适合开发网络爬虫的编程语言&#xff0c;大量内置包&#xff0c;可以轻松实现网络爬虫功能。那么使用python如何赚钱呢&#xff1…

一ElasticSearch安装启动

参考官方&#xff1a;https://www.elastic.co/downloads/elasticsearch 转载于:https://www.cnblogs.com/tangyongathuse/p/6840231.html

python中表达式4+0.5值的数据类型为_python中,数字类型计算

说明&#xff1a;今天在看python数字类型的操作&#xff0c;在此记录下。操作过程&#xff1a;1.数字的加减乘除>>> 2 24>>> 4 - 22>>> 2 - 4-2>>> 2 * 24>>> 2 / 2 #除法的结果会返回小数的结果&#xff0c;如果是整除&#xf…

结构化数据不应该被人工智能忘之脑后 !

来源&#xff1a;Ihab Ilyas在处理非结构化数据的问题上&#xff0c;人工智能和深度学习方法一直都表现出众且广为人知&#xff0c;无论是在自然语言处理、知识库自动构建&#xff0c;还是图像视频的识别和生成应用中&#xff0c;都有很多成熟案例。然而对于结构化数据的研究&a…

php修改找不到数据类型,php – 在$_POST中找不到输入类型=图像值

只需使用var_dump()来查看$_POST中的内容&#xff1a;var_dump($_POST);您会看到,当您使用< input type “image”>提交表单时,您会得到&#xff1a;arraybuyuka_x > string 0 (length1)buyuka_y > string 0 (length1)所以,没有$_POST [‘buyuka’] – 相反,有&…

java数据类型转换和数组总结

流程控制 分支 循环语句     if...else...     if...else if...else switch(值0) { ------------值0是什么类型, case后面的值就要是什么类型       case 值1:         执行语句         break;       case 值1:         …

导入自定义模块syntaxerror: invalid syntax_技术分享 | Quill的模块机制

DevUI技术体验部是一支兼具设计视角和工程视角的团队&#xff0c;服务于华为云DevCloud平台和华为内部上百个中后台系统&#xff0c;主打产品 DevUI Design 服务于设计师和前端工程师。官方网站&#xff1a;devui.design。Ng组件库&#xff1a;ng-devui。DevUI Design&#xff…