读书笔记 《跟老齐学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