1.复习
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 name = 'alex' #name=‘lhf’
4 def change_name():
5 name='lhf'
6 # global name
7 # name = 'lhf'
8 # print(name)
9 # name='aaaa' #name='bbb'
10 def foo():
11 # name = 'wu'
12 nonlocal name
13 name='bbbb'
14 print(name)
15 print(name)
16 foo()
17 print(name)
18
19
20 change_name()
2.匿名函数
1 #!/usr/bin/env Python
2 # -*- coding:utf-8 -*-
3 # def calc(x):
4 # return x+1
5
6 # res=calc(10)
7 # print(res)
8 # print(calc)
9
10 # print(lambda x:x+1)
11 # func=lambda x:x+1
12 # print(func(10))
13
14 # name='alex' #name='alex_sb'
15 # def change_name(x):
16 # return name+'_sb'
17 #
18 # res=change_name(name)
19 # print(res)
20
21 # func=lambda x:x+'_sb'
22 # res=func(name)
23 # print('匿名函数的运行结果',res)
24
25 # func=lambda x,y,z:x+y+z
26 # print(func(1,2,3))
27
28 # name1='alex'
29 # name2='sbalex'
30 # name1='supersbalex'
31
32
33
34 # def test(x,y,z):
35 # return x+1,y+1 #----->(x+1,y+1)
36
37 # lambda x,y,z:(x+1,y+1,z+1)
3.作用域
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 # def test1():
4 # print('in the test1')
5 # def test():
6 # print('in the test')
7 # return test1
8 #
9 # # print(test)
10 # res=test()
11 # # print(res)
12 # print(res()) #test1()
13
14 #函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系
15 # name = 'alex'
16 # def foo():
17 # name='linhaifeng'
18 # def bar():
19 # # name='wupeiqi'
20 # print(name)
21 # return bar
22 # a=foo()
23 # print(a)
24 # a() #bar()
4.函数式编程
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 #高阶函数1。函数接收的参数是一个函数名 2#返回值中包含函数
4 # 把函数当作参数传给另外一个函数
5 # def foo(n): #n=bar
6 # print(n)
7 # #
8 # def bar(name):
9 # print('my name is %s' %name)
10 # #
11 # # foo(bar)
12 # # foo(bar())
13 # foo(bar('alex'))
14 #
15 #返回值中包含函数
16 # def bar():
17 # print('from bar')
18 # def foo():
19 # print('from foo')
20 # return bar
21 # n=foo()
22 # n()
23 # def hanle():
24 # print('from handle')
25 # return hanle
26 # h=hanle()
27 # h()
28 #
29 #
30 #
31 # def test1():
32 # print('from test1')
33 # def test2():
34 # print('from handle')
35 # return test1()
4.map函数
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 # num_l=[1,2,10,5,3,7]
4 # num1_l=[1,2,10,5,3,7]
5
6 # ret=[]
7 # for i in num_l:
8 # ret.append(i**2)
9 #
10 # print(ret)
11
12 # def map_test(array):
13 # ret=[]
14 # for i in num_l:
15 # ret.append(i**2)
16 # return ret
17 #
18 # ret=map_test(num_l)
19 # rett=map_test(num1_l)
20 # print(ret)
21 # print(rett)
22
23 num_l=[1,2,10,5,3,7]
24 #lambda x:x+1
25 def add_one(x):
26 return x+1
27
28 #lambda x:x-1
29 def reduce_one(x):
30 return x-1
31
32 #lambda x:x**2
33 def pf(x):
34 return x**2
35
36 def map_test(func,array):
37 ret=[]
38 for i in num_l:
39 res=func(i) #add_one(i)
40 ret.append(res)
41 return ret
42
43 # print(map_test(add_one,num_l))
44 # print(map_test(lambda x:x+1,num_l))
45
46 # print(map_test(reduce_one,num_l))
47 # print(map_test(lambda x:x-1,num_l))
48
49 # print(map_test(pf,num_l))
50 # print(map_test(lambda x:x**2,num_l))
51
52 #终极版本
53 def map_test(func,array): #func=lambda x:x+1 arrary=[1,2,10,5,3,7]
54 ret=[]
55 for i in array:
56 res=func(i) #add_one(i)
57 ret.append(res)
58 return ret
59
60 # print(map_test(lambda x:x+1,num_l))
61 res=map(lambda x:x+1,num_l)
62 print('内置函数map,处理结果',res)
63 # for i in res:
64 # print(i)
65 # print(list(res))
66 # print('传的是有名函数',list(map(reduce_one,num_l)))
67
68
69 msg='linhaifeng'
70 print(list(map(lambda x:x.upper(),msg)))
5.filter函数
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 movie_people=['sb_alex','sb_wupeiqi','linhaifeng','sb_yuanhao']
4
5
6
7
8 # def filter_test(array):
9 # ret=[]
10 # for p in array:
11 # if not p.startswith('sb'):
12 # ret.append(p)
13 # return ret
14 #
15 # res=filter_test(movie_people)
16 # print(res)
17
18 # movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb']
19 # def sb_show(n):
20 # return n.endswith('sb')
21 #
22 # def filter_test(func,array):
23 # ret=[]
24 # for p in array:
25 # if not func(p):
26 # ret.append(p)
27 # return ret
28 #
29 # res=filter_test(sb_show,movie_people)
30 # print(res)
31
32 #终极版本
33 movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb']
34 # def sb_show(n):
35 # return n.endswith('sb')
36 #--->lambda n:n.endswith('sb')
37
38 def filter_test(func,array):
39 ret=[]
40 for p in array:
41 if not func(p):
42 ret.append(p)
43 return ret
44
45 # res=filter_test(lambda n:n.endswith('sb'),movie_people)
46 # print(res)
47
48 #filter函数
49 movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb']
50 # print(list(filter(lambda n:not n.endswith('sb'),movie_people)))
51 res=filter(lambda n:not n.endswith('sb'),movie_people)
52 print(list(res))
53
54
55 print(list(filter(lambda n:not n.endswith('sb'),movie_people)))
6.reduce函数
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 from functools import reduce
4
5
6 # num_l=[1,2,3,100]
7 #
8 # res=0
9 # for num in num_l:
10 # res+=num
11 #
12 # print(res)
13
14 # num_l=[1,2,3,100]
15 # def reduce_test(array):
16 # res=0
17 # for num in array:
18 # res+=num
19 # return res
20 #
21 # print(reduce_test(num_l))
22
23 # num_l=[1,2,3,100]
24 #
25 # def multi(x,y):
26 # return x*y
27 # lambda x,y:x*y
28 #
29 # def reduce_test(func,array):
30 # res=array.pop(0)
31 # for num in array:
32 # res=func(res,num)
33 # return res
34 #
35 # print(reduce_test(lambda x,y:x*y,num_l))
36
37 # num_l=[1,2,3,100]
38 # def reduce_test(func,array,init=None):
39 # if init is None:
40 # res=array.pop(0)
41 # else:
42 # res=init
43 # for num in array:
44 # res=func(res,num)
45 # return res
46 #
47 # print(reduce_test(lambda x,y:x*y,num_l,100))
48
49 #reduce函数
50 # from functools import reduce
51 # num_l=[1,2,3,100]
52 # print(reduce(lambda x,y:x+y,num_l,1))
53 # print(reduce(lambda x,y:x+y,num_l))
7.小结
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 #处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素个数及位置与原来一样
4 # map()
5
6 #filter遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来
7
8 people=[
9 {'name':'alex','age':1000},
10 {'name':'wupei','age':10000},
11 {'name':'yuanhao','age':9000},
12 {'name':'linhaifeng','age':18},
13 ]
14 # print(list(filter(lambda p:p['age']<=18,people)))
15 # print(list(filter(lambda p:p['age']<=18,people)))
16
17 #reduce:处理一个序列,然后把序列进行合并操作
18 from functools import reduce
19 print(reduce(lambda x,y:x+y,range(100),100))
20 # print(reduce(lambda x,y:x+y,range(1,101)))
8.内置函数
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 # print(abs(-1))
4 # print(abs(1))
5 #
6 # print(all([1,2,'1']))
7 # print(all([1,2,'1','']))
8 # print(all(''))
9
10 # print(any([0,'']))
11 # print(any([0,'',1]))
12
13
14 # print(bin(3))
15
16 #空,None,0的布尔值为False,其余都为True
17 # print(bool(''))
18 # print(bool(None))
19 # print(bool(0))
20
21 name='你好'
22 # print(bytes(name,encoding='utf-8'))
23 # print(bytes(name,encoding='utf-8').decode('utf-8'))
24
25 # print(bytes(name,encoding='gbk'))
26 # print(bytes(name,encoding='gbk').decode('gbk'))
27 #
28 # print(bytes(name,encoding='ascii'))#ascii不能编码中文
29 #
30 # print(chr(46))
31 #
32 # print(dir(dict))
33 #
34 # print(divmod(10,3))
35
36 # dic={'name':'alex'}
37 # dic_str=str(dic)
38 # print(dic_str)
39
40 #可hash的数据类型即不可变数据类型,不可hash的数据类型即可变数据类型
41 # print(hash('12sdfdsaf3123123sdfasdfasdfasdfasdfasdfasdfasdfasfasfdasdf'))
42 # print(hash('12sdfdsaf31231asdfasdfsadfsadfasdfasdf23'))
43 #
44 name='alex'
45 # print(hash(name))
46 # print(hash(name))
47 #
48 #
49 # print('--->before',hash(name))
50 # name='sb'
51 # print('=-=>after',hash(name))
52
53
54 # print(help(all))
55 #
56 # print(bin(10))#10进制->2进制
57 # print(hex(12))#10进制->16进制
58 # print(oct(12))#10进制->8进制
59
60
61 name='哈哈哈哈哈哈哈哈哈哈哈哈哈哈啊哈粥少陈'
62 # print(globals())
63 # print(__file__)
64 #
65 def test():
66 age='1111111111111111111111111111111111111111111111111111111111111'
67 # print(globals())
68 print(locals())
69 #
70 # test()
71 #
72 l=[1,3,100,-1,2]
73 # print(max(l))
74 # print(min(l))
75
76
77
78 # print(isinstance(1,int))
79 # print(isinstance('abc',str))
80 print(isinstance([],list))
81 # print(isinstance({},dict))
82 print(isinstance({1,2},set))