目录
匿名函数
引入
def 函数名(): -->有名函数
匿名 -->没有名字-->只能和某些方法联用
匿名函数语法需要关键字lambda
lambda 参数:返回值
1.没有名字,只有参数和返回值,参数返回值都可以有多个
2.没有代码块,代码块可以集成在返回值中,但是只能对参数中的变量进行操作
3.强行调用也可以,两种调用方式
#查看函数对象
print(lambda x:x**2+x)
#调用方式一
print((lambda x:x**2+x)(4))
#调用方式二(变成有名函数调用)
f = lambda x:x**2+x
print(f(4))
匿名函数与max()方法联用
dic = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000,
'z': 1000
}
print(max(dic))
def f(i):
return dic[i]
print(max(dic))
res = max(dic,key=f)
print(res)
#key = dic作用
#1.循环遍历dic,会取到所有的key值
#2.然后把所有的key值一次丢入func,返回薪资
#3.通过返回的薪资排序,得到最大值薪资对应的key
res2 = max(dic, key=lambda name:dic[name])
匿名函数与filter()方法联用---filter---过滤
for i in res:
print(i)
def f2(item):
if item < 2:
return True
else:
return False
print(list(filter(f2,[1,2,3,0])))
print(list(filter(lambda item:item**item<20,[1,2,3,4])))
#筛选工作小于5000的人的名字
dic = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000,
'z': 1000
}
for i in filter(lambda name:dic[name]<5000,dic):
print(i)
匿名函数与map()方法联用---map---映射
dic = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000,
'z': 1000
}
def f3(arg):
return arg**5
for i in map(f3,[1,2,3]):
print(i)
print(list(map(lambda m,n:m**n,[1,2,3,5],(6,7,8,9))))
匿名函数与sorted()
lt=['asdg','sagjoij','weoiwjfhfpif']
print(sorted(lt,key=lambda i:i[1],reverse=True))
print(sorted(dic,key=lambda i:dic[i]))
内置函数
python解释器内置函数
print(bytes('中国',encoding='utf8')) #用'utf8'将'中国'编码成二进制串
print(chr(97)) #将二进制解码成字符
print(ord('b')) #将字符编码成二进制
print(divmod(10,3)) #两数相除后分别取余取整,并将结果存放在元组中
print(enumerate(['a','b','c'])) #####非常重要;返回生成器对象;以元组形式将元素索引和元素存放在生成器对象中
for i in enumerate(['a','b','c']):
print(i)
t = '[1,2,3]'
print(type(eval(t)),eval(t)) ###重要,把字符串引号去掉,留下什么类型就是什么类型
print(eval('"a"'))
print(eval("'b'"))
# print(hash([1,2])) #可哈希(不可变数据类型)返回原值,不可哈希报错
print(abs(-1)) #求绝对值
print(all([1,2,3])) #参数为i则为iterable(可迭代对象)
print(all([1,2,0])) #可迭代对象内元素全部为True则为True,否则为False
print(any([1,0])) #可迭代对象内有任何一个元素为True则为True,否则为False
print(bin(123)) #转换为二进制
print(oct(123)) #转换为8进制
print(hex(123)) #转换为16进制
# import time
# print(dir(time)) #以列表形式列出模块所有方法
sets = frozenset({4,5,6}) #不可变化的集合,类似于集合
# sets.add() #不含add方法
print(globals()) #以字典形式列出所有全局变量,放哪都是全局
def f():
x = 1
print(locals()) #以字典形式列出当前位置所有变量,放全局则为全局,放局部则为局部
f()
print(pow(2,4)) #幂运算
print(round(3.7)) #四舍五入
cut = slice(1,5,2) #1==start,5==stop,2==step
lt = [1,2,3,4,5,6,7]
print(lt[cut])
print(sum([1,2,3,4,5])) #求和
a = __import__('time') #通过字符串导入模块
print(a.time()) #通过字符串导入模块
异常处理
num = input('请输入数字:')
dic = {'a':1}
try:
print(dic['b'])
1/int(num)
except KeyError:
print('非法输入key')
except ZeroDivisionError:
print('0不能做分母')
# 报错之后不运行下面代码只捕捉一个错误
try:
print(dic['b'])
1/int(num)
except Exception as e:
print(e)
print('蔡启龙')
#也只能捕捉一个错误信息,为第一个出错点的错误信息
print('错误后面的代码')
#异常捕捉只能捕捉逻辑错误
fr = open('test14.py','r')
try:
#文件中途报错
1/0
fr.close()
except Exception as e:
print(e)
finally: #无论报不报错,都执行织一行代码
print('报错行下面代码也执行')
# print(x)
面向过程编程
IPO
I input 输入(定义的变量) P Process 过程(控制变量的改变) O output(新的变量) 输出编程 == 面向过程编程
原材料 -》 烧成液体 -》倒入模具 -》 冷却 -》敲打 -》冷却 -》输出一个青铜器
类似于流水线,一步一步往下走,一个步骤就是一个函数
优缺点
优点:逻辑非常清晰
缺点:扩展性差,下一阶段的输入与上一阶段的输出有关
debug原理
逻辑错误-->控制变量改变的方向出错了
检查错误-->不断打印每一步之前和之后变量的变化状态