偏函数,高阶函数及模块异常处理补充

偏函数

编程思维,高度抽象的编程范式,用一系列函数解决问题
return的使用
[root@dc code]# vim funa.py
def qh(i,j):
i += 1
j += 1
print(i,j)
print(“haha” * 2)
return i , j
v1,v2 = qh(1,2)
print(“v1 values :”, v1)
print(“v2 values :”, v2)
[root@dc code]# python3 funa.py
[root@dc code]#
让函数执行有一个数据返回(默认没有)函数遇到return结束执行
此种报错含义,缩进
IndentationError: unindent does not match any outer indentation level

IndentationError: unindent不匹配任何外部缩进级别

高阶函数

是偏函数的体现,把函数作为参数传入

map()
filter(函数,列表)过滤列表
过滤不符合条件的元素,返回一个filter对象使用list()转换为列表

生成器 是一个yield语句的函数, yield功能:返回一个值,记住返回值的位置,再次执行从暂停位置开始执行

  当生成器没有值返回时 stoplteration异常

生成器案例
[root@dc python]# vim scq.py
def fun(str,end):
L = []
i = str
while i <= end:
L.append(i)
if i % 10 == 0:
yield L
L = [] #创建新列表
i += 1
la = []
for data in fun(1,20): #循环两次
la.append(data)
print(la)
print("-" * 20)
[root@dc python]# python3 scq.py
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]]

再次追加数据,内存地址不变,两次元素对应同一个地址,再次调用会看到新赋值的数据
[root@dc python]# vim scq.py
def fun(str,end):
L = []
i = str
while i <= end:
L.append(i)
if i % 10 == 0:
yield L #yield后面叫做生成的数据,返回一个序列
#L = [] #创建新列表
i += 1
la = []
for data in fun(1,20): #循环两次
la.append(data)
print(la)
print("-" * 20)
[root@dc code]# python3 scq.py
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]]
在这里插入图片描述


L =[1,2]
L.append(3) 向列表追加数据内存地址不变
id(L)
139778753586888
L.append(4)
id(L)
139778753586888
L
[1, 2, 3, 4]
清空相当于重新创建列表,内存地址不一样
L=[]
id(L)
139778753589064

以下为之前所学内容回顾:

1, python介绍
2, 数据类型----字符 数值 bool 列表 元组 字典 集合 None
容器类型(可以存储多个数据,并且多个数据类型可以各不相同)
列表 list 创建空列表的函数 list()
元组 tuple 创建空元组的函数 tuple()
字典 key values 创建空字典函数 dict()
集合 set(可变) frozenset(不可变) 数据不能重复且无序

3, 变量
数据在内存中的地址对应名称
4, 算术运算符符号
5, 比较符号
6, if判段语句
7, 循环结构
8, 函数管理
9, 文件管理
10,模块管理
模块 .py文件
内置模块 shutil subprocess os sys pickle time datetime random
自定义模块
hashlib
tarfile
查找模块对应.py文件
[root@dc code]# find / -name "shutil.py"

自定义模块案例
[root@dc code]# vim module.py
name = “BOB”
school = “Taren”
L = list(range(1,11))

def pri():
print(“abcdef”)

def info():
print("###" * 10)
[root@dc code]# vim mk.py
import module
print (“调用其他模块的输出”)
print (module.name,module.school)
module.info()
print(module.L)

age = 10
print(age)
module.pri()
[root@dc code]# python3 mk.py
调用其他模块的输出
BOB Taren
##############################
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
10
abcdef

11,异常处理
完整格式
try:
可能发生异常的语句块
except 异常1:
解决代码块
else:
不发生异常才执行的代码块
finally:
正常执行的代码块

主动触发异常
assert 判断条件不成立时执行断言 触发AssertionError异常
[root@dc code]# vim tryb.py

def infob(name,age):
assert not (age < 0 or age >120),“请输入有效年龄0-120”
print("%s is %d" %(name,age))
return age
try:
age=infob(“tom”,23)
except AssertionError as err:
print(err)
else:
if age < 20:
print(“yang man”)
else:
print(“your too old”)
[root@dc code]# python3 tryb.py
tom is 23
your too old
raise 自定义异常类型,及报错信息 ,类型必须是Python已有的
[root@dc code]# vim trya.py
def infoa(name,age):
if age < 0 or age > 120:
raise IndexError(“请输入有效年龄 0-120”)

print("%s is %d old" %(name,age))

try:
infoa(“tom”,29)
except IndexError as e:
print(e)
else:
print(“程序执行完毕”)
[root@dc code]# python3 trya.py
tom is 29 old
程序执行完毕

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值