一些python的记录
安装pip3
sudo apt update
sudo apt install python3-pip
pip更新到最新版本ImportError: cannot import name ‘main’
/usr/bin/pip改为
from pip._internal import main
setup.py的编译安装
python setup.py build
python setup.py install
linux的编译安装
linux编译安装中configure、make和make install各自的作用
- ./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。
- make是用来编译的,它从Makefile中读取指令,然后编译。
- make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
虚拟环境
linux下载
sudo apt install python-virtualenv
sudo easy_install virtualenvwrapper
或者
sudo pip install virtualenv
sudo pip install virtualenvwrapper
创建
mkvirtualenv 虚拟环境名称
mkvirtualenv -p python路径 虚拟环境名称
whereis python3
来确认python路径
环境变量
# 方法一临时使用
# 找到virtualenvwrapper的脚本文件
whereis virtualenvwrapper
# 进入该目录
cd /usr/local/python3/bin
# 执行脚本文件激活virtualenvwrapper
source virtualenvwrapper.sh
# 可以正常使用命令了
# 方法二添加至环境变量
# 方法一每次重启后都需要手动激活,不方便,将命令添加到环境变量
sudo vi ~/.bashrc
# 在末尾添加一行
source /usr/local/python3/bin/virtualenvwrapper.sh
# 保存后执行
source ~/.bashrc
# 现在可以正常使用命令了,且每次重启主机自动加载命令
进出、删除、查看
# 进入虚拟环境
workon [虚拟环境名称]
# 退出
deactivate
# 删除
rmvirtualenv [虚拟环境名称]
# 虚拟环境列表
pip list
pip freeze
在linux中查找python安装包的路径
~$ python -c "import pip;print(pip)"
<module 'pip' from '/usr/local/lib/python2.7/dist-packages/pip/__init__.pyc'>
统计list中各个元素出现的次数
a = [1, 2, 3, 1, 1, 2]
dict = {}
for key in a:
dict[key] = dict.get(key, 0) + 1
print dict
实现栈、队列
栈
# 后进先出
class Stack():
def __init__(self,size):
self.size=size
self.stack=[]
self.top=-1
def push(self,x): # 入栈之前检查栈是否已满
if self.isfull():
raise exception("stack is full")
else:
self.stack.append(x)
self.top=self.top+1
def pop(self): # 出栈之前检查栈是否为空
if self.isempty():
raise exception("stack is empty")
else:
self.top=self.top-1
self.stack.pop()
def isfull(self):
return self.top+1 == self.size
def isempty(self):
return self.top == '-1'
def showStack(self):
print(self.stack)
s=Stack(10)
for i in range(6):
s.push(i)
s.showStack()
for i in range(3):
s.pop()
s.showStack()
"""
类中有top属性,用来指示栈的存储情况,初始值为1,一旦插入一个元素,其值加1,利用top的值乐意判定栈是空还是满。
执行时先将0,1,2,3,4,5依次入栈,然后删除栈顶的前三个元素
"""
队列
# 先进先出
class Queue():
def __init__(self,size):
self.size=size
self.front=-1
self.rear=-1
self.queue=[]
def enqueue(self,ele): # 入队操作
if self.isfull():
raise exception("queue is full")
else:
self.queue.append(ele)
self.rear=self.rear+1
def dequeue(self): # 出队操作
if self.isempty():
raise exception("queue is empty")
else:
self.queue.pop(0)
self.front=self.front+1
def isfull(self):
return self.rear-self.front+1 == self.size
def isempty(self):
return self.front == self.rear
def showQueue(self):
print(self.queue)
q=Queue(10)
for i in range(6):
q.enqueue(i)
q.showQueue()
for i in range(3):
q.dequeue()
q.showQueue()
print(q.isempty())
"""
类中设置两个属性分别为front和rear来模拟队列的头尾指针,通过它们值的关系可以判定队列是空还是满
"""
时间类型转换
导图:幕布思维导图