读书笔记 《跟老齐学python》

python帮忙解决了大整数溢出问题,但浮点数和整数不同,存在溢出问题

对于需要非常精确的情况,可以使用decimal、numpy

内建四舍五入函数:round

math.pow(x,y) 和x**y是一样的

所谓转义就是不采用符号本来的含义

r"c:\new" 由r开头引起的字符串都是原始字符串,不会被当做转义字符

input得到的是字符串类型(通过键盘输入的都是字符串)

字符串格式化推荐用format

判断字符串是否全是字母组成:"python".isalpha()

字符和数字的转换:ord chr

list.pop(3)的参数是索引,list.remove('python')的参数是元素

多维列表:lst=[[1,2,3,4],[5,6,7,8]]
print(lst[1][2])

aa='hello,I am zcy,30 years old'
print(aa.split(',',1)) #只分隔1次
['hello', 'I am zcy,30 years old']

aa='hello      me'
print(aa.split()) # ['hello', 'me']
print(aa.split(' ')) #['hello', '', '', '', '', '', 'me']

 

元组比列表快,可以作为字典的key,可以通过tuple(lst)将列表转为元组
集合中的元素要是可哈希的(即是不可变的)

d={}
d.setdefault('name','zcy')
print(d) # {'name': 'zcy'}
print(d.pop('name1','gc')) # gc

set.remove() 没有会报错;set.discard()没有不会报错

判断集合A是否是集合B的子集,可以使用A<B或A.issubset(B)

集合A B的对称差集:a.symmetric_difference(b)

with open('sdf','r') as f:
    data=f.read(12)  #读取12个字符

with open('sdf','r') as f:
    for line in f: #没全部加载到内存
        pass

with open('sdf','r') as f:
    for line in f.readlines():# 已全部加载到内存
        pass

f.tell() #当前位置
f.seek(offset,whence) #偏移到某个位置

列表推到:同时遍历两个list
list_a = [1, 2, 3, 4]
list_b = [2, 3, 4, 5]
common_num = [a for a in list_a for b in list_b if a == b]
print(common_num) # [2, 3, 4]
找出100内能整除3的数
print(list(range(3,100,3)))

while ---else  或 for ---else :若没有通过break退出循环,则会进入else

 

函数的参数可以写成这样:def tst(x,*args,y=2,**kwargs):

 

闭包的使用类似于先创建一个类,然后实例化此类。(闭包可以先预设一些变量的值,然后反复使用)

计算两个list的和
list_a = [1, 2, 3, 4]
list_b = [2, 3, 4, 5,6]
print(list(map(lambda x,y:x+y,list_a,list_b)))
doct=[(1,2),(4,5),(7,8)]
x,y=zip(*doct)
print(x)  #(1, 4, 7)
print(y) #(2, 5, 8)

data=[(1,2,3),(4,5,6),(7,8,9)]
x,y,z = zip(*data) #同时遍历几个list就要有几个变量来接收返回值
print(x,y,z) (1, 4, 7) (2, 5, 8) (3, 6, 9)

lambda可以接收多个参数,但只有一个返回值。lambda包含的表达式不能超过一个
lambda arg1,arg2,...:expression using arguments

1、对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],使用lambda函数从小到大排序
foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4]
k=sorted(foo,key=lambda x:x)

2、使用lambda函数对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],输出结果为
[0,2,4,8,8,9,-2,-4,-4,-5,-20],正数从小到大,负数从大到小

foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4]
k=sorted(foo,key=lambda x:(x<0,abs(x))

 

#同时对数据进行转换和计算,用生成器效率更高
aa=sum((i * i for i in range(1, 100))) #将方括号换成圆括号后,我们将列表推导变成了生成器表达式
d=[{"name":'zcy',"age":18},{"name":'zcy1',"age":16},{"name":'zcy2',"age":19}]
bb=min((i['age'] for i  in d))
两个列表变字典
students = ["Peter", "Julia", "Alex"] marks = [84, 65, 77] dictionary = dict(zip(students, marks))
friends = ['Team 1', 'Team 2']
ret=list(itertools.combinations(friends, r=2))  #组合 [('Team 1', 'Team 2')]
print(ret)
ret=list(itertools.permutations(friends, r=2)) #排列 [('Team 1', 'Team 2'), ('Team 2', 'Team 1')]
print(ret)

__init__函数第一个参数必须是self,且不能有返回值

类属性是不可变对象时,则类属性不因实例属性而变化,类属性能够影响实例属性
类属性是可变对象时,则类属性和实例属性互相影响

对于多重继承,继承的属性和方法按广度优先的顺序在父类中查找

python中私有化的方法是在名字前面加双下划线

《python入门经典》中对定制类讲的非常详细(特殊方法)

except后面有多个参数时,要用圆括号括起来

可以利用heapq.heapify([])直接将列表变为堆
aa=[1,3,53,45,66,3,9]
heapq.heapify(aa)
print(aa) # [1, 3, 3, 45, 66, 53, 9]


import time
print(time.time()) #时间戳
print(time.localtime()) #时间元组
print(time.gmtime()) #格林时间,即UTC时间

from datetime import date
t=date.today()
print(t) # 2020-02-17
print(t.year) #2020
print(t.month)# 02

 

posted on 2020-02-15 19:19  我和你并没有不同  阅读(178)  评论(0编辑  收藏  举报