原代码

# -*- coding: utf-8 -*-
"""
@File    : 191218_obstacle_detection_测试加空间过滤器和jit加速器.py
@Time    : 2019/12/18 11:47
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""import timeimport numpy as np
import pyrealsense2 as rs
import cv2
import sys
from numba import jit, vectorize, int64, int32, autojit, uint16, float64class ObstacleDetection(object):def __init__(self):# self.cam_serials = ['838212073161', '827312071726']self.cam_serials = ['838212073161']# @jit(nopython=True)@jit# @vectorize([int64(int64, int64)], target='parallel')# @jit('int64(int64,int64[:])')# @jit(int64[:](int64[:], int64[:]))def traversing_pixels(self, depth_image):num_black = 0all_pixels = 0for pixel in depth_image.ravel():all_pixels += 1if pixel == 0:num_black += 1return num_black# return all_pixels, num_blackdef obstacle_detection(self):# 摄像头个数(在这里设置所需使用摄像头的总个数)cam_num = 6ctx = rs.context()'''连续验证机制'''# D·C 1911202:创建最大验证次数max_veri_times;创建连续稳定值continuous_stable_value,用于判断设备重置后是否处于稳定状态max_veri_times = 100continuous_stable_value = 10print('\n', end='')print('开始连续验证,连续验证稳定值:{},最大验证次数:{}:'.format(continuous_stable_value, max_veri_times))continuous_value = 0veri_times = 0while True:devices = ctx.query_devices()connected_cam_num = len(devices)if connected_cam_num == cam_num:continuous_value += 1if continuous_value == continuous_stable_value:breakelse:continuous_value = 0veri_times += 1if veri_times == max_veri_times:print("检测超时,请检查摄像头连接!")sys.exit()print('摄像头个数:{}'.format(connected_cam_num))'''循环reset摄像头'''# hardware_reset()后是不是应该延迟一段时间?不延迟就会报错print('\n', end='')print('开始初始化摄像头:')for dev in ctx.query_devices():# 先将设备的序列号放进一个变量里,免得在下面for循环里访问设备的信息过多(虽然不知道它会不会每次都重新访问)dev_serial = dev.get_info(rs.camera_info.serial_number)# 匹配序列号,重置我们需重置的特定摄像头(注意两个for循环顺序,哪个在外哪个在内很重要,不然会导致刚重置的摄像头又被访问导致报错)for serial in self.cam_serials:if serial == dev_serial:dev.hardware_reset()# 像下面这条语句居然不会报错,不是刚刚才重置了dev吗?莫非区别在于没有通过for循环ctx.query_devices()去访问?# 是不是刚重置后可以通过ctx.query_devices()去查看有这个设备,但是却没有存储设备地址?如果是这样,# 也就能够解释为啥能够通过len(ctx.query_devices())函数获取设备数量,但访问序列号等信息就会报错的原因了print('摄像头{}初始化成功'.format(dev.get_info(rs.camera_info.serial_number)))'''连续验证机制'''# D·C 1911202:创建最大验证次数max_veri_times;创建连续稳定值continuous_stable_value,用于判断设备重置后是否处于稳定状态print('\n', end='')print('开始连续验证,连续验证稳定值:{},最大验证次数:{}:'.format(continuous_stable_value, max_veri_times))continuous_value = 0veri_times = 0while True:devices = ctx.query_devices()connected_cam_num = len(devices)if connected_cam_num == cam_num:continuous_value += 1if continuous_value == continuous_stable_value:breakelse:continuous_value = 0veri_times += 1if veri_times == max_veri_times:print("检测超时,请检查摄像头连接!")sys.exit()print('摄像头个数:{}'.format(connected_cam_num))'''配置各个摄像头的基本对象'''for i in range(len(self.cam_serials)):locals()['pipeline' + str(i + 1)] = rs.pipeline(ctx)locals()['config' + str(i + 1)] = rs.config()locals()['config' + str(i + 1)].enable_device(self.cam_serials[i])locals()['config' + str(i + 1)].enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)locals()['config' + str(i + 1)].enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)locals()['pipeline' + str(i + 1)].start(locals()['config' + str(i + 1)])# 创建对齐对象(深度对齐颜色)locals()['align' + str(i + 1)] = rs.align(rs.stream.color)'''运行摄像头'''try:while True:start_time = time.time()for i in range(len(self.cam_serials)):locals()['frames' + str(i + 1)] = locals()['pipeline' + str(i + 1)].wait_for_frames()# 获取对齐帧集locals()['aligned_frames' + str(i + 1)] = locals()['align' + str(i + 1)].process(locals()['frames' + str(i + 1)])# 获取对齐后的深度帧和彩色帧locals()['aligned_depth_frame' + str(i + 1)] = locals()['aligned_frames' + str(i + 1)].get_depth_frame()locals()['color_frame' + str(i + 1)] = locals()['aligned_frames' + str(i + 1)].get_color_frame()if not locals()['aligned_depth_frame' + str(i + 1)] or not locals()['color_frame' + str(i + 1)]:continue# 获取颜色帧内参locals()['color_profile' + str(i + 1)] = locals()['color_frame' + str(i + 1)].get_profile()locals()['cvsprofile' + str(i + 1)] = rs.video_stream_profile(locals()['color_profile' + str(i + 1)])locals()['color_intrin' + str(i + 1)] = locals()['cvsprofile' + str(i + 1)].get_intrinsics()locals()['color_intrin_part' + str(i + 1)] = [locals()['color_intrin' + str(i + 1)].ppx,locals()['color_intrin' + str(i + 1)].ppy,locals()['color_intrin' + str(i + 1)].fx,locals()['color_intrin' + str(i + 1)].fy]# 【空间过滤器】locals()['spatial' + str(i + 1)] = rs.spatial_filter()locals()['spatial' + str(i + 1)].set_option(rs.option.filter_magnitude, 5)locals()['spatial' + str(i + 1)].set_option(rs.option.filter_smooth_alpha, 1)locals()['spatial' + str(i + 1)].set_option(rs.option.filter_smooth_delta, 50)locals()['spatial' + str(i + 1)].set_option(rs.option.holes_fill, 3)locals()['filtered_depth' + str(i + 1)] = locals()['spatial' + str(i + 1)].process(locals()['aligned_depth_frame' + str(i + 1)])locals()['depth_image' + str(i + 1)] = np.asanyarray(locals()['filtered_depth' + str(i + 1)].get_data())# print(locals()['depth_image' + str(i + 1)].dtype)   # uint16locals()['color_image' + str(i + 1)] = np.asanyarray(locals()['color_frame' + str(i + 1)].get_data())# locals()['depth_image' + str(i + 1)] = np.asanyarray(#     locals()['aligned_depth_frame' + str(i + 1)].get_data())# 【打印深度值看看、全部打印显示】# np.set_printoptions(threshold=np.inf)# print(locals()['depth_image' + str(i + 1)])# 【计算深度图数据中的0值】# locals()['all_pixels' + str(i + 1)], locals()['num_black' + str(i + 1)] = self.traversing_pixels(#     locals()['depth_image' + str(i + 1)])locals()['num_black' + str(i + 1)] = self.traversing_pixels(locals()['depth_image' + str(i + 1)])# num_black = 0# all_pixels = 0# for row in range(480):#     for colume in range(640):#         all_pixels += 1#         if locals()['depth_image' + str(i + 1)][row, colume] == 0:#             num_black += 1print('depth_image分辨率:{}'.format(locals()['depth_image' + str(i + 1)].shape))# print('depth_image:{}'.format(num_black))# print('depth_image:{}'.format(num_black / all_pixels))print('depth_image:{}'.format(locals()['num_black' + str(i + 1)]))# print('depth_image:{}'.format(#     locals()['num_black' + str(i + 1)] / locals()['all_pixels' + str(i + 1)]))# 以下这种卡的不行(get_distance()函数会把窗口搞崩溃(即使不很卡))# for row in range(locals()['aligned_depth_frame' + str(i + 1)].get_height()):#     for colume in range(locals()['aligned_depth_frame' + str(i + 1)].get_width()):#         all_pixels += 1#         if locals()['depth_image' + str(i + 1)][row, colume] == 0:#             # if locals()[#             #     'aligned_depth_frame' + str(i + 1)].get_distance(row, colume) == 0:#             num_black += 1# for pixel in locals()['depth_image' + str(i + 1)].ravel():#     all_pixels += 1#     if pixel == 0:#         num_black += 1# print('depth_image分辨率:{}'.format(locals()['depth_image' + str(i + 1)].shape))# print('depth_image:{}'.format(num_black))# print('depth_image:{}'.format(num_black / all_pixels))locals()['depth_colormap' + str(i + 1)] = cv2.applyColorMap(cv2.convertScaleAbs(locals()['depth_image' + str(i + 1)], alpha=0.0425),cv2.COLORMAP_JET)locals()['image' + str(i + 1)] = np.hstack((locals()['color_image' + str(i + 1)], locals()['depth_colormap' + str(i + 1)]))cv2.imshow('win{}'.format(i + 1), locals()['image' + str(i + 1)])cv2.waitKey(1)end_time = time.time()print('单帧运行时间:{}'.format(end_time - start_time))finally:for i in range(len(self.cam_serials)):locals()['pipeline' + str(i + 1)].stop()if __name__ == '__main__':ObstacleDetection().obstacle_detection()

运行结果:

D:/20191211_obstacle_detection/obstacle_detection/191218_obstacle_detection_测试加空间过滤器和jit加速器.py:26: NumbaWarning:
Compilation is falling back to object mode WITH looplifting enabled because Function "traversing_pixels" failed type inference due to: non-precise type pyobject
[1] During: typing of argument at D:/20191211_obstacle_detection/obstacle_detection/191218_obstacle_detection_测试加空间过滤器和jit加速器.py (32)File "191218_obstacle_detection_测试加空间过滤器和jit加速器.py", line 32:def traversing_pixels(self, depth_image):num_black = 0^@jit
D:/20191211_obstacle_detection/obstacle_detection/191218_obstacle_detection_测试加空间过滤器和jit加速器.py:26: NumbaWarning:
Compilation is falling back to object mode WITHOUT looplifting enabled because Function "traversing_pixels" failed type inference due to: cannot determine Numba type of <class 'numba.dispatcher.LiftedLoop'>File "191218_obstacle_detection_测试加空间过滤器和jit加速器.py", line 34:def traversing_pixels(self, depth_image):<source elided>all_pixels = 0for pixel in depth_image.ravel():^@jit
D:\20191031_tensorflow_yolov3\python\lib\site-packages\numba\object_mode_passes.py:178: NumbaWarning: Function "traversing_pixels" was compiled in object mode without forceobj=True, but has lifted loops.File "191218_obstacle_detection_测试加空间过滤器和jit加速器.py", line 31:# @jit(uint16[:](uint16[:], uint16[:]))def traversing_pixels(self, depth_image):^state.func_ir.loc))
D:\20191031_tensorflow_yolov3\python\lib\site-packages\numba\object_mode_passes.py:187: NumbaDeprecationWarning:
Fall-back from the nopython compilation path to the object mode compilation path has been detected, this is deprecated behaviour.For more information visit http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jitFile "191218_obstacle_detection_测试加空间过滤器和jit加速器.py", line 31:# @jit(uint16[:](uint16[:], uint16[:]))def traversing_pixels(self, depth_image):^warnings.warn(errors.NumbaDeprecationWarning(msg, state.func_ir.loc))

原因

原因暂不明,之前我是将需jit加速函数放在类中定义,现在我将此函数移出类外,发现警告消失了,猜测在类中也是可以的,只不过我不懂怎么设置罢了。。。

修改后代码

# -*- coding: utf-8 -*-
"""
@File    : 191219_obstacle_detection_测试加空间过滤器和jit加速器_将需jit加速函数放在类外部.py
@Time    : 2019/12/19 10:10
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""import timeimport numpy as np
import pyrealsense2 as rs
import cv2
import sys
from numba import jit, vectorize, int64, int32, autojit, uint16, float64# @jit(nopython=True)
# @jit
# @vectorize([int64(int64, int64)], target='parallel')
# @jit('int64(int64,int64[:])')
# @jit(int64[:](int64[:], int64[:]))
@jit
def traversing_pixels(depth_image):num_black = 0all_pixels = 0for pixel in depth_image.ravel():all_pixels += 1if pixel == 0:num_black += 1return num_black# return all_pixels, num_blackclass ObstacleDetection(object):def __init__(self):# self.cam_serials = ['838212073161', '827312071726']self.cam_serials = ['838212073161']def obstacle_detection(self):# 摄像头个数(在这里设置所需使用摄像头的总个数)cam_num = 6ctx = rs.context()'''连续验证机制'''# D·C 1911202:创建最大验证次数max_veri_times;创建连续稳定值continuous_stable_value,用于判断设备重置后是否处于稳定状态max_veri_times = 100continuous_stable_value = 10print('\n', end='')print('开始连续验证,连续验证稳定值:{},最大验证次数:{}:'.format(continuous_stable_value, max_veri_times))continuous_value = 0veri_times = 0while True:devices = ctx.query_devices()connected_cam_num = len(devices)if connected_cam_num == cam_num:continuous_value += 1if continuous_value == continuous_stable_value:breakelse:continuous_value = 0veri_times += 1if veri_times == max_veri_times:print("检测超时,请检查摄像头连接!")sys.exit()print('摄像头个数:{}'.format(connected_cam_num))'''循环reset摄像头'''# hardware_reset()后是不是应该延迟一段时间?不延迟就会报错print('\n', end='')print('开始初始化摄像头:')for dev in ctx.query_devices():# 先将设备的序列号放进一个变量里,免得在下面for循环里访问设备的信息过多(虽然不知道它会不会每次都重新访问)dev_serial = dev.get_info(rs.camera_info.serial_number)# 匹配序列号,重置我们需重置的特定摄像头(注意两个for循环顺序,哪个在外哪个在内很重要,不然会导致刚重置的摄像头又被访问导致报错)for serial in self.cam_serials:if serial == dev_serial:dev.hardware_reset()# 像下面这条语句居然不会报错,不是刚刚才重置了dev吗?莫非区别在于没有通过for循环ctx.query_devices()去访问?# 是不是刚重置后可以通过ctx.query_devices()去查看有这个设备,但是却没有存储设备地址?如果是这样,# 也就能够解释为啥能够通过len(ctx.query_devices())函数获取设备数量,但访问序列号等信息就会报错的原因了print('摄像头{}初始化成功'.format(dev.get_info(rs.camera_info.serial_number)))'''连续验证机制'''# D·C 1911202:创建最大验证次数max_veri_times;创建连续稳定值continuous_stable_value,用于判断设备重置后是否处于稳定状态print('\n', end='')print('开始连续验证,连续验证稳定值:{},最大验证次数:{}:'.format(continuous_stable_value, max_veri_times))continuous_value = 0veri_times = 0while True:devices = ctx.query_devices()connected_cam_num = len(devices)if connected_cam_num == cam_num:continuous_value += 1if continuous_value == continuous_stable_value:breakelse:continuous_value = 0veri_times += 1if veri_times == max_veri_times:print("检测超时,请检查摄像头连接!")sys.exit()print('摄像头个数:{}'.format(connected_cam_num))'''配置各个摄像头的基本对象'''for i in range(len(self.cam_serials)):locals()['pipeline' + str(i + 1)] = rs.pipeline(ctx)locals()['config' + str(i + 1)] = rs.config()locals()['config' + str(i + 1)].enable_device(self.cam_serials[i])locals()['config' + str(i + 1)].enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)locals()['config' + str(i + 1)].enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)locals()['pipeline' + str(i + 1)].start(locals()['config' + str(i + 1)])# 创建对齐对象(深度对齐颜色)locals()['align' + str(i + 1)] = rs.align(rs.stream.color)'''运行摄像头'''try:while True:start_time = time.time()for i in range(len(self.cam_serials)):locals()['frames' + str(i + 1)] = locals()['pipeline' + str(i + 1)].wait_for_frames()# 获取对齐帧集locals()['aligned_frames' + str(i + 1)] = locals()['align' + str(i + 1)].process(locals()['frames' + str(i + 1)])# 获取对齐后的深度帧和彩色帧locals()['aligned_depth_frame' + str(i + 1)] = locals()['aligned_frames' + str(i + 1)].get_depth_frame()locals()['color_frame' + str(i + 1)] = locals()['aligned_frames' + str(i + 1)].get_color_frame()if not locals()['aligned_depth_frame' + str(i + 1)] or not locals()['color_frame' + str(i + 1)]:continue# 获取颜色帧内参locals()['color_profile' + str(i + 1)] = locals()['color_frame' + str(i + 1)].get_profile()locals()['cvsprofile' + str(i + 1)] = rs.video_stream_profile(locals()['color_profile' + str(i + 1)])locals()['color_intrin' + str(i + 1)] = locals()['cvsprofile' + str(i + 1)].get_intrinsics()locals()['color_intrin_part' + str(i + 1)] = [locals()['color_intrin' + str(i + 1)].ppx,locals()['color_intrin' + str(i + 1)].ppy,locals()['color_intrin' + str(i + 1)].fx,locals()['color_intrin' + str(i + 1)].fy]# 【空间过滤器】locals()['spatial' + str(i + 1)] = rs.spatial_filter()locals()['spatial' + str(i + 1)].set_option(rs.option.filter_magnitude, 5)locals()['spatial' + str(i + 1)].set_option(rs.option.filter_smooth_alpha, 1)locals()['spatial' + str(i + 1)].set_option(rs.option.filter_smooth_delta, 50)locals()['spatial' + str(i + 1)].set_option(rs.option.holes_fill, 3)locals()['filtered_depth' + str(i + 1)] = locals()['spatial' + str(i + 1)].process(locals()['aligned_depth_frame' + str(i + 1)])locals()['depth_image' + str(i + 1)] = np.asanyarray(locals()['filtered_depth' + str(i + 1)].get_data())# print(locals()['depth_image' + str(i + 1)].dtype)   # uint16locals()['color_image' + str(i + 1)] = np.asanyarray(locals()['color_frame' + str(i + 1)].get_data())# locals()['depth_image' + str(i + 1)] = np.asanyarray(#     locals()['aligned_depth_frame' + str(i + 1)].get_data())# 【打印深度值看看、全部打印显示】# np.set_printoptions(threshold=np.inf)# print(locals()['depth_image' + str(i + 1)])# 【计算深度图数据中的0值】# locals()['all_pixels' + str(i + 1)], locals()['num_black' + str(i + 1)] = self.traversing_pixels(#     locals()['depth_image' + str(i + 1)])locals()['num_black' + str(i + 1)] = traversing_pixels(locals()['depth_image' + str(i + 1)])# num_black = 0# all_pixels = 0# for row in range(480):#     for colume in range(640):#         all_pixels += 1#         if locals()['depth_image' + str(i + 1)][row, colume] == 0:#             num_black += 1print('depth_image分辨率:{}'.format(locals()['depth_image' + str(i + 1)].shape))# print('depth_image:{}'.format(num_black))# print('depth_image:{}'.format(num_black / all_pixels))print('depth_image:{}'.format(locals()['num_black' + str(i + 1)]))# print('depth_image:{}'.format(#     locals()['num_black' + str(i + 1)] / locals()['all_pixels' + str(i + 1)]))# 以下这种卡的不行(get_distance()函数会把窗口搞崩溃(即使不很卡))# for row in range(locals()['aligned_depth_frame' + str(i + 1)].get_height()):#     for colume in range(locals()['aligned_depth_frame' + str(i + 1)].get_width()):#         all_pixels += 1#         if locals()['depth_image' + str(i + 1)][row, colume] == 0:#             # if locals()[#             #     'aligned_depth_frame' + str(i + 1)].get_distance(row, colume) == 0:#             num_black += 1# for pixel in locals()['depth_image' + str(i + 1)].ravel():#     all_pixels += 1#     if pixel == 0:#         num_black += 1# print('depth_image分辨率:{}'.format(locals()['depth_image' + str(i + 1)].shape))# print('depth_image:{}'.format(num_black))# print('depth_image:{}'.format(num_black / all_pixels))locals()['depth_colormap' + str(i + 1)] = cv2.applyColorMap(cv2.convertScaleAbs(locals()['depth_image' + str(i + 1)], alpha=0.0425),cv2.COLORMAP_JET)locals()['image' + str(i + 1)] = np.hstack((locals()['color_image' + str(i + 1)], locals()['depth_colormap' + str(i + 1)]))cv2.imshow('win{}'.format(i + 1), locals()['image' + str(i + 1)])cv2.waitKey(1)end_time = time.time()print('单帧运行时间:{}'.format(end_time - start_time))finally:for i in range(len(self.cam_serials)):locals()['pipeline' + str(i + 1)].stop()if __name__ == '__main__':ObstacleDetection().obstacle_detection()```运行结果:```python
D:\20191031_tensorflow_yolov3\python\python.exe D:/20191211_obstacle_detection/obstacle_detection/191219_obstacle_detection_测试加空间过滤器和jit加速器_将需jit加速函数放在类外部.py开始连续验证,连续验证稳定值:10,最大验证次数:100:
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6开始初始化摄像头:
摄像头838212073161初始化成功开始连续验证,连续验证稳定值:10,最大验证次数:100:
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6
摄像头个数:6
depth_image分辨率:(480, 640)
depth_image:85152
单帧运行时间:0.9076991081237793
depth_image分辨率:(480, 640)
depth_image:9551
...

python numba.jit 警告:cannot determine Numba type of class 'numba.dispatcher.LiftedLoop'(加速代码)相关推荐

  1. numba.jit警告:Compilation is falling back to object mode WITH looplifting enabled because Function

    报错信息: Compilation is falling back to object mode WITH looplifting enabled because Function "tra ...

  2. Numba.jit警告:由于非精确类型pyobject而导致类型推断失败

    Numba.jit警告:由于非精确类型pyobject而导致类型推断失败 对于使用Python进行科学计算的开发人员,加速代码执行是一项永恒的挑战.虽然Python与其他编程语言相比具有易用性和灵活性 ...

  3. numba.jit警告:warnings.warn(errors.NumbaDeprecationWarning(msg, state.func_ir.loc))

    参考文章:numba.jit警告:failed type inference due to: non-precise type pyobject

  4. numba.jit警告:failed type inference due to: non-precise type pyobject

    from numba import jit 代码报错: failed type inference due to: non-precise type pyobject 解决方法: 把jit函数挪到类的 ...

  5. python jit_python中Numba jit警告的解释

    1.优化函数(代数简化) 现代CPU的加法和乘法运算非常快.如有可能,应避免使用指数运算.在 示例 在这个例子中,我用一个简单的乘法代替了昂贵的求幂运算.这样的简化可以导致相当高的加速,但也可能改变结 ...

  6. Cannot determine Numba type of <class ‘numba.core.dispatcher.LiftedLoop‘

    Cannot determine Numba type of <class 'numba.core.dispatcher.LiftedLoop' 解决ok. 代码: @jit() def ini ...

  7. python numba_Python Numba jit NotImplementedError列表理解

    我想加快用Numba执行列表理解的公式的计算. from numba import jit # General function to generate overlapping windows fro ...

  8. python报错:ImportError: cannot import name autojit from numba(无法导入numba.autojit)

    在用numba jit加速的时候,报错: ImportError: cannot import name 'autojit' from 'numba' 不知道咋回事,重装了numba也没用,speec ...

  9. mybatis查询报错:com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from string

    mybatis查询报错: com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from strin ...

最新文章

  1. 统计计量 | 协方差和相关系数的暧昧关系:共性与个性
  2. 注意力机制取代卷积网络,预测准确性提升超30%
  3. 阻止路由跳转得方式_vue路由拦截及页面跳转的设置方法
  4. XMLHttpRequest
  5. 从Q3财报看百度营销成长
  6. 虚基类(c++细节篇七)
  7. php 对象字面量,js的字面量对象和JSON的区别
  8. .NET6之MiniAPI(三十):结束篇(附链接)
  9. Codeforces Round #731 (Div. 3) G. How Many Paths? dfs + 拓扑 + 思维
  10. 栈溢出笔记1.3 准备Shellcode
  11. 八年级计算机教学论文,初二数学教学论文范文
  12. docker 镜像开机自启动_Docker常用命令总结
  13. matplotlib 28原则
  14. Android Studio App开发中多线程的讲解与实现新闻轮播滚动实战(附源码 超详细必看)
  15. 【摘自csdn】一场我没有看懂的相亲
  16. 最简洁的解释动态语言中的鸭子类型和闭包
  17. 【Codeforces 741 B. Arpa's weak amphitheater and Mehrdad's 】+ 并查集 + 01背包
  18. android原生界面太烦了,Android进阶(二十七)Android原生扰人烦的布局
  19. iconfont怎么引入html,Web页面中引用iconfont图标
  20. Python安装 详细教程

热门文章

  1. python 双向链表_数据结构-双向链表(Python实现)
  2. 让ABAP开发者更加轻松的若干快捷键
  3. 物料编码原则有码还是无码
  4. excel中如何筛选重复数据
  5. 存款人在哪些情况下应向开户银行提出撤销银行结算账户的申请?
  6. ABAP实现本地化的资产负债表和损益表
  7. linux汇编和x86汇编,linux平台学x86汇编(四):从“hello world!”开始
  8. php分页怎么实行跳转,php分页函数,支持页码下拉选择跳转
  9. ajax值上传不过去,ajax上传时参数提交不更新等相关问题
  10. html固定右侧显示,html+css布局之--左边固定宽,右侧自适应(4种方法)