环境配置
conda
Conda自动补全
在终端激活conda环境的时候按tab不能自动补全activate和环境名。安装后可用tab进行补全。
安装 conda-bash-completion 插件:GitHub
安装方法:
conda install -c conda-forge conda-bash-completion
常用命令
#创建虚拟环境
conda create -n your_env_name python=X.X(3.6、3.7等)
#激活虚拟环境
conda activate your_env_name(虚拟环境名称)
#退出虚拟环境
conda deactivate your_env_name(虚拟环境名称)
#删除虚拟环境
conda remove -n your_env_name(虚拟环境名称) --all
#添加 python 模块
conda install [module]
#查看安装了哪些包
conda list
#查看当前存在哪些虚拟环境
conda env list
#检查更新当前conda
conda update conda
#更新anaconda
conda update anaconda
#更新所有库
conda update --all
#更新python
conda update python
pip
换源
Python使用pip作为依赖管理工具,很多时候,我们在安装依赖的时候,会出现无法访问网络,这是因为我们的网络被墙了,需要完成以下配置
方式一
- 运行以下命令,配置pip全局使用华为云的镜像下载依赖
pip config set global.index-url "http://mirrors.tools.huawei.com/pypi/simple"
- 运行以下命令,配置上述局点为可信局点
pip config set global.trusted-host "mirrors.tools.huawei.com"
方式二
pip/pip3用于python软件模块下载,通过~/.pip/pip.conf
文件配置,如果没有这个目录和文件,可以生成一个进行设置,如下
mkdir ~/.pip
vim ~/.pip/pip.conf
填入以下内容:
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com
之后更新
pip install update
这样就切换成国内源了,安装时速度非常快。
其它的源设置类似,只需要修改服务器即可,如清华源等:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
语法
在Python中,**
是一个双星号操作符,也称为指数运算符或幂运算符。它用于计算一个数的指数或幂,例如:2的3次方可以用2**3
表示,结果为8。
除了计算指数,还可以用于解包操作。当在函数调用时使用字典时,它会将一个字典或关键字参数的集合解包成独立的参数。例如:
def foo(a, b, c):print(a, b, c)params = {'a': 1, 'b': 2, 'c': 3}
foo(**params) # 等价于 foo(a=1, b=2, c=3)
在这个例子中,使用双星号将字典 params 解包成独立的关键字参数传递给函数 foo。在函数调用中,**params
等价于 a=1, b=2, c=3
。
另外,单个星号*
也有类似的作用,但它是用于将可迭代对象解包成单独的参数,例如:
numbers = [1, 2, 3]
print(*numbers) # 等价于 print(1, 2, 3)
在这个例子中,使用单星号将列表 numbers 解包成独立的位置参数传递给函数 print。在函数调用中,*numbers
等价于 1, 2, 3
。
内置函数
getattr
描述
getattr() 函数用于返回一个对象属性值。
语法
getattr(object, name[, default])
参数
- object – 对象。
- name – 字符串,对象属性。
- default – 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
返回值
返回对象属性值。
__import__
描述
__import__()
函数用于动态加载类和函数 。
如果一个模块经常变化就可以使用 __import__()
来动态载入。
语法
__import__(name[, globals[, locals[, fromlist[, level]]]])
参数
- name – 模块名
返回值
返回元组列表。
__import__(package.module)
相当于from package import module
,如果fromlist
不传入值,则返回package
对应的模块,如果fromlist
传入值,则返回package.module
对应的模块。
iter
使用iter()
函数可以将可迭代对象转换为迭代器。
可迭代对象是指实现了__iter__()
或__getitem__()
方法的对象。对于一个可迭代对象,可以通过调用它的迭代器来依次获取其中的元素,直到所有元素都被访问完毕。
而迭代器是一种特殊的对象,能够记忆遍历的位置,并且可以按需产生下一个值,直到没有值可以生成时抛出StopIteration异常。迭代器还实现了__next__()
方法,每次调用该方法可以返回下一个元素的值。因此,在Python中,许多内置函数(例如for
循环和zip()
函数)都是基于迭代器工作的。
next
next()
函数是 Python 中的内置函数,它允许您不断从迭代器中取出下一个元素。其语法如下:
next(iterator[, default])
参数说明:
- iterator:必需,表示要获取下一个元素的迭代器对象。
- default:可选,如果迭代器已到达末尾,该值将返回,默认为 None。
基本上,它用于检索序列(例如列表、元组、集合等)的下一个元素,直到所有的元素都被迭代完为止。
在调用 next()
时,它会返回迭代器中的下一个条目,并将迭代器移动到下一个项目。每次调用 next()
函数时,它都将返回下一个条目,直到没有更多的元素,并引发 StopIteration 异常。
super
super()函数的作用:
- 在子类中调用父类的方法实现代码复用
- 不需要硬编码父类的名字,使继承关系更灵活
- 根据方法解析顺序(MRO)动态确定调用的父类
super()的主要场景:
-
单继承
这里super()就是父类的引用,可以避免重复命名父类 -
多继承
super()会根据MRO调用正确的父类,不会像直接调用被覆盖 -
协作多继承
通过只调用部分父类的super(),实现协作式继承
super()的实现机制:
- 会根据调用环境动态绑定父类
- 是通过
__class__
和__thisclass__
确定的 - 最终会调用父类的
__getattribute__
方法
super()需要注意:
- 只能在新式类中使用,旧式类会报错
- 在Python2中调用有些差异,需要使用super(Class, self)
- 不可实例化,是个只能调用的对象
Python中方法解析顺序(Method Resolution Order, MRO)的概念。
MRO是多重继承场景下,用于确定方法调用顺序的一套规则。主要原则是:
- 子类会先调用
- 广度优先,左到右顺序调用
- 避免重复调用(C3算法)
with语句
with所求值的对象必须有一个__enter__()
方法,一个__exit__()
方法。
紧跟with后面的语句被求值后,返回对象的__enter__()
方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()
方法。
super() 是python 中调用父类(超类)的一种方法,在子类中可以通过super()方法来调用父类的方法。【超类: 是指 2层以上的继承关系,假如 C类继承B类,B类由继承A类,那么A类就是C类的超类】
匿名函数
Lambda函数也被称为匿名函数,通常是一个表达式,而不是单个语句。可以使用Lambda定义简单的单行函数,并将其作为参数传递给某些函数。
Lambda函数通过lambda关键字创建,它的一般格式如下:
lambda arguments: expression
其中,arguments表示函数的参数列表,expression则表示函数的返回值。例如以下代码:
lambda x: x*2
表示一个以x为参数并返回x乘以2的匿名函数。
通常情况下,Lambda函数与高阶函数(Higher-order functions)一起使用。高阶函数指的是能够接收函数作为参数和/或返回函数的函数。
Lambda函数可以替代其他函数引用。假设要编写一个将两个数相加的函数,可以使用Lambda函数作为输入:
add = lambda x, y: x + y
print(add(2, 3)) # 5
Lambda函数可以非常方便地与Python中map()
, filter()
和reduce()
函数组合使用,将函数映射到一组输入上,并基于规则筛选这些输入。例如:
Map():
my_list = [1, 2, 3, 4, 5]
result = list(map(lambda x: x ** 2, my_list))
print(result) # [1, 4, 9, 16, 25]
以上代码将一个Lambda函数与Python的map()函数一起使用,对列表中的每个元素进行了平方运算。
Filter():
my_list = [1, 2, 3, 4, 5]
result = list(filter(lambda x: x % 2 == 0, my_list))
print(result) # [2, 4]
以上代码将Lambda函数与Python的filter()函数一起使用,可以在列表中过滤出所有的偶数。
Reduce():
from functools import reducemy_list = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x + y, my_list)
print(result) # 15
以上代码将Lambda函数与Python的reduce()
函数一起使用,计算列表中所有数字的和。
总之,Lambda函数是一种非常强大的工具,可以轻松创建简单的函数并与其他函数一起使用,方便编写更加复杂的程序。
matplotlib
matplotlib.pyplot.subplots
函数用于创建一个新的图形,并在该图形上创建一个或多个子图,也称为子区域。下面是该函数的语法:
matplotlib.pyplot.subplots(nrows=1, ncols=1, **kwargs)
参数说明:
- nrows: 子图的行数,默认值为1
- ncols: 子图的列数,默认值为1
- sharex: 共享x轴,默认为False
- sharey: 共享y轴,默认为False
- squeeze: 如果设置为True,子图数组的形状将自动调整以删除任何单元格,其中没有轴绘制
- subplot_kw: 用于添加子图时传递给 add_subplot() 的字典参数
- gridspec_kw: 用于创建子图网格的参数字典
返回值:
- fig: 图形对象
- axes: 子图对象,一个numpy数组对象,其形状为 (nrows, ncols)
add_subplot
方法是Figure对象的一个成员方法,用于向指定的图形对象中添加一个子图,该方法有以下参数:
add_subplot(nrows, ncols, index, **kwargs)
参数说明:
- nrows: 子图的行数
- ncols: 子图的列数
- index: 子图的位置
- **kwargs: 其他可选参数,用于设置子图的属性,例如标题、坐标轴范围等
返回值:
- ax: 子图对象
例如,以下代码创建了一个2x2的子图,其中第一个子图位于第一行第一列,第二个子图位于第一行第二列,第三个子图位于第二行第一列,第四个子图位于第二行第二列。
import matplotlib.pyplot as plt
fig, axs = plt.subplots(nrows=2, ncols=2)
axs[0, 0].plot([1, 2, 3, 4], [1, 4, 2, 3])
axs[0, 0].set_title('Subplot 1')
axs[0, 1].plot([1, 2, 3, 4], [1, 4, 2, 3])
axs[0, 1].set_title('Subplot 2')
axs[1, 0].plot([1, 2, 3, 4], [1, 4, 2, 3])
axs[1, 0].set_title('Subplot 3')
axs[1, 1].plot([1, 2, 3, 4], [1, 4, 2, 3])
axs[1, 1].set_title('Subplot 4')
plt.show()
该代码创建了一个包含四个子图的2x2网格,每个子图都绘制了一条简单的线,并设置了一个标题。