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
这个方法用的比较少,实际上就是显示出对象的原貌
。但是在实际排错的时候我还真用到过一回,对分析问题十分有帮助:
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这三个用的频率很高。
我这里总结了两篇相关的博客:
[sys.modulesname]与getattr一起使用的一个实例
type与isinstance
二者都是判断数据的类型的,但是有区别。关于type与isinstance的使用与区别请看我下面这两篇博客:
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']