一、python不常用模块
1. bisect模块
参考:https://blog.csdn.net/u014120401/article/details/78808476
- bisect
bisect.bisect(seq, item, lo = 0, hi =len(list_name))
在有序列表 seq 中查找 item 的位置,并且返回其 索引 (index),使得插入item后序列依然保持有序
有两个可选参数 lo 和 hi 来缩小搜索范围,lo 的默认值为 0 ,hi 的默认值为序列的长度。
直接使用 insort 插入比先使用 bisect 再使用 insert 速度更快
>>> import bisect
>>> a = [3,4,6,7,9]
>>> b = bisect.bisect(a,8)
>>> b
4
>>> a.insert(b,8)
>>> b = bisect.bisect(a,8.0)
>>> b
5
>>> a.insert(b,8.0)
>>> a
[3, 4, 6, 7, 8, 8.0, 9]
>>> b = bisect.bisect_left(a,7.0)
>>> a.insert(b,7.0)
>>> a
[3, 4, 6, 7.0, 7, 8, 8.0, 9]
bisect 函数是 bisect_right 函数的别名,返回的索引是原序列相等元素之后的位置,即新元素插入在旧元素的右边
bisect_left 函数返回的索引是原序列中相等元素的位置,新元素插入在旧元素的左边
- insort
insort(seq, item, lo, hi) 把变量 item 插入到序列 seq 中,并保持 seq 升序
>>> a
[3, 4, 6, 6.0, 7.0, 7, 8, 8.0, 9]
>>> bisect.insort_left(a,3.0)
>>> a
[3.0, 3, 4, 6, 6.0, 7.0, 7, 8, 8.0, 9]
2. heapq模块
https://www.jianshu.com/p/e003872fa7b9
import heapq
heap = []
n = 9
heapq.heappush(heap, n) # 把n放入到heap堆中
heapq.heappop(heap) # pop出heap堆中最小的元素
print(heapq[0]) # 输出heap堆中最小的元素
3. dict初始化方法
>>> dict(a=1, b=2)
>>> {'a': 1, 'b': 2}
4. collections.defaultdict
二、python易忽略语法
1. 导入自己写的文件夹下的py文件
import sys
sys.path.append('./ch6/')
import ***
- 此时已经进入 到当前文件夹
'./ch6/'
下,可以直接导入该文件夹下的***.py文件
2. @staticmethod
https://www.runoob.com/python/python-func-staticmethod.html
一个例子就明白~
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class C(object):
@staticmethod
def f():
print('runoob');
C.f(); # 静态方法无需实例化
cobj = C()
cobj.f() # 也可以实例化后调用
- 以及与classmethod的区别
https://blog.csdn.net/handsomekang/article/details/9615239
3. 知晓python中的标识符
import keyword
print(keyword.kwlist)
4. subprocess的shell为False的命令
cmd = [‘python3.7’, ‘main.py’]
subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE)
三、python面向对象
1. 魔法方法对应的显式调用
https://www.liujiangblog.com/course/python/47
四、疑难杂症
1. pycharm中模块安装失败的解决办法
- 错误1:ReadTimeoutError
解决方案:cmd中执行:
pip --default-timeout=100 install ***
- 错误2:Pycharm安装失败
解决方案:cmd中执行:
python -m pip install -U pip
pip install ***
- 错误3:Pycharm中安装失败2
解决方案:装库时勾选下面的按钮
2. python3.7解决ModuleNotFoundError: No module named ‘_bz2’
看了一堆些常见的解决教程,都不好用,后来看了了stackflow发现了问题:
https://stackoverflow.com/questions/12806122/missing-python-bz2-module
linux下使用官方source release安装会出现这个问题,而apt-get之类的则不会。
由于缺少root权限,也没有yum可以用,所以好多方法都不好用。直到看到这篇:
Linux下非Root用户解决ImportError: No module named bz2
说白了少个文件,它不一定叫bz2.so,但是大概是lib-dynload文件下的含有bz2的so文件,复制到自己的python的同名文件夹下就好了。
路径全称:/usr/local/python3.7.5/lib/python3.7/lib-dynload/
我找到的文件叫:_bz2.cpython-35m-x86_64-linux-gnu.so
里面-35m是版本对应的,也必须改,例如:我的python3.7版本就直接重命名-37m。
————————————————
版权声明:本文为CSDN博主「子曰小玖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wxh0000mm/article/details/96318779
3. 报错信息:/usr/bin/python: error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory
解决方案:
which python
ldd /usr/bin/python
find / -name “libpython3.7m.so.1.0” 找到路径:/usr/local/lib/libpython3.7m.so.1.0
/etc/ld.so.conf.d目录,创建文件python3.conf,加入这个库所在的路径/usr/local/lib
ldconfig