python小细节(会一直更新)

python中会用到的小的实用细节

Posted by 周自横 on February 13, 2020

迭代

使用for 遍历整个,称为迭代

判断是否能迭代,看返回结果

from collections import Iterable
isinstance(X Iterable)

lsit

删除指定使用的函数时pop(i),i为0 的时候删除的末尾,其余为索引位置

使用list.sort()排列

使用insert(位置,元素)插入到指定位置

使用str.split()可以直接创建列表

list+list生成的还是list

extend()直接在末尾添加元素,若是str将会分解,变成单字符作为元素,要是为整体的话需要参数为列表的形式

list.reverse()颠倒顺序重新排列

del list[2] 是按照索引删除

remove()删除,参数是元素

pop()方法进行索引删除

判断

是否在列表中: ‘a’ in list ‘a’ not in list

查看索引位置

list.index(‘a’) 第一次出现的 位置,默认为整个list

list.index(‘a’,0,3) 返回在切片中第一次出现的位置

元组

元组是初始化之后不能进行更改的,在元组元素只有一个的时候,初始化应

t = (1,)

加上逗号表明是元组,否则认为小括号是数学公式的小括号,使用,消除歧义

元组中的元素为其他类型的时候是可变的,比如底二个元素是list,list中的元素是可以变的

set

set是一组key值集合,不存储value的值,由于key不能重复,所以没有重复的key

set([X]),其中[X]是一个list

初始化使用的 是

s = set([1,2,3])

add(set专有),remove,以及逻辑运算

函数

str.format()的使用

该函数不再使用%进行替换而是使用的{}

若是多个参数的时候可以在{}中使用序号指定使用哪个参数

也可以给参数命名赋值,然后使用变量名指定使用哪个参数

在数字需要指定精度和类型的时候需要使用的是:比如{:.2f}

replace()方法 替换

str.replace(old,new[,max])#替换,max表示的是替换不能超过多少次

sort()排序

只能使用在list中的排序,list.sort(),在原来的list上进行改变

sorted()排序

N= sorted(X),所有可迭代类型都能使用,可以进行比较和调整排序,不改变原来

hash()哈希函数
hash(X)#返回对象的哈希值
count() 统计字符串中初选的次数

str.count(),能设置开始位置和结束位置

切片

切片是用:进行区间选择

生成器

generator称为生成器,用于列表元素若可推算,在循环过程中不断生成新的元素,节省空间,这是种一边计算一遍循环的机制

初始化只需要将列表生成器l = [x for i in range(5)],最外边改为()即可

打印元素只需要调用next(X)函数即可,同时它也属于可迭代对象

定义的另外一种方法就是若一个函数定义中包含关键字yield,则变成一个生成器

与函数流程不同的是。generator函数每次调用next()函数时执行,遇见yield语句返回,再次执行时从上次返回的yield语句处继续执行

直接赋值,浅拷贝,深拷贝

直接赋值是对象的引用,也可以看作是是别明

浅拷贝是拷贝父对象,不会拷贝对象的内部子对象

深拷贝是copy模块下的deepcopy方法,完全拷贝了父对象以及子对象

直接赋值:两个变量指向的是同一内存

浅拷贝:父类元素进行复制,但是若元素是一个子对象,其中一个元素是list,子对象指向的是同一内存

深拷贝:完全独立,拷贝了父对象以及子对象

#浅拷贝
a = [1,[2,3]]
b = a.copy()
a[1].append(5)
a = [1, [2, 3, 5]]
b = [1, [2, 3, 5]]
#深拷贝
a = [1, [2, 3, 5]]
import copy
c = copy.deepcopy(a)
a[1].append(4)
a = [1, [2, 3, 5, 4]]
c = [1, [2, 3, 5]]

虚拟环环境

python3 使用了venv进行创建

python3 -m venv venvname

激活使用

 source ~/venvname/bin/activate
 #或者
 source activate name

退出使用

deactivate
conda deactivate#conda环境下使用

zip内置函数

list = zip(a,b,c)#参数任意个

a,b,c是三个可迭代参数,a=[1,2,3]b=[4,5,6]c=[7,8,9]

zip将参数索引相同的部分组合成一个元组,然后整体输出一个列表

输出的结果是:

[(1,4,7),(2,5,8),(3,6,9)]

format输出字符格式化

{}中参数分别是{0:2f}

第一个是表示索引,之后的格式需要加上:,输出位数需要.n表示n位,最后f表示输出浮点数

多行注释

单行注释直接加#就可以,但是多行注释使用''',"""也需要按照正常缩进位置放置符号,否则会报错

isinstance函数

内置函数,判断一个对象是否为已知类型,与type作用类似,区别在于type认为子类不属于父类的一种

# object实例 classinfo 可以是直接或间接类名、基本类型或者由它们组成的元组 
isinstance(object, classinfo)