dir

dir方法可以查看对象的属性与方法:

class People(object):
    country = "China"

    def eating(self):
        pass

whw = People()

print(dir(whw))
"""
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'country', 'eating']
"""

repr

这个方法用的比较少,实际上就是显示出对象的原貌。但是在实际排错的时候我还真用到过一回,对分析问题十分有帮助:

json反序列化的时候字符串为单引号的一个坑

eval

将字符串类型的代码执行并返回结果:

print(eval('1+2+3+4'))
"""
10
"""

sorted

主要用来对list、dict排序。

Python提供了两个方法 对给定的List L进行排序,

方法1:用List的成员函数sort进行排序,在本地进行排序,不返回副本

方法2:用built-in函数sorted进行排序(从2.4开始),返回副本,原始输入不变

sorted(iterable, key=None, reverse=False)

参数说明:

iterable:是可迭代类型;

key:传入一个函数名,函数的参数是可迭代类型中的每一项,根据函数的返回值大小排序;

reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,有默认值。

返回值:有序列表

列表按照其中每一个值的绝对值排序

l1 = [1,3,5,-2,-4,-6]
l2 = sorted(l1,key=abs)
print(l1)
print(l2)
"""
[1, 3, 5, -2, -4, -6]
[1, -2, 3, -4, 5, -6]
"""

列表按照每一个元素的len排序

l = [[1,2],[3,4,5,6],(7,),'123']
print(sorted(l,key=len)) # [(7,), [1, 2], '123', [3, 4, 5, 6]]

注意:和sort的区别

l = [1,-4,6,5,-10]
l.sort(key = abs)   # 在原列表的基础上进行排序
print(l)

print(sorted(l,key=abs,reverse=True))      # 生成了一个新列表 不改变原列表 占内存
print(l)

l = ['   ',[1,2],'hello world']
new_l = sorted(l,key=len)
print(new_l)

结果:
[1, -4, 5, 6, -10]
[-10, 6, 5, -4, 1]
[1, -4, 5, 6, -10]
[[1, 2], '   ', 'hello world']

attr系列

attr系列说白了就是根据字符串去找Python对象(可以是类、对象、模块等)中有没有方法与之对应,通过字符串找到对应方法的内存地址然后进行操作。

getattr、setattr、hasattr这三个用的频率很高。

我这里总结了两篇相关的博客:

使用setattr控制脚本中打印是否执行

[sys.modulesname]与getattr一起使用的一个实例

type与isinstance

二者都是判断数据的类型的,但是有区别。关于type与isinstance的使用与区别请看我下面这两篇博客:

聊一聊isinstance与type

使用type在对象方法中调用类方法

map、zip、filter与reduce

虽然现在reduce不是内置函数而是放在了functools模块下,但是由于情怀吧~自己还是把它跟上面那几个常用的内置函数放在一起讲,大家直接看我的demo就好了:

# -*- coding:utf-8 -*-
'''### functools.reduce'''
from functools import reduce

r1 = reduce(lambda x,y:x+y,[1,2,3,4,5])
print(r1) # 15
r2 = reduce(lambda x,y:x*y,[1,2,3,4,5])
print(r2) # 120

'''### map'''
r3 = map(lambda x:x**2,[1,2,3])
print(r3,list(r3)) # <map object at 0x00000155BC0EBC50> [1, 4, 9]
print(list(r3)) # [] —— 取完一次就没得了!

'''### zip'''
r4 = zip((1,2,3),("wanghw","naruto","sasuke"))
print(r4,dict(r4)) # <zip object at 0x00000155BC0FAC88> {1: 'wanghw', 2: 'naruto', 3: 'sasuke'}
print(dict(r4)) # {} —— 取完一次就有没得了!
r5 = zip((4,5,6),("whw","naroo","sausu"))
print(r4,list(r5)) # <zip object at 0x00000155BC0FAC88> [(4, 'whw'), (5, 'naroo'), (6, 'sausu')]
print(list(r5)) # [] —— 取完一次就没得了!

'''### filter'''
r6 = filter(lambda x:x>2,[1,2,3,4,5])
print(r6,list(r6)) # <filter object at 0x0000022E538E1B38> [3, 4, 5]
print(list(r6)) # [] —— 取完一次就没得了!

map、zip、filter、sorted的几个进阶实例

列表、字典与内置函数结合的几个进阶操作

使用map实现与datetime模块实现日期递推

from datetime import datetime,timedelta


# date_end_time对应的是y_lst最后一个数对应的日期
# 需要得到一个日期列表date_lst中的每个日期值与y_lst中对应上
date_end_time = "2020-05-03"
y_lst = [1,2,43,44,55,66]

date_lst = list(map(lambda x:datetime.strftime(datetime.strptime(date_end_time,"%Y-%m-%d")-timedelta(days=x),"%Y-%m-%d"),range(len(y_lst)-1,-1,-1)))

print(date_lst)
# ['2020-04-28', '2020-04-29', '2020-04-30', '2020-05-01', '2020-05-02', '2020-05-03']