![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python
文章平均质量分 62
张海军2013
这个作者很懒,什么都没留下…
展开
-
vscode启动Python调试 找不到指定模块
vscode在启动python调试时,要导入numpy模块,而且非常确定numpy已经安装了,但还是提示找到numpy模块Exception has occurred: ImportErrorIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!Importing the numpy C-extensions failed. This error can happen formany reasons, often d原创 2021-09-30 15:16:37 · 6232 阅读 · 2 评论 -
Python高性能计算之推导和生成器
在Python中,推导和生成器都是非常常用的,而且它们都是经过极度优化的操作,速度非常快,另外一点是它们的代码可读性也比较强,非常适合用来替代显式的for循环。 当然,有些可能对推导器和生成器不太熟悉,这里我们先介绍一下。推导器在生成列表时经常会用到,采用方括号来表示,并且里面用一个for循环来生成所需数据。data = [x for x in range(10)]data2 = [x for x in range(10) if x % 2 == 0]这种写法就等效于:data = []原创 2021-08-24 18:40:09 · 554 阅读 · 0 评论 -
Python函数参数传递机制
Python3中有6中标准的数据类型:Number(数字)String(字符串)List(列表)Tuple(元组)Set(集合)Dictionary(字典)其中Number、String、Tuple和Sets是不可变类型,List和Dictionary是可变类型。什么是可变类型?什么是不可变类型?1. 可变类型 对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收原创 2021-07-27 20:12:10 · 810 阅读 · 0 评论 -
如何写出高性能的Python之缓存的应用
缓存有什么作用? 能看到这篇文章的同学,应该都对缓存这个概念不陌生,CPU中也有一级缓存、二级缓存和三级缓存的概念。缓存可以解决哪些问题?我们直接把网上的一段话放上来:性能——将相应数据存储起来以避免数据的重复创建、处理和传输,可有效提高性能。比如将不改变的数据缓存起来,例如国家列表等,这样能明显提高web程序的反应速度;稳定性——同一个应用中,对同一数据、逻辑功能和用户界面的多次请求时经常发生的。当用户基数很大时,如果每次请求都进行处理,消耗的资源是很大的浪费,也同时造成系统的不稳定。例如原创 2021-01-07 23:54:39 · 239 阅读 · 0 评论 -
Python高性能计算之修饰符wraps
修饰符functools.wraps 其实整个functools模块都值得讲一下,我们后面会出一个专门的文章来讲。今天我们先来看下functools.wraps。 在本节内容开始前,首先要了解什么是修饰符?可以参考我们之前整理的一篇文章。Python修饰符详解,这这篇文章中我们可以看到,修饰器的一般形式是:def works_for_all(func): def inner(*args, **kwargs): print("I can decorate any functi原创 2020-12-06 23:08:28 · 179 阅读 · 1 评论 -
Python修饰符 详解
修饰符(有的也翻译成装饰符、装饰器,英文叫decorator)是Python中一个很有意思的feature,它可以向已经写好的代码中添加功能。这其实也叫元编程,因为程序的一部分在编译的时候尝试修改程序的另一部分。高阶函数 在学习Python的修饰符前,我们要知道几个a概念,首先是Python中的所有东西都是对象,所有我们定义的变量、类甚至与于函数,都是对象。函数是对象是个什么概念呢?就是函数之间可以相互赋值:def first(msg): pritn(msg) first("Hello")原创 2020-12-06 14:17:55 · 6218 阅读 · 1 评论 -
Python嵌套函数 闭包 详解
1. 什么是嵌套函数 嵌套函数就是在函数中定义函数,英文叫nested functiondef outer(x): def inner(): print(x) inner()这也很好理解,在函数outer中定义了另外一个函数inner,而inner也必须在outer中被调用才能执行。我们还可以直接把内容定义的函数当做返回值:def outer(x): def inner(): print(x) return inner()这样原创 2020-11-30 08:59:53 · 1248 阅读 · 0 评论 -
Python常用操作的复杂度
我们前面讲过list、deque、堆、字典树等高性能计算的技巧,这一节我们来整理一下Python中常用操作的时间复杂度。本文中的N表示容器的元素数量,K表示参数中元素的数量或参数的值。listlst = list(range(10,20))l1 = list(range(100,105))操作时间复杂度描述lst[2]O(1)访问元素lst.pop()O(1)弹出最后一个值lst.append(l1)O(1)在末尾添加元素lst.exte原创 2020-11-22 13:39:05 · 477 阅读 · 0 评论 -
Python高性能计算之字典树
很多同学可能没有听过字典树,它也被称为前缀树,虽然知名度不高,但在某些地方很有用,它在列表中查找与前缀匹配的字符串方面,速度极快,因此非常适合用来实现输入时查找和自动补全功能。 Python的标准库中并未提供字典树,但我们可以通过pytricia这个库来实现。下面我们先来看下用Python标准库中的方法来实现前缀匹配的功能。 首先,定义一个包含随机字符串的列表,字符串中的字符均为大写字母:from random import choicefrom string import ascii_up原创 2020-11-21 21:20:01 · 506 阅读 · 0 评论 -
Python高性能计算之堆
很多Python的初学者可能对Python中的堆不太了解,堆是一种用于快速查找并提取集合中最大值或最小值的数据结构,它的典型用途就是按照优先级处理一系列的任务。 我们在前面讲列表和双端队列时,讲到过列表中的查找操作的时间复杂度是O(N),但如果列表是有序的,我们就可以使用模块bisect实现时间复杂度为O(log(N))的查找操作。但虽然查找的时间缩短了,但如果要再进行插值,时间复杂度依然是O(N)。而堆是一种效率更高的数据结构,其元素插入操作和最大值提取操作的时间复杂度都是O(log(N))。原创 2020-11-20 13:16:38 · 236 阅读 · 0 评论 -
Python高性能计算之字典
在Python中,字典是以散列映射的方式实现的,在插入、删除和访问元素方面的时间复杂度都是O(1)。 在Python3.5及之前的版本中,字典是无序集合,但从Python3.6开始,字典能够保留元素的插入顺序 散列映射就是将key和value关联的一种数据结构,散列函数就是哈希(hash)函数。熟悉哈希函数的朋友应该知道,哈希函数的冲突是不可避免的,但我们平时在使用Python的字典时,无需考虑这个因素,因为大多数情况下,默认的冲突解决方案都是有效的。 上一节“Python高性能计算之列表”原创 2020-11-19 09:31:43 · 550 阅读 · 1 评论 -
Python高性能计算之列表
接下里的系列文章中,我们将讲一下Python高性能计算,如何提高Python的计算性能?有哪些好用的库?请持续关注我们。第一节我们先来讲列表。 Python列表是有序的元素集合,在Python中是使用大小可调整的数组实现的。数组是一种基本的数据结构,由一系列连续的内存单元组成,其中每个内存单元都包含指向一个Python对象的引用。 列表在访问、修改和增加元素方面,速度都非常快。其中访问和修改元素,都需要从底层数组的相应位置获取对象引用,因此其复杂度是O(1)。增加元素的话,跟C++中的Vecto原创 2020-11-15 17:29:44 · 305 阅读 · 0 评论 -
Python教程之粒子运动轨迹动态绘图
(本文整理自《Python高性能》) 今天我们来讲一下Python中的动态绘图库–matplotlib.animation,以粒子运动轨迹为例来说明如何绘制动态图。 假设按照圆周运动,如下图所示:为了模拟这个运动,我们需要如下信息:粒子的起始位置、速度和旋转方向。因此定义一个通用的Particle类,用于存储粒子的位置及角速度。class Particle: def __init__(self, x, y, ang_vel): self.x = x se原创 2020-08-30 17:51:43 · 7940 阅读 · 0 评论 -
pandas应用整理
首先导入pandas库import pandas as pdSeriespandas中包含Series和DataFrame,首先来看Series创建Seriessr = pd.Series([1,2,3,4])也可以在创建的时候指定indexsr = pd.Series([1,2,3,4], index=['a','b','c','d]')用字典创建Series对象sco...原创 2019-03-27 12:43:24 · 296 阅读 · 0 评论 -
Python基本数据类型
Python3中有6中标准的数据类型:Number(数字)String(字符串)List(列表)Tuple(元组)Set(集合)Dictionary(字典)其中Number、String、Tuple和Sets是不可变类型,List和Dictionary是可变类型(后面讲解)。1. Number(数字) 包括int,float,bool,complex四种>>...原创 2019-08-24 18:14:20 · 156 阅读 · 0 评论 -
Python3基本语法
行与缩进 Python中一个特色就是使用缩进来代表代码块,不需要使用大括号{}。缩进的空格数随意,但必须保证每段代码块的缩进是相同的,每行结尾的分号(;)可加可不加(一般都不加)。如下面代码所示。if True: a = 1 b = 1 else: a = 2; b = 2;很多同学刚开始写Python时会忽略这一点,比如下面这样,就会...原创 2019-08-24 18:16:14 · 125 阅读 · 0 评论 -
python 多线程
多线程和多进程的区别 我们首先要把这个问题搞清楚,这也是很多公司面试时的一个常见问题。 在编程中我们所说的多线程跟CPU的多线程并不是一个意思,比如i7-7700K,是4核8线程的一个CPU,但并不是说我们程序中最多只能创建8个线程。我们可以创建几百个线程,这跟内存大小和每个线程的栈大小都有关系。进程我们可以简单的理解为应用程序,每个应用程序都会至少占用一个进程,在进程中我们可以选择使用单...原创 2019-08-24 22:06:52 · 110 阅读 · 0 评论 -
python matplotlib教程
matplotlib是一个类似于MATLAB的API,上手简单,使用方法跟MATLAB非常类似,兼容LaTeX格式的标题和文档。调用方法:import matplotlib.pyplot as plt绘制list的数据import matplotlib.pyplot as pltimport numpy as npx1 = [1,2,3,4,5,6]y1 = [2,4,6,...原创 2019-08-26 10:21:32 · 258 阅读 · 0 评论 -
python scipy教程
Scipy Scipy是一个高级的科学计算库,建立在低一级的numpy的多维数组之上。Scipy有很多子模块可以完成不同的操作,如傅里叶变换、插值运算、优化算法和数学统计等。Scipy的常用的子模块如下:scipy.cluster 向量量化scipy.constants 数学常量scipy.fftpack 快速傅里叶变换scipy.in...原创 2019-08-26 10:22:06 · 3368 阅读 · 0 评论 -
numpy应用总结
numpy简介numpy是python最为常用的库,没有之一,它表示Numeric Python,从名字也可以看出来,它被用来做数值计算,常与scipy配合使用。现在几乎各种应用场合都会用到numpy,主要有以下几个原因:numpy提供了很多数值计算和常用算法的函数numpy归功了很多线性代数的相关操作numpy的执行效率高首先导入numpy库import numpy as np...原创 2019-03-27 12:38:59 · 1430 阅读 · 0 评论