匿名函数, 内置函数, 异常处理

匿名函数

引入

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原理

逻辑错误-->控制变量改变的方向出错了

检查错误-->不断打印每一步之前和之后变量的变化状态

原文地址:https://www.cnblogs.com/-406454833/p/11595739.html