python 常用方法记录

Python 打 whl 包

生成whl包命令:

        从终端进入相应的项目目录下,如 D:\Algorithm\lib;

        执行命令 python setup.py sdist bdist_wheel;

        执行完后会在目录中生成四个文件夹,whl文件在dist目录中

判断列表b是否存在于列表a: 

列表的交集

列表的并集

列表差集

合并python列表中的小列表:

注:使用sum(list, [])方法,有时会不好使

统计列表中制定元素数量:内置函数count() 的使用

字典反转的方法

26英文字母编号

letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# 构建字符索引 {0:'A', 1:'B'......} 
num_letter = dict(enumerate(list(letter))) 
# 键值对反转 {'A':0, 'B':1......} 
letter_num = dict(zip(num_letter.values(), num_letter.keys()))

列表元素按字母排序:

按字母顺序排序 sort(), 按字母排序,无法恢复到原来的排列顺序

>>> names.sort()
>>> names
['aodi', 'bigben', 'bmw']
>>> names
['aodi', 'bigben', 'bmw']

相反顺序排序 sort(reverse=True)

sort(reverse=True) 倒序排列 单词 reverse 意为相反

>>> name = ['congcong', 'yuxi', 'jinghua', 'lili']

>>> name.sort(reverse=True)

>>> print(name)

['yuxi', 'lili', 'jinghua', 'congcong']

临时顺序排列 sorted

sorted()临时顺序排列,可以恢复到原来的排列顺序, 倒序排列(reverse=True)同样适用

>>> names
['aodi', 'bmw', 'bigben']
>>> names=['bigben','bmw','aodi']
>>> sorted(names)
['aodi', 'bigben', 'bmw']
>>> names
['bigben', 'bmw', 'aodi']

使用完之后依旧可以再回复原来的顺序(临时顺序排列)

倒序打印 reserve()

>>> names=['bigben','bmw','aodi']
>>> names.reverse()
>>> names
['aodi', 'bmw', 'bigben']

删除列表中的空列表:

list2 = [x for x in list1 if x != []]
list2 = filter(None, list1)

删除所有空字符串,空元组,零:list2 = [x for x in list1 if x]

python中的defaultdict: 

from collections import defaultdict

使用普通的字典时,添加元素 dict[element] = value,调用:dict[element] = xxx,前提是element在字典里,如果不在字典里就会报错,此时可以使用 defaultdict,defaultdict 可接受一个工厂函数作为参数,如:list、set、str、dict,作用是当 key 不存在时返回工厂函数的默认值,如 list 对应[ ],str对应的是空字符串,set 对应set( ),int 对应0。

如果defaultdict 未给出工厂函数类型,则<class 'dict'> 处为 None。

将列表字符串转为列表

可使用 eval() 函数

>>> strs = "[1, 2, 3]"
>>> eval(strs)
[1, 2, 3]

python 类的 super() 方法

Python 中类初始化使用 __init__(),父类和子类的初始化方式都是__init__(),如果子类初始化时没有这个函数,则直接调用父类 __init__();如果子类指定了__init__(),则覆盖父类的初始化函数__init__(),如果想在进行子类的初始化的同时也继承父类的__init__(),要在子类中显示使用super() 调用父类的__init__()函数。


class Animal:  # 定义一个父类
    def __init__(self):  # 父类的初始化
        self.name = 'animal'
        self.role = 'parent'
        print('I am father')
 
class Dog(Animal):  # 继承 Animal 的子类
    def __init__(self):  # 子类的初始化函数,此时会覆盖父类Animal类的初始化函数
        super(Dog, self).__init__()  # 子类初始化同时继承父类,使用super(),self.name= 'animal'
        print('I am son')
        self.name = 'dog'  # 定义子类的name属性,并且会把刚才的self.name= 'animal'更新为'dog'

super(Dog,self) 可以写成super(),super(Dog,self).__init__() == Animal.__init__(self),

super(Dog,self) == Animal 返回当前类的继承顺序中针对多继承Dog后的一个类(即Animal)

self 和 super的区别:self 首先调用自己的方法或者属性,当自身没有目标属性或方法时,再去父类中寻找;super会直接去父类中寻找目标属性或方法。如上,self.name 返回’dog’,而super().name的返回值为’animal’;self时类,super是预编译指令。

Error:RuntimeWarning: invalid value encountered in greater

可能是在比较数字是遇到了 nan 值导致的报错。

RuntimeError: Set changed size during iteration

循环操作set()元素时可能会遇到上面的报错,可使用添加copy()方法解决

max获取字符串列表中最长的字符串

max(str, key=len)

内置函数 map

map():根据提供的函数对指定的序列做映射。

第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。

函数依次作用在list中的每一个元素上,得到一个新的list并返回;map不改变原list,返回新list。

map(lambda x, y: x+y, [1,3,5,7,9], [2,4,6,8,10])   # 多个序列情况

不传入function时,map() 等同于zip(),将多个列表相同位置的元素归并到一个元组:

map(None, [2,4,6], [3,2,1])

类型转换:map(int,(1,2,3))  # 将元组转换为list

                  map(int,'1234')  # 将字符串转换为list

提取字典中的key,并将结果放在一个list中,map(int,{1:2,2:3,3:4})

忽略告警输出的方法

import warnings

方法一: warnings.warn("deprecated", DeprecationWarning) 

                不添加DeprecationWarning是增加告警,

                添加DeprecationWarning是丢弃告警

方法二: warnings.filterwarnings("ignore")  # 忽略告警

方法三: warnings.simplefilter("ignore")   # 忽略告警

使用pickle保存和加载时报错‘TypeError: write() argument must be str, not bytes’:

Python中的__str__和__repr__

_str__:面向用户,用于显示;

__repr_:面向程序员,用于显示;

当输出一个类的实例时,如果__str__和__repr__都没有重写,则输出类地址;如果重写了,则输出方法返回值;如果两个方法都重写了,优先且只调用__str__方法;只重写一个方法,则会调用重写的方法;两个方法都要求返回值为字符串

class Human:
    def __init__(self, n):
        self.name = n
       
    def __str__(self):
        return str(self.name)   #这里的返回值必须为字符串

    def __repr__(self):
        return "2"        #返回值也必须为字符串

单星号*和双星号**

*:用于解序列或可迭代对象,将元素分配给函数的参数或在列表、元组等数据中拼接。

**:用于解包字典,将其键值对传递给函数的参数或在字典中进行拼接。

都可用于传递可变数量的参数或关键字参数,以及在数据结构中进行拼接操作。

# 迭代器示例
numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers)
first, *rest = iterator
print(first)  # 输出:1
print(rest)  # 输出:[2, 3, 4, 5]
# 生成器示例
def generate_numbers():
    yield from range(1, 6)
first, *rest = generate_numbers()
print(first)  # 输出:1
print(rest)  # 输出:[2, 3, 4, 5]

@property装饰器的作用

添加@property装饰器的函数,可作为类的属性调用,即不需要添加();

需要修改或删除属性时,需要使用setter和deleter方法。

参考:

Python中的*(星号)和**(双星号)完全详解_python **符号-CSDN博客

【python】 @property属性详解-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值