这篇文章主要和大家分享一些 Python 不一样的技巧,感受 Python 带给你的乐趣吧。
大家知道 Python 中的信息打印函数 Print,一般我们会使用它打印一些东西,作为一个简单调试。
def esc(code=0):
return f'[{code}m'
print(esc('31;1;0') + 'Error:'+esc()+'important')
在控制台或者 Pycharm 运行这段代码之后你会得到结果。
Error:important
其中 Error 是红色加下划线的,important 为默认色
下面可以设置的参数:
说明:
前景色 背景色 颜色
---------------------------------------
30 40 黑色
31 41 红色
32 42 绿色
33 43 黃色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
显示方式 意义
-------------------------
0 终端默认设置
1 高亮显示
4 使用下划线
5 闪烁
7 反白显示
8 不可见
例子:
[1;31;40m <!--1-高亮显示 31-前景色红色 40-背景色黑色-->
今天看到一个比较人性化的定时模块 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)
from time import sleep
def progress(percent=0, width=30):
left = width * percent // 100
right = width - left
print('
[', '#' * 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 模块,更好的实现一个进度条.
大家应该都有印象,在打印 json 字符串或者字典的时候,打印出的一坨东西根本就没有一个层次关系,这里主要说的就是输出格式的问题。
import json
my_mapping = {'a': 23, 'b': 42, 'c': 0xc0ffee}
print(json.dumps(my_mapping, indent=4, sort_keys=True))
大家可以自己试试只用 print 打印 my_mapping,和例子的这种打印方法。
import pprint
my_mapping = [{'a': 23, 'b': 42, 'c': 0xc0ffee},{'a': 231, 'b': 42, 'c': 0xc0ffee}]
pprint.pprint(my_mapping,width=4)
有时候我们想实现一个类似类的功能,但是没有那么复杂的方法需要操作的时候,这个时候就可以考虑下下面两种方法了。
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。
from dataclasses import dataclass
@dataclass
class Car:
color: str
mileage: float
my_car = Car('red', 3812.4)
print(my_car.color)
print(my_car)
f-string出现在Python3.6,作为当前最佳的拼接字符串的形式,看下 f-string 的结构
f ' <text> { <expression> <optional !s, !r, or !a> <optional : format specifier> } <text> ... '
其中'!s' 在表达式上调用str(),'!r' 调用表达式上的repr(),'!a' 调用表达式上的ascii()
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 里有这样一个功能
a = 5
print(f"{a=}")
打印之后的结果为
a=5
是不是很方便,不用你再使用f"a={a}"了。
a =6
if (b:=a+1)>6:
print(b)
赋值的时候同时可以进行运算,和 Go 语言的赋值类似了。
b =7
if b>6:
print(b)
怎么样是不是简单了不少,不过这个功能 3.8 开始才能用哦。
FP-growth算法是一种用于发现数据集中频繁模式的有效方法。可以使用FP-growth算法在多种文本档中查找频繁单词。FP-growth算法能够更加高效地发现频繁项集,但不能用于发现关联规则。 FP-growth算法的一般流程 (1)收集数据:使用任意方法。 (2)准备数据:需要离散的数据 (3)分析数据: 使用任意的方法 (4)
习题 5.1为什么对调度程序而言,区分CPU约束程序和I/O约束程序很重要? 答:CPU的成功调度依赖于进程的如下属性:进程执行由CPU执行和I/O等待周期组成,进程在这两个状态之间切换。进程执行从CPU区间开始,在这之后是I/O区间,接着是另一个CPU区间,如此进行下去;最终,最后的CPU区间通过系统请求终止执行。这些CPU区间的长度呈现出指数或超指数形式的频率曲线,具有大量_考虑下面的动态改变优先级
来源:专知就在2月份,Transformer还横扫CV和NLP各种task。但到了5月份,似乎一切变了。近来,谷歌、清华、Facebook相继发表了关于多层感知机(MLP)的工作,MLP→..._zhang等人(2021)提出了一种融合深度强化学习和多目标粒子群算法的mcv路径规划方法
关注“GitHubDaily”设为 “星标”,每天带你逛 GitHub!本文转自新智元,作者大明、闻菲去年,在 GitHub 上有位 id 为 imhuay 的热心人带..._github 计算机面试笔记
今天使用VS2013+Opencv2.4.11时,编译能通过,运行出现应用程序无法正常启动0xc000007b的错误解决方案:dll的问题又尝试了VS安装修复,结果依然没用。最后发现是环境变量的问题,没有添加E:\opencv2.4.11\build\x86\vc12\lib到环境变量中,以致于VS +win32模式用不了,添加完之后就好啦 如果1还是不能解决问题,还要把下图以下.d...
Unity解决:Deterministic compilation failed. You can disable Deterministic builds in Player Settings_deterministic compilation failed. you can disable deterministic builds in pl
下载网址:https://dev.mysql.com/downloads/点击这里,开始下载安装配置解压安装包我这里解压到的d盘打开D:\mysql-8.0.27-winx64编写MySQL配置文件在解压目录下新建my.ini文件 [mysqld]# 设置3306端口port=3306# 设置mysql的安装目录 ----------是你的文件路径-------------basedir=D:\mysql-8.0.26-winx64\my..._mysql8.9.27安装
转载处:https://blog.csdn.net/kaida1234/article/details/79557348原来对QThread的理解,就是重写run(),曾经还一度搞不明白,到底它的槽属于主线程还是子线程。后来学了MFC,一度觉得MFC的机制比较人性化,起码有工作线程和界面线程的用法,而不像QThread只有run是真正活在子线程里面的。而直到今天再次研究QThread,发现...
如何获取 Oracle 11g RAC asm spfile 的位置首页 → 数据库技术背景:阅读新闻如何获取 Oracle 11g RAC asm spfile 的位置[日期:2014-07-22]来源:Linux社区作者:lixora[字体:]如何获取 Oracle 11g RAC asm spfile 的位置方法一:[root@vmrac1 ~]# su - grid[grid@vmrac1...
ADAMS启动问题 ,打开aview卡在出现开始界面一直不动,以及ADAMS和ABAQUS的共用证书问题,一篇文章全部解决。(持续更新)_abaqus 证书
1.带一个参数的方法 1 package cn.happy3; 2 3 public class MyMain { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 //1.购买一台榨汁机...
扫描指定的包中的类上的注解,常用的注解有:@Controller 声明Action组件@Service 声明Service组件 @Service("myMovieLister") @Repository 声明Dao组件@Component 泛指组件, 当不好归类时. @RequestMapping("/menu") 请求映射@Resource 用于注