1、用map来处理字符串列表

python函数(6):内置函数和匿名函数,python函数

我们学了这么多关于函数的知识基本都是自己定义自己使用,那么我们之前用的一些函数并不是我们自己定义的比如说print(),len(),type()等等,它们是哪来的呢?

 预习:

图片 11、用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb
name=[‘alex’,’wupeiqi’,’yuanhao’,’nezha’]
2、用filter函数处理数字列表,将列表中所有的偶数筛选出来 num =
[1,3,5,6,7,8]
3、随意写一个20行以上的文件,运行程序,先将内容读到内存中,用列表存储。
接收用户输入页码,每页5条,仅输出当页的内容
4、如下,每个小字典的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} ] 1.计算购买每支股票的总价
2.用filter过滤出,单价大于100的股票有哪些 预习题

 

一、内置函数

由python内部定义好我们可以直接调用的函数就叫内部函数。python一共给我们68个内置函数:

abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import__()
complex() hasattr() max() round()  
delattr() hash() memoryview() set()  

上面就是内置函数的表,68个函数都在这儿了。我标注的红色在前面经常出现大家比较熟悉。这个表的顺序是按照首字母的排列顺序来的,你会发现都混乱的堆在一起。比如,oct和bin和hex都是做进制换算的,但是却被写在了三个地方。。。这样非常不利于大家归纳和学习。那我把这些函数分成了7大类。有助于大家总结和记忆。

内置函数思维导图:

图片 2

 

思维导图详细地址:

密码:91K8

其中在七个分类中有详细分类。中标注红色为必须掌握,黄色为重点掌握,其他的作为了解。


 

二、内置函数部分详解

1、作用域相关(locals,globals)

基于字典的形式获取局部变量和全局变量

globals()——获取全局变量的字典

locals()——获取执行本方法所在命名空间内的局部变量的字典

图片 3def
func(): x = 1 y = 2 print(locals()) #打印局部作用域中的名字
print(globals()) #打印全局作用域中的名字 View Code

2、其他

图片 4s =
input(“请输入内容 : “) #输入的内容赋值给s变量 print(s)
#输入什么打印什么。数据类型是str input输入
图片 5def
print(self, *args, sep=’ ‘, end=’\n’, file=None): # known special
case of print “”” print(value, …, sep=’ ‘, end=’\n’, file=sys.stdout,
flush=False) file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件 sep:
打印多个值之间的分隔符,默认为空格 end: 每一次打印的结尾,默认为换行符
flush: 立即把内容输出到流文件,不作缓存 “”” print输出源码剖析
图片 6import
time import sys for i in range(0,101,2): time.sleep(0.1) char_num =
i//2 #打印多少个# per_str = ‘%s%% : %s\n’ % (i, ‘*’ * char_num)
if i == 100 else ‘\r%s%% : %s’%(i,’*’*char_num)
print(per_str,end=”, file=sys.stdout, flush=True) 进度条(了解)

3、数据类型相关

图片 7num = 123
num1 = [1,2,3] num2 = “hello” type(num,num1,num2) #返回变量的数据类型
type

4、内存相关

id(o) o是参数,返回一个变量的内存地址

hash(o)
o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。

图片 8t =
(1,2,3) l = [1,2,3] print(hash(t)) #可hash print(hash(l)) #会报错
”’ 结果: TypeError: unhashable type: ‘list’ ”’ hash实例

hash函数会根据一个内部的算法对当前可hash变量进行处理,返回一个int数字。

*每一次执行程序,内容相同的变量hash值在这一次执行过程中不会发生改变。

5、文件操作相关 

open()  打开一个文件,返回一个文件操作符(文件句柄)

操作文件的模式有r,w,a,r+,w+,a+
共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+)

可以用encoding指定编码

图片 9open()
r,w,a,r+,w+,a+,(都可以+b) f = open(‘tmp’,’r+’) print(f.read(3))
f.seek(5) f.write(‘ccccccc’) #不要一边写一边读 f.close() r+打开文件
如果直接写 从头覆盖 如果读了再写 追加 如果seek指定了光标的位置
就在从该位置开始覆盖着写 open

6、模块操作相关

import time #导入time模块

7、帮助方法

在控制台执行help()进入帮助模式。可以随意输入变量或者变量的类型。输入q退出

或者直接执行help(o),o是参数,查看和变量o有关的操作。。。

8、和调用相关

图片 10def
func():pass print(callable(func)) #参数是函数名,可调用,返回True
print(callable(123)) #参数是数字,不可调用,返回False 判断是否调用

9、查看参数所属类型的所有内置方法

dir()
默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量

图片 11print(dir(list))
#查看列表的内置方法 print(dir(int)) #查看整数的内置方法 查看内置方法

10、str类型代码的执行

图片 12print(123)
“print(456)” #字符串 eval(“print(456)”)
#字符串->转换成python代码去执行 exec(“print(789)”) num = 1+2+3 num =
eval(“1+2+3”) #执行 print(num) num2 = exec(“4+5+6”) #执行,没有返回值
print(num2) View Code

11、和数字相关

数字——数据类型相关:bool,int,float,complex

数字——进制转换相关:bin,oct,hex

数字——数学运算:abs,divmod,min,max,sum,round,pow

图片 13#绝对值
print(abs(-12)) #返回(除,余) print(divmod(7,4)) #最小值 最大值
print(min(1,2,3,4)) print(max(1,2,3,4)) #求和 print(sum((1,2,3,4)))
#print(sum(1,2,3,4))这个报错因为不是序列 print(sum([1,2,3,4]))
print(sum((1,2,3,4))) #小数精确 print(round(3.14159,1))
print(round(3.14159,2)) print(round(3.14159,3)) #冥运算 print(pow(2,4))
print(2**4) 数学运算

12、和数据结构相关

序列——字符串相关的:str,format,bytes,bytesarry,memoryview,ord,chr,ascii,repr

图片 14#位置
print(format(‘test’, ‘<20’)) print(format(‘test’, ‘>40’))
print(format(‘test’, ‘^40′)) #字符编码的转换 s = “你好” sb =
bytes(s,encoding=’utf-8’) print(sb) ret = sb.decode(‘utf-8’) print(ret)
#格式化输出 print(repr(‘1234’)) print(repr(1234)) 字符串相关

序列:reversed,slice

图片 15#倒叙 l =
[1,2,3,4] print(list(reversed(l))) reversed

数据集合——字典和集合:dict,set,frozenset

数据集合:len,sorted,enumerate,all,any,zip,filter,map

图片 16#直接改变原列表
l = [1,3,5,-2,-4,-6] l.sort() print(l) #生成新列表 原列表不变 l2 =
[1,3,5,-2,-4,-6] print(sorted(l2,key=abs,reverse=True))
print(sorted(l2)) print(l2) #为每次取值加序号 l = [‘a’,’b’] for i,j
in enumerate(l,1): print(i,j) #all判断全有 any判断有
print(all([1,2,3])) print(all([0,2,3])) print(any([0,1,0]))
print(any([0,0,0])) #配对 l = [1,2,3] #3 l2 = {‘k’:’v’} #1
print(zip(l,l2)) print(list(zip(l,l2))) #返回奇数 def is_odd(x):
return x % 2 == 1 filter(is_odd, [1, 4, 6, 7, 9, 12, 17]) #返回平方
L = [1,2,3,4,] def pow2(x): return x*x map(pow2,L)
#之前用过很多次就不再细说 数据集合


 

三、匿名函数

匿名函数 简单的需要用函数去解决的问题 匿名函数的函数体 只有一行

也叫lambda表达式

图片 17#这段代码
def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda
n:n**n print(calc(10)) 匿名函数

图片 18

图片 19#函数名 =
lambda 参数 :返回值 #参数可以有多个,用逗号隔开
#匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
#返回值和正常的函数一样可以是任意数据类型 匿名函数格式

小练习:

图片 20l =
[10,11,8,12] # def func(x): # return x>10 #
print(list(filter(func,l))) print(list(filter(lambda x:x>10,l))) l =
[1,2,3,4] # def pow2(x): # return x*x # map(pow2,l)
print(list(map(lambda x:x*x , l))) dic={‘k1′:10,’k2′:100,’k3’:30}
print(max(dic)) func = lambda k:dic[k] print(max(dic,key = func))
print(max(dic,key = lambda k:dic[k])) 匿名函数练习

 

预习答案:

图片 21#1、题
name=[‘alex’,’wupeiqi’,’yuanhao’,’nezha’] def sb(str) : return str +
“_sb” print(list(map(sb,name))) #2题 num = [1,3,5,6,7,8] def
even(num) : return num % 2 == 0 l = list(filter(even,num)) print(l)
#4题 for i in range(0,len(portfolio)) :
print(portfolio[i][“name”],portfolio[i][“shares”]*portfolio[i][“price”])
def unit_p(str) : return str[“price”] > 100
print(list(filter(unit_p,portfolio))) 1、2、4题
图片 22def
read_page(bk_list,n,endline=None): startline = 5 * (n-1) endline =
endline+startline-1 if endline else startline + 4 #
print(startline,endline) for i in range(startline,endline+1):
print(bk_list[i],end = ”) def read_book(filename): f =
open(filename) book_list = f.readlines() f.close() return book_list
book_list = read_book(‘aaa’) line_num = len(book_list) x,y =
divmod(line_num,5) print(line_num,x,y) if y: page = x+1 else: page = x
page = x+1 if y else x print(‘一共有%s页’%page) while True: page_num =
input(‘请输入您要阅读的页码 : ‘).strip() if page_num.isdigit():
page_num = int(page_num) if page_num < page:
read_page(book_list,page_num) elif page_num == page:
read_page(book_list,page_num,y) else: print(‘您输入的内容有误’) 3题

 

我们学了这么多关于函数的知识基本都是自己定义自己使用,那么我们之前用的一些函数…

相关文章