forth day ---内置函数、匿名函数

一、内置函数:  
画思维导图
迭代器中:range next iter
locals() 本地的命名空间
globals() 全局的命名空间
# def func():
#     a = 1
#     b = 2
#     print(locals())
#     print(globals())
# 全局命名空间中的名字
# print(locals())   # 本地的命名空间
# print(globals())  # 全局的命名空间
# func()
View Code

input
print
99乘法表 %2s 输入一个字符也占两个位置
sep以什么分割 end 不换行
#99乘法表
# for i in range(1,10):
#     for j in range(1,i+1):
#         print('%s * %s = %2s' %(i,j,i*j),end='  ')
#     print()  #注意位置
99乘法表

进度条例子 :
flush=True 立即打印到屏幕上
\r 相当于seek0 只适合于越写越长的情况
1 # import time
2 # for i in range(0,101,2):  #0,2,4,6,8
3 #      time.sleep(0.1)
4 #      char_num = i//2      #打印多少个'*'     4
5 #      if i == 100:
6 #          per_str = '\r%s%% : %s\n' % (i, '*' * char_num)
7 #      else:
8 #         per_str =  '\r%s%% : %s'%(i,'*'*char_num)
9 #      print(per_str,end='',flush=True)   # 0.01
进度条
       print() 写文件
      # python 能直接操作文件 —————— 需要发起系统调用 才能操作文件
hash
字典底层的存储和set集合的去重 都相关---可了解
# print(hash('1291748917'))
# print(hash('1291748917'))

#对可hash的数据类型进行hash之后会得到一个数字
# 在一次程序的执行过程中 对相同的可哈希变量 哈希之后的结果永远相同的
# 在一次程序的执行过程中 对不相同的可哈希变量 哈希之后的结果几乎总是不相同的
# hash 字典底层的存储 和set 集合的去重机制 都相关
View Code

id()

import
help---帮助
callable 可调用 返回True False
# callable 可调用
# def func():pass
# a = 1
# print(callable(func))       #True
# print(callable(a))        #False
callable 可调用

dir 查看内置函数的属性!!学面向对象常用
查看一个变量所拥有的所有名字

bin(10) 0b1010
oct(10) 0o12
hex(10) 0xa

与数字有关:
abs() 绝对值 abs(-4) 4
divmod商余函数----分页用
print(divmod(7,3)) #返回一个元祖(2,1)
round(3.1415926,4) #默认取整,小数精确,会四舍五入
pow 次方
pow(2,3) 2**3 8
pow(2,3,5) (2**3)%5 3

sum求和 接收可迭代对象 数字要加[]
sum([1,2],20) 从20开始求和
sum(range(1,6))
print(sum([1,2,3,4,5]))
print(sum([1,2,3,4,5],0))
print(sum([1,2,3,4,5],20))
print(sum(range(1,6)))
sum
    
min 最小值 3个例子
-2 !!先取key之后,根据返回值排序,再返回原来那个数 面试!
-2 取第一个 带key的是重点!
1 # print(min([1,2,3,4,5]))                   #1
2 # print(min(1,2,3,4))                        #1
3 # print(min(1,-2,3,-4))                     #-4
4 # print(min(1,-2,3,-4,key=abs))       #1
5 # def func(num):
6 #     return num%2
7 # print(min(-2,3,-4,key=func))        #-2
min
max 最大

reversed
reverse在原列表上修改
reversed 原列表不变,生成一个迭代器,可用next调用
 1 # ret = [1,2,3,4,5]
 2 # ret.reverse()
 3 # print(ret)
 4 
 5 # ret1 = reversed(ret)
 6 # ret2 = reversed((1,2,3,4,5))
 7 # print(ret)
 8 # print(list(ret1))
 9 # print(list(ret2))
10 
11 结果:
12 [5, 4, 3, 2, 1]
13 [5, 4, 3, 2, 1]
14 [1, 2, 3, 4, 5]
15 [5, 4, 3, 2, 1]
reversed
format 与格式化相关的方法
# print(format('test', '<20'))
# print(format('test', '>20'))
# print(format('test', '^20'))

结果:
test                
                test
        test        
View Code

ord('a') 97
小写的a 97+26 大写的A-Z 65+26
chr(97) a
repr 显示数据的类型!!常用
# print(1)
# print('1')
# print(repr(1))
# print(repr('1'))


结果:
1
1
1
'1'
repr

enumerate() 接收容器类型 列表、元祖
打印索引与值-----给商品加序号
enumerate(li,1) 以1开始
枚举函数 一个容器类型,一个序号起始值 返回值:可迭代的
 1 # l = ['苹果','香蕉']
 2 # # ret = enumerate(l,1)   # 枚举  接收两个参数:一个容器类型,一个序号起始值   返回值:可迭代的
 3 # # print(ret)
 4 # for num,item in enumerate(l,1):
 5 #     print(num,item)
 6 
 7 
 8 结果:
 9 <enumerate object at 0x0000000002167708>
10 1 苹果
11 2 香蕉
enumerate
   
函数记参数及返回值!

all 主要有一个为假,就为False 不常用
any 主要有一个为真,就为True 不常用
 1 # print(all([1,2,3,4,5]))
 2 # print(all([0,1,2,3,4,5]))
 3 # print(all(['a',1,2,3,4,5]))
 4 # print(all(['',1,2,3,4,5]))
 5 # print(any([0,None,False]))
 6 
 7 
 8 结果:
 9 True
10 False
11 True
12 False
13 False
View Code
zip  面试题!矩阵!拉链方法
按最短的拉起来 返回可迭代的
1 # ret = zip([1,2,3,4,5],('a','b','c','d'),(4,5))   #拉链方法
2 # print(ret)
3 # for i in ret:
4 #     print(i)
5 
6 结果:
7 (1, 'a', 4)
8 (2, 'b', 5)
zip

内置函数无视频,电脑卡死

filter 常考
例子 返回:可迭代的
练习开平方根!
 1 lst =  [1, 4, 6, 7, 9, 12, 17]
 2 # def func(num):
 3 #     if num % 2 == 0:return True
 4 # filter(func,lst)
 5 # for i in filter(func,lst):
 6 #     print(i)
 7 
 8 注释的相当于下面三行的功能
 9 g = (i for i in lst if i%2 == 0)
10 for i in g :
11     print(i)
filter
1 l = ['test', None, '', 'str', '  ', 'END']
2 def func(item):
3     if item and item.strip():return True
4 for i in filter(func,l):
5     print(i)
filter去除空

map 常考 返回可迭代的
例子 书写
 1 # print([i**2 for i in range(10)])
 2 
 3 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
 4 
 5 # def func(num):
 6 #     return num ** 2
 7 # for i in map(func,range(10)):print(i)
 8 
 9 结果:
10 0
11 1
12 4
13 9
14 16
15 25
16 36
17 49
18 64
19 81
map   
sorted
    
补充列表中sort排序:加key
sorted不会改成原有列表,要赋值新列表

长度例子
 1 # 排序功能
 2 l = [1,-4,-2,3,-5,6,5]
 3 l.sort(key=abs)
 4 print(l)
 5 l = [1,-4,-2,3,-5,6,5]
 6 new_l = sorted(l,key=abs,reverse=True)
 7 print(new_l)
 8 
 9 l = [[1,2],[3,4,5,6],(7,),'123']
10 print(sorted(l,key=len))
11 
12 
13 结果;
14 [1, -2, 3, -4, -5, 5, 6]
15 [6, -5, 5, -4, 3, -2, 1]
16 [(7,), [1, 2], '123', [3, 4, 5, 6]]
sorted
eval()  执行字符串中代码,有返回值  慎用
eval('print(123)') 可以执行
exec() 执行字符串中代码,无返回值 慎用
例子
 1 eval('print(123)')
 2 exec('print(123)')
 3 print(eval('1+2-3*20/(2+3)'))
 4 print(exec('1+2-3*20/(2+3)'))
 5 
 6 结果:
 7 123
 8 123
 9 -9.0
10 None
View Code

读内置函数的博客
https://www.processon.com/view/link/5adc6062e4b04721d63171eb
3218
首先掌握标红、标黄的;;可以看老师内置函数的博客,自己去分类
标红的不会,无法写代码
标黄的 能够节省你的代码,面试会问到
最重要的:min max sorted filter map 面试明星知识点
你经常不见的,没被说重点的,就不用了解了

二、匿名函数

函数写法:。。。
 1 # lambda表达式
 2 def add(a,b):
 3     return a+b
 4 print(add(1,3))
 5 
 6 add = lambda a,b : a+b
 7 print(add(1,2))
 8 
 9 
10 
11 结果:
12 4
13 3
初识

lambda表达式
add=lambda a,b:a+b
print(add(1,2))

平方、min练习写成lambda
 1 print([i**2 for i in range(10)])
 2 
 3 
 4 # def func(num):
 5 #     return num ** 2
 6 # for i in map(func,range(10)):print(i)
 7 
 8 
 9 
10 for i in map(lambda num : num ** 2 ,range(10)):print(i)
10以内数平方的三种写法
1 def func(num):
2     return num%2
3 print(min(-2,3,-4,key=func))
4 
5 
6 相当于
7 print(min(-2,3,-4,key=lambda num:num%2))
最小值的lambda写法

面试题:
print(x) 24
1 # d = lambda p:p*2
2 # t = lambda p:p*3
3 # x = 2
4 # x = d(x)   # x = 4
5 # x = t(x)   # x = 12
6 # x = d(x)
7 # print(x)
11
zip
# 现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]


# def func(t):
#     return {t[0]:t[1]}
# ret = map(func,zip((('a'),('b')),(('c'),('d'))))
# print(list(ret))

或
# ret = map(lambda t:{t[0]:t[1]},zip((('a'),('b')),(('c'),('d'))))
# print(list(ret))
22
[]--()
 1 # 3.以下代码的输出是什么?请给出答案并解释。
 2 def multipliers():
 3     return [lambda x:i*x for i in range(4)]
 4 print([m(2) for m in multipliers()])
 5 
 6 
 7 # def multipliers():
 8 #     lst = []
 9 #     i = 0
10 #     lst.append(lambda x:i*x)
11 #     i = 1
12 #     lst.append(lambda x:i*x)
13 #     i = 2
14 #     lst.append(lambda x:i*x)
15 #     i = 3
16 #     lst.append(lambda x:i*x)
17 #     # lst = [lambda x:3*2,lambda x:i*x,lambda x:i*x,lambda x:i*x]
18 #     return lst
19 # print([m(2) for m in multipliers()])
20 结果:
21 [6, 6, 6, 6]
22 
23 
24 # 请修改multipliers的定义来产生期望的结果。
25 
26 # def multipliers():
27 #     return (lambda x:i*x for i in range(4))
28 g = (lambda x:i*x for i in range(4))
29 # print([m(2) for m in g])
30 
31 结果:
32 [0, 2, 4, 6]
33
自己整理笔记(基础数据类型、文件操作、函数)


三、递归函数
error 998
可以修改最大递归深度 import sys
加if
递归就是自己调用自己,有一个停止的条件
往下走 递 往上走 归
 1 # def func():
 2 #     print(1)
 3 #     func()
 4 #
 5 # func()    # 997 /998
 6 
 7 # import sys
 8 # def foo(n):
 9 #     print(n)
10 #     n += 1
11 #     foo(n)
12 # foo(1)
初识
 1 # 6!
 2 # print(6*5*4*3*2*1)
 3 def fn(n):
 4     if n == 1:return 1
 5     return n*fn(n-1)
 6 print(fn(6))
 7 
 8 # 递归 就是自己调用自己
 9 # 递归需要有一个停止的条件
10 # def fn(6):
11 #     if 6 == 1:return 1
12 #     return 6*fn(5)
13 # print(fn(6))
14 #
15 # def fn(5):
16 #     return 5*fn(4)
17 #
18 # def fn(4):
19 #     return 4*fn(3)
20 #
21 # def fn(3):
22 #     return 3*fn(2)
23 #
24 # def fn(2):
25 #     return 2*fn(1)
26 #
27 # def fn(1):
28 #     return 1
6!例子

猜你喜欢

转载自www.cnblogs.com/lijie123/p/8922252.html
今日推荐