内置函数作业:
#1,默写map和filter: def pow(x): return x*x l = [1,2,3,4,5] print(map(pow,l)) print(list(map(pow,l))) def is_odd(x): return x%2==1 l = [1,2,3,4,5] print(list(filter(is_odd,l))) #2,整理内置函数的思维导图,和博客,标注红色和黄色的必须都会 # 3.用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb name = ['alex','wupeiqi','yuanhao','nezha'] ret = map(lambda x:x+'_sb',name) for i in ret: print(i) print(i) #结果为 'nezha_sb'因为for循环运行完了,i对应最后一个值 print(list(ret)) #结果为[],因为ret作为一个迭代器,此时已经被for循环取完值了,已经取不到值了,故为空 # 4.用filter函数处理数字列表,将列表中所有的偶数筛选出来 num = [1,3,5,6,7,8] ret = list(filter(lambda x:x%2==0,num)) print(ret) # 5.随意写一个20行以上的文件 # 运行程序,先将内容读到内存中,用列表存储。 # 接收用户输入页码,每页5条,仅输出当页的内容 # with open('somewhere',encoding='utf-8') as f: # data = f.readlines() # pages,mod = divmod(len(data),5) # page_num = int(input('你想看第几页:')) # if mod: # pages +=1 # if page_num > pages or page_num < 0: # print('input wrong page') # elif page_num == pages and mod != 0: # for i in mod: # print(data[(page_num-1)*5+i].strip()) # else: # for i in range(5): # print(data[(page_num - 1) * 5 + i].strip()) # 6.如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格 portfolio = [ {'name': 'IBM', 'shares': 100, 'price': 91.1}, {'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}, {'name': 'YHOO', 'shares': 45, 'price': 16.35}, {'name': 'ACME', 'shares': 75, 'price': 115.65} ] # 6.1.计算购买每支股票的总价 ret = map(lambda dic:{dic['name']:round(dic['shares']*dic['price'],2)},portfolio) print(list(ret)) # 6.2.用filter过滤出,单价大于100的股票有哪些 res = filter(lambda dic:dic['price']>100,portfolio) print(list(res))
内置函数补充:
1,和作用域相关的: locals():以字典形式返回本地所有的局部变量 如果是在函数内部打印,那么函数内部所有的变量就会以 key value的形式打印出来
golbals():以字典形式返回全局所有的变量
2,迭代器/生成器相关的: range() iter() next()
3.其他12个
dir() 查看内置属性
callable() 只要能 后面加括号的都能调用,比如print,golbals, a = 1,此处a就不能调用
help() 类似dir,查看方法名字及用法 import import time 相当于 time = __import('time')_
oper() 返回文件句柄
id() 返回内存地址
hash() 对于可哈希的数据类型,转换为哈希值,数字的哈希值是它本身, 列表,字典这种可变的没哈希值 对于相同可hash数据的hash值在一次程序的执行过程中总是不变的,而且它的哈希值固定那么长 所以对于一些很长的字符串,可以替换为它的哈希值 字典的寻址方式,把key的哈希值返回的内存地址,让value指向它,
input()
print()
print('我们的祖国是花园',end='')
print('我们的祖国是花园',end='') #默认结尾是\n,现在让结尾为空,
print(1,2,3,4,sep='|') #默认sep是空格,现在让sep是| 打印出来为 1|2|3|4
f = open('file','w') print('aaaa',file=f) f.close() >>>>>>>>>>>则此时print不输出到屏幕,会写入到 file这个文件里 #打印进度条
flush:立即把内容输出到流文件,不做缓存
eval() eval('1+2+3+4') 输出10 有返回值
exec() eval('1+2+3+4') 输出None 因为它没有返回值,执行了没结果 eval和exec都可以执行字符串类型的代码,但是eval有返回值,exec没有 注意!!eval谨慎使用,只能用在你明确知道你要执行的代码是什么, 或者实在没办法,用了比较方便。因为不安全,很容易被攻击 只要攻击者修改你要eval的内容,程序就会崩溃
eval:适合有结果的简单运算 exec: 简单流程控制 code = for i in range(10): print(i*'*') ''' exec(code)
compile()~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
` code1 = 'for i in range(0,10): print (i)' compile1 = compile(code1,'','exec') exec(compile1) code2 = '1 + 2 + 3 + 4' compile2 = compile(code2,'','eval') print(eval(compile2)) code3 = 'name = input("please input your name:")' compile3 = compile(code3,'','single') exec(compile3) #执行时显示交互命令,提示输入 print(name) name #执行后name变量有值 "'pythoner'" compile()~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
divmod(数1,数2) 除余
round(float,精确位数) 精确值
pow(数1,数2,数3) 数1的数2次方 幂运算 , 数3是取余,默认为空
sum(iterable,start) start([1,2],10) 输出13 从10开始,加上iterable里的和
min(1,2,3,-4,key=abs) 可以加方法 输出为1
max(1,2,3,-4,key=abs) 可以加方法 输出为-4 因为abs为绝对值,原值为-4
继楼上的内置函数补充 reversed(): l = [1,2,3,4,5] 用l.reverse()会把原列表反转 l2 = reversed(1) 保留原列表,返回一个反向的迭代器 slice: sli = slice(1,5,2),,, l[sli] == l[1:5:2] bytes 转换成bytes类型 >>> bytes('你好',encoding='utf-8') b'\xe4\xbd\xa0\xe5\xa5\xbd' bytearray:可以修改字符串,但是前提要知道字符串的每个字符对应的索引,即列表的index 通过修改二进制字符,达到节省内存的作用 ord('好') #22909 转换Unicode为数字 ord('a') #97 chr(22909) #'好' 转换数字为unicode ascii 用法同ord,不过 只要是ASCII码中的内容,就打印出来,不是就转换成\u repr(): print(repr(1)) 结果为1 print(repr('1')) 结果为 '1' 把数据类型打印出来 '你好%r'%name 结果一样,此处%r就是用到了repr filter(func,iterable) 注意此处func是内存地址 #返回为一个iterator def is_odd(x): return x%2==1 ret = filter(is_odd,[1,4,2,453,9,6,8]) for i in ret: print(i) >>>1,453,9 相当于列表推导式: [i for i in [1,4,2,453,9,6,8] if i%2==1] map() Python中的map函数应用于每一个可迭代的项,返回的是一个结果list。 如果有其他的可迭代参数传进来, map函数则会把每一个参数都以相应的处理函数进行迭代处理。 map()函数接收两个参数,一个是函数,一个是序列, map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。 有一个list, L = [1,2,3,4,5,6,7,8], 我们要将f(x)=x^2作用于这个list上, 那么我们可以使用map函数处理。 L = [1,2,3,4,] def pow2(x): return x*x map(pow2,L) #>>>>[1, 4, 9, 16] sorted(): print(sorted(l,key=abs,reverse=True)) # 生成了一个新列表 不改变原列表 占内存 print(l) # list.sort() 是在原列表上排序 l = [' ',[1,2],'hello world'] new_l = sorted(l,key=len) print(new_l)