进度条在现今生活当中随处可见,前两天王者赛季更新,那进度条有网的时候杠杠的,一直往前冲。是不是很好奇,这进度条怎么来的呢???

在说正文之前先看看一个很nice的进度条:

接下来教你用python无障碍实现进度条的生成。

目录

不用库,直接打印

python如何通过pyqt5实现进度条

基本进度条使用

进度条实现

python tqdm实现进度条

tqdm安装使用

tqdm相关操作

1、迭代对象处理

2、观察处理的数据

3、pandas中使用tqdm

4、多进程进度条

5、自定义进度条显示信息

其他相关操作

Python Multiprocessing多进程 使用tqdm显示进度条的实现

python progressbar实现进度条

python alive-progress库实现进度条

python PySimpleGUI库实现进度条

wxPython实现带颜色的进度条

总结

一、普通进度条

二、带时间的进度条

三、TPDM 进度条

四、progress 进度条

五、alive_progress 进度条

六、可视化进度条

资源传送门

「❤️ 感谢大家」


不用库,直接打印

代码1:

import time
#demo1
def process_bar(percent, start_str='', end_str='', total_length=0):bar = ''.join(["\033[31m%s\033[0m"%' '] * int(percent * total_length)) + ''bar = '\r' + start_str + bar.ljust(total_length) + ' {:0>4.1f}%|'.format(percent*100) + end_strprint(bar, end='', flush=True)
for i in range(101):time.sleep(0.1)end_str = '100%'process_bar(i/100, start_str='', end_str=end_str, total_length=15)
#demo2
# for i in range(0, 101, 2):
# time.sleep(0.1)
# num = i // 2
# if i == 100:
#  process = "\r[%3s%%]: |%-50s|\n" % (i, '|' * num)
# else:
#  process = "\r[%3s%%]: |%-50s|" % (i, '|' * num)
# print(process, end='', flush=True)

效果1:

代码2:

import sys, time
print("正在下载......")
for i in range(11):if i != 10:sys.stdout.write("==")else:sys.stdout.write("== " + str(i*10)+"%/100%")sys.stdout.flush()time.sleep(0.2)
print("\n" + "下载完成")

sys.stdout.write()方法跟print()方法的区别是 前者打印不换行,后者换行。
sys.stdout.flush()方法是立即刷新输出的内容

效果2:

python如何通过pyqt5实现进度条

基本进度条使用

进度条的函数如下:

self.pbar = QProgressBar(self) # 进度条的定义
self.pbar.setGeometry(30, 60, 100, 30) # 进度条的大小和位置,前两个是位置,后两个是大小

进度条默认一般是长度为100,步长度一般使用一个变量来控制,这个变量要初始化为零,需要清空的时候要记得清零:

self.step = 0

当步长设置的的时候,一定要设置到进度条的属性里面,不然的话意义不大,如下所示:

self.step = self.step+1
self.pbar.setValue(self.step)

进度条实现

#!/usr/bin/python3
# -*- coding: utf-8 -*-"""
PyQt5 教程
这个例子显示了一个进度条控件。"""
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QPushButton
from PyQt5.QtCore import QBasicTimerclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.pbar = QProgressBar(self)self.pbar.setGeometry(30, 40, 200, 25)self.btn = QPushButton('开始', self)self.btn.move(40, 80)self.btn.clicked.connect(self.doAction)self.timer = QBasicTimer()self.step = 0self.setGeometry(300, 300, 280, 170)self.setWindowTitle('进度条')self.show()def timerEvent(self, e):if self.step >= 100:self.step = 0self.pbar.setValue(self.step)self.timer.stop()self.btn.setText('完成')returnself.step = self.step+1self.pbar.setValue(self.step)def doAction(self, value):print("do action")if self.timer.isActive():self.timer.stop()self.btn.setText('开始')else:self.timer.start(100, self)self.btn.setText('停止')if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())

运行结果:

python tqdm实现进度条

tqdm安装使用

有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况。这对于第三方库非常丰富的Python来说,想要实现这一功能并不是什么难事。
tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持循环处理多进程递归处理、还可以结合linux的命令来查看处理情况,等进度展示。

我们先来看一下进度条的效果。

from tqdm import tqdm
for i in tqdm(range(int(9e6))):pass

可以看到,当我们的代码的运行需要较长时间时,进度条可以很好的帮助我们了解整个代码的运行进度。

1、安装

tqdm的安装十分简单,只需要通过pip或conda就可以安装。

2、pip安装

pip install tqdm

3、conda安装

conda install -c conda-forge tqdm

tqdm相关操作

1、迭代对象处理

对于可以迭代的对象都可以使用下面这种方式,来实现可视化进度,非常方便。

from tqdm import tqdm
import time
for i in tqdm(range(100)):time.sleep(0.1)pass

100%|████████████████████████████████████████████████████████████████████████████████| 100/100 [00:10<00:00, 9.88it/s]

2、观察处理的数据

通过tqdm提供的set_description方法可以实时查看每次处理的数据。

from tqdm import tqdm
import timepbar = tqdm(["A","B","C","D","E","F"])
for c in pbar:time.sleep(1)pbar.set_description("Processing %s"%c)

3、pandas中使用tqdm

pandas中对大量数据进行相关操作或者遍历表格的行列时,我们可以使用tqdm来了解代码运行情况。

import pandas as pd
df = pd.DataFrame({'Month':[1,2,3,4,5,2,3,4,5,1,2,3,4],'Name':['张三','张三','张三','张三','张三','李四','李四','李四','李四','王五','王五','王五','王五'],'Sex':['男','男','女','女','女','男','男','男','男','女','女','女','女']})
for i in tqdm(['Month','Name','Sex']):pass

100%|██████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4707.41it/s]

4、多进程进度条

在使用多进程或者嵌套循环处理任务的时候,我们通过tqdm可以实时查看每一个进程任务的处理情况

from tqdm import tqdm
import time
for i in tqdm(range(5), ascii=True,desc="1st process"):for j in tqdm(range(5), ascii=True,desc="2nd process"):time.sleep(0.01)
1st process:  0%|                                        | 0/5 [00:00<?, ?it/s]
2nd process:  0%|                                        | 0/5 [00:00<?, ?it/s]
2nd process: 100%|#######################################################################| 5/5 [00:00<00:00, 94.27it/s]
2nd process:  0%|                                        | 0/5 [00:00<?, ?it/s]
1st process: 40%|############################4                     | 2/5 [00:00<00:00, 18.09it/s]
2nd process:  0%|                                        | 0/5 [00:00<?, ?it/s]
2nd process: 100%|#######################################################################| 5/5 [00:00<00:00, 93.95it/s]
2nd process:  0%|                                        | 0/5 [00:00<?, ?it/s]
1st process: 80%|########################################################8       | 4/5 [00:00<00:00, 17.99it/s]
2nd process:  0%|                                        | 0/5 [00:00<?, ?it/s]
1st process: 100%|#######################################################################| 5/5 [00:00<00:00, 17.86it/s]

5、自定义进度条显示信息

通过update方法可以控制每次进度条更新的进度。

from tqdm import tqdm
import time
#total参数设置进度条的总长度为100
with tqdm(total=100) as pbar:for i in range(100):time.sleep(0.05)#每次更新进度条的长度为1pbar.update(1)

除了上述方法之外,我们还能通过另外一种方法来实现操作。

from tqdm import tqdm
import time
#total参数设置进度条的总长度为100
pbar = tqdm(total=100)
for i in range(100):time.sleep(0.05)#每次更新进度条的长度为1pbar.update(1)
#关闭占用的资源
pbar.close()

另外,我们还能通过set_descriptionset_postfix方法设置进度条显示信息。

from tqdm import trange
from random import random,randint
import timewith trange(100) as t:for i in t:#设置进度条左边显示的信息#注意:代码中的HVAE是可以手动换成其他内容的t.set_description("GEN %i"%i)#设置进度条右边显示的信息  #注意:此处代码中的gen lr lst是可以手动换成其他内容的t.set_postfix(loss=random(),gen=randint(1,999),lr="h",lst=[1,2])time.sleep(0.1)
GEN 99: 100%|███████████████████████████████| 100/100 [00:10<00:00, 9.77it/s, gen=190, loss=0.00811, lr=h, lst=[1, 2]]

令人震惊的是,当我们将进度条显示的信息设置中文时,竟然不会出现乱码!!!!

from tqdm import trange
from random import random,randint
import timewith trange(100) as t:for i in t:#设置进度条左边显示的信息t.set_description("进度 %i"%i)#设置进度条右边显示的信息  t.set_postfix(loss=random(),随机=randint(1,999),名字="h",列表=[1,2])time.sleep(0.1)
进度 99: 100%|████████████████████████████████████| 100/100 [00:10<00:00, 9.75it/s, loss=0.975, 列表=[1, 2], 名字=h, 随机=469]

其他相关操作

​ Last but not least!!最后的内容是十分重要的!!

1、我们在使用tqdm的时候,可以将tqdm(range(n))替换为trange(n),让你的代码看起来更加简洁而又高大上!

from tqdm import tqdm,trange
import time
for i in trange(100):time.sleep(0.1)pass
100%|████████████████████████████████████████████████████████████████████████████████| 100/100 [00:10<00:00, 9.90it/s]

2、当我们在jupyter notebook中使用进度条时,我们会发现整个进度条十分的难看,而在可能会出现多条进度条的情况,这样会让我们的代码显得十分的难看,这显然不是我们想要得到的结果。

我们先来感受一下,这种丑丑的运行结果。

from tqdm import tqdm
for i in tqdm(range(int(200))):print('tqdm',end=' ')
 0%|                                             | 0/200 [00:00<?, ?it/s]
tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm
68%|█████████████████████████████████████████████████████▍            | 137/200 [00:00<00:00, 1360.43it/s]tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm 100%|██████████████████████████████████████████████████████████████████████████████| 200/200 [00:00<00:00, 1337.14it/s]

可以看到,上面的代码我们仅仅打印了两百次,整个运行结果就有多个进度条,整体的视觉效果特别差。如果当我们需要进行成千上万次迭代时,整个运行结果将会不堪入目,比我们未使用进度条时的结果更加难看,显然这不是我们想看到的。

tqdm 针对jupyter notebook添加了专门的进度条美化方法,使用tqdm_notebook()方法,我们看看效果:

from tqdm import tqdm_notebook
import time
for i in tqdm_notebook(range(100),desc='demo:'):time.sleep(0.01)print('tqdm',end=' ')

可以看到,整个运行结果立刻变得美观而又清晰了!

tqdm在阿拉伯语中的意思是“进展”,是python中一个快速、扩展性强的进度条工具库,能让我们了解代码的运行进度,也能让我们的运行结果看起来显得更加美观而又高大上!! 喜欢的小伙伴赶紧用起来吧!!

Python Multiprocessing多进程 使用tqdm显示进度条的实现

1.背景

在python运行一些,计算复杂度比较高的函数时,服务器端单核CPU的情况比较耗时,因此需要多CPU使用多进程加快速度

2.函数要求

笔者使用的是:pathos.multiprocessing 库,进度条显示用tqdm库,安装方法:

pip install pathos

安装完成后

from pathos.multiprocessing import ProcessingPool as Pool
from tqdm import tqdm

这边使用pathos的原因是因为,multiprocessing 库中的Pool 函数只支持单参数输入,例如 f(x) = x**2,而不能处理 f (x,y) = x+y 这类的函数

更不用说一些需要参数的函数 例如:F(x , alpha=0.5, gamma = 0.1) 这样。

3.代码

定义一个 函数 F [ X ] ,其中,输入X是可以在第一个维度上迭代的array, 大小:[ num_X, len ] , 在第一维度 num_X 上进行迭代。

zip_lamda = [lamda for i in range(len(X)) ]
zip_weight = [weight for i in range(len(X)) ]
with tqdm(total=len(cold_sequences)) as t:for i, x in enumerate(pool.imap(F,X,zip_lamda,zip_weight)):X[i,:] = [x[key] for key in x.keys()]Y[i,] = 0t.update()pool.close()pool.join()

4.结果

mutiprocess 加速前

mutiprocess 加速后

python progressbar实现进度条

安装:

pip3 install progressbar2

使用样例:

import time
from progressbar import *
progress = ProgressBar()
for i in progress(range(1000)):time.sleep(0.01)

python alive-progress库实现进度条

alive-progress库是一种具有动态效果的智能进度条,库详细说明参加GitHub。

使用库之前需要进行安装,pip指令如下所示:

pip install alive-progress

实现总耗时10S的动态效果进度条 ,代码如下所示:

from alive_progress import alive_bar
import time
items = range(10)         # retrieve your set of items
with alive_bar(len(items)) as bar:  # declare your expected totalfor item in items:        # iterate as usual# process each itembar()            # call after consuming one itemtime.sleep(1)

效果如下所示:

python PySimpleGUI实现进度条

PySimpleGUI库是基于Tkinter、Remi、wxPython和PyQt库GUI库,我们可以基于它实现在GUI中添加进度条,当然这只是抛砖引玉,小伙伴们可以使用自己喜爱的GUI库实现进度条设计,库详细说明参加GitHub。

使用库之前需要进行安装,pip指令如下所示:

pip install pysimplegui

实现总耗时10S的动态GUI效果进度条 ,代码如下所示:

import PySimpleGUI as sg
import time
items = range(10)
for i, item in enumerate(items): sg.one_line_progress_meter('Progress Meter', i+1, len(items), '-key-') time.sleep(1)

效果如下所示:

wxPython实现带颜色的进度条

代码:

import wx
import wx.lib.fancytext as fancytextclass ColourGauge(wx.Panel):def __init__(self, parent,id, pos=wx.DefaultPosition, size=wx.DefaultSize):wx.Panel.__init__(self, id=id, parent=parent, pos=pos, size=size, style=wx.TAB_TRAVERSAL)# creat Gaugeself.gauge = Gauge(self, id=-1, size=size)self.SetAutoLayout(True)lc = wx.LayoutConstraints()lc.top.SameAs(self, wx.Top, 0) #AsIs()lc.left.AsIs()lc.height.AsIs()lc.right.SameAs(self, wx.Right, 0)self.gauge.SetConstraints(lc) def setPercent(self, percent):self.gauge.setPercent(percent)def setBackgroundColour(self, colour):self.gauge.SetBackgroundColour(colour)def setBarColour(self, colour):self.gauge.color = colourdef getBarColour(self): return self.gauge.colordef setStep(self,step):self.gauge.step=stepdef makeStep(self):if self.gauge.percent>=1.: returnself.gauge.percent+=self.gauge.stepif self.gauge.percent>1.:self.gauge.percent=1.self.Refresh()self.Update()class Gauge(wx.Control):default_color = "GREEN" # "MAGENTA","BLUE" # "GREEN" "RED" "YELLOW"def __init__(self, parent,id,pos=wx.DefaultPosition,size=wx.DefaultSize):wx.Control.__init__(self, parent, id, pos, size)self.SetBackgroundColour(wx.WHITE)self.color= Gauge.default_colorself.percent = 0.0self.step = 0.0wx.EVT_PAINT(self, self.OnPaint)def OnPaint(self, evt):dc = wx.PaintDC(self)dc.Clear()dc.BeginDrawing()dc.SetPen( wx.Pen(self.color,0) )dc.SetBrush( wx.Brush(self.color) )w,h = self.GetSizeTuple()dc.DrawRectangleRect((0,0,w*self.percent,h))percentStr= "%d%%"% int(self.percent*100)tx, ty = fancytext.getExtent(percentStr, dc)dc.DrawText(percentStr, w/2-tx/2, h/2-ty/2)dc.EndDrawing()def setPercent(self,percent):if percent <0 or percent >1.:returnself.percent = percentdef setColor(self,color):self.color = colordef getColor(self): return self.colordef setStep(self,step):self.step=stepdef makeStep(self):if self.percent>=1.: returnself.percent+=self.stepif self.percent>1.:self.percent=1.self.gauge.Refresh()self.gauge.Update()

效果:

总结

一、普通进度条

示例代码

import sys
import timedef progress_bar():for i in range(1, 101):print("\r", end="")print("Download progress: {}%: ".format(i), "▋" * (i // 2), end="")sys.stdout.flush()time.sleep(0.05)if __name__ == '__main__':progress_bar()

二、带时间的进度条

导入time模块来计算代码运行的时间,加上代码迭代进度使用格式化字符串来输出代码运行进度

示例代码

import timescale = 50
print("执行开始,祈祷不报错".center(scale // 2,"-"))
start = time.perf_counter()
for i in range(scale + 1):a = "*" * ib = "." * (scale - i)c = (i / scale) * 100dur = time.perf_counter() - startprint("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end = "")time.sleep(0.1)print("\n"+"执行结束,万幸".center(scale // 2,"-"))

三、TPDM 进度条

这是一个专门生成进度条的工具包,可以使用pip在终端进行下载,当然还能切换进度条风格

示例代码

from time import sleep
from tqdm import tqdm
# 这里同样的,tqdm就是这个进度条最常用的一个方法
# 里面存一个可迭代对象
for i in tqdm(range(1, 500)):# 模拟你的任务sleep(0.01)
sleep(0.5)

四、progress 进度条

只需要定义迭代的次数、进度条类型并在每次迭代时告知进度条即可

相关文档:https://pypi.org/project/progress/1.5/

示例代码

import time
from progress.bar import IncrementalBarmylist = [1,2,3,4,5,6,7,8]
bar = IncrementalBar('Countdown', max = len(mylist))
for item in mylist:bar.next()time.sleep(1)bar.finish()

五、alive_progress 进度条

顾名思义,这个库可以使得进度条变得生动起来,它比原来我们见过的进度条多了一些动画效果,需要使用pip进行下载

相关文档:https://github.com/rsalmei/alive-progress

示例代码

from alive_progress import alive_bar# retrieve your set of items
items = range(100)       # declare your expected total
with alive_bar(len(items)) as bar:  # iterate as usualfor item in items:        # process each itembar()time.sleep(0.1)

六、可视化进度条

用 PySimpleGUI 得到图形化进度条,我们可以加一行简单的代码,在命令行脚本中得到图形化进度条,也是使用pip进行下载

示例代码

import PySimpleGUI as sg
import timemylist = [1,2,3,4,5,6,7,8]
for i, item in enumerate(mylist):sg.one_line_progress_meter('This is my progress meter!', i+1, len(mylist), '-key-')time.sleep(1)

资源传送门

  • 关注【做一个柔情的程序猿】公众号

  • 在【做一个柔情的程序猿】公众号后台回复 【python资料】【2020秋招】 即可获取相应的惊喜哦!
  • 自己搭建的博客地址:梦魇回生的博客

「❤️ 感谢大家」

  • 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
  • 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程

wc,这进度条好快,不行我也得展示一下——python教你各种方法无障碍实现进度条相关推荐

  1. python实现http下载文件-Python HTTP下载文件并显示下载进度条功能的实现

    下面的Python脚本中利用request下载文件并写入到文件系统,利用progressbar模块显示下载进度条. 其中利用request模块下载文件可以直接下载,不需要使用open方法,例如: im ...

  2. 熬夜整理2022最新Python最全学习资料,看进度条就知道有多强了

    Python最新学习资料和视频 一.Python软件 安装教程 视频教程 二.学习规划 阶段一:Python基础 阶段二:Python核心编程 阶段三:web前端开发 阶段四:数据库 阶段五:后端开发 ...

  3. 利用DataSnap的回调功能在客户端显示服务器方法的执行进度

    如果DataSnap服务器方法的执行时间比较长,这时候可能需要在客户端用进度条显示当前服务器方法的执行进度.要实现这种需求,现在可以利用DataSnap的回调功能,此功能是从Delphi 2010版本 ...

  4. Mybatis 获取当前序列和下一个序列值 以及在一个方法中写多条SQL 语句

    目录 1.Mybatis 获取当前序列和下一个序列值 2.Mybatis 在一个方法中写多条SQL 语句 1.Mybatis 获取当前序列和下一个序列值 #获取当前序列值 select XXX_seq ...

  5. 如何写出清晰又优雅的Python代码?我们给你这26条建议

    来源:大数据DT本文约1900字,建议阅读5分钟PEP 8非常详细地描述了如何编写清晰的Python代码. [ 导读 ] Python Enhancement Proposal #8叫作PEP 8,它 ...

  6. Python 是怎么火起来的? 转载 2018年01月12日 00:00:00 133 图:Python 之父 Guido 正在设计 Python 语言,结果家里突然潜入一条大蟒蛇,一番激烈斗争,大

    Python 是怎么火起来的? 转载 2018年01月12日 00:00:00 133 图:Python 之父 Guido 正在设计 Python 语言,结果家里突然潜入一条大蟒蛇,一番激烈斗争,大蟒 ...

  7. Java黑皮书课后题第8章:*8.31(几何:交点)编写一个方法,返回两条直线的交点。四个点存放在4*2的二维数组points中。编写一个程序,提示用户输入4个点,并显示交点

    *8.31(几何:交点)编写一个方法,返回两条直线的交点.四个点存放在4*2的二维数组points中.编写一个程序,提示用户输入4个点,并显示交点 题目 题目描述 破题 代码 本题运行实例 题目 题目 ...

  8. php生成10万个字符串,有什么好的方法可以生成十万条不重复的13位纯数字字符串...

    有什么好的方法可以生成十万条不重复的13位纯数字字符串 回复内容: 有什么好的方法可以生成十万条不重复的13位纯数字字符串 一个个来.从13个0开始,一次加1... 可用时间戳来生成,或者后面再加随机 ...

  9. 编写一个Applet,画出20条水平的、随机颜色的平行线。要求线的长度相同,整条线段都要在可视区域内

    编写一个Applet,画出20条水平的.随机颜色的平行线.要求线的长度相同,整条线段都要在可视区域内. ` package p2; import java.applet.Applet; import ...

  10. python爬虫爬猎聘网获取多条职责描述中有Linux需求的招聘信息

    python爬虫爬猎聘网获取多条职责描述中有Linux需求的招聘信息 下列是我爬虫的作业 摘 要 随着现代化社会的飞速发展,网络上巨大信息量的获取给用户带来了许多的麻烦.由于工作和生活节奏的需求,人们 ...

最新文章

  1. Java并发编程:深入剖析ThreadLocal
  2. Java字符串格式化
  3. 北京通州拟3年培训技能人才5万人次 服务城市副中心行政办公区等
  4. 单例(Singleton)模式
  5. java泛型程序设计——注意擦除后的冲突
  6. linux-获取帮助-ls命令-date命令-man命令
  7. Navicat的使用,连表查询,python代码操作sql语句
  8. Codeforces 1114C(数论+唯一分解)
  9. nginx日志的监控【转】
  10. 解决idea的项目启动报404的问题
  11. jQuery基础之操作属性或文本及其样式 位置 尺寸的方法(重点,常用)
  12. 修改Python解释器和包路径
  13. 视频教程-webservice入门到精通(备java基础,xml,javaee框架)-Java
  14. python基础教程解压密码_python学习手册视频教程压缩包解压密码?
  15. 高级前端工程师知识图谱
  16. 抖音开屏广告和信息流广告相比较哪一种效果更好?
  17. CCC与Android交互的注意点
  18. html登陆没反应,ipad屏幕输入密码没反应
  19. java 接口 实验报告_java-接口练习实验报告
  20. SOLIDWORKS 2018官方正版功能介绍

热门文章

  1. 各大型网站架构分析收集 1
  2. excel启动时显示“操作系统当前的配置不能运行此应用程序”
  3. 通过Xcode中的Packetlogger抓取iPhone蓝牙交互封包
  4. 如何写一个简单的时钟表盘(qt)
  5. 微信视频号视频保存,微信视频号视频下载的方法
  6. Qt ui 到底是什么?
  7. 人的一生,到底在追求什么呢?
  8. AtCoder Beginner Contest 248 E - K-colinear Line「计算几何判三点共线」
  9. 日记app制作(OC)
  10. cesium实现场景导出图片功能