一. python基础5(set,函数)
1.1set类型
'''set
类似dict,,是一组key的集合,不存储value
本质: 无序和无重复元素的集合,可以用来去重复
'''
#创建
#创建set需要一个list或tuple作为输入
#set重复元组在set中会被过滤
s1 = set([1,2,3,3,2,1])
print(s1)
#添加,list不可以,元组不可以,因为list是可变的
s1.add(6)
print(s1)
#插入整个list,只插入元素
s1.update([5,6,7,8])
print(s1)
#删除
s1.remove(6)
print(s1)
#遍历
s2 = set([1,2,4,3,5])
for i in s2:
print(i)
s3 =set([1,2,3,4])
s4 =set([4,5,6,7])
#交集
s5 = s3 & s4
print(s5)
#并集
s6 = s3 | s4
print(s6)
1.2 set类型转换,可以来给 list去重复
'''类型转换'''
#list->set
'''list和set类型转换可以用来去重复'''
list1 = [1,2,3,4,5]
set1 = set(list1)
print(set1)
set3 = {1,2,3,4}
list3 =list(set3)
print(list3)
#tuple->set
tuple1=(1,2,3,4)
set2 = set(tuple1)
print(set2)
list去重复的方法
'''list去重复'''
l = [1,5,2,3,4,5,5,5,5,5,5,5]
#1)使用set去重复
set1 = set(l)
list2 = list(set1)
print(list2)
#2)使用新列表
l.sort()
NewList = []
for i in l:
if i not in NewList:
NewList.append(i)
print(NewList)
1.3函数
'''函数'''
#定义函数
'''
def 函数名(参数):
语句
return 值
参数:实参+形参
'''
#关键字参数
#允许函数调用时数和顺序和参数顺序不一致
def myprint1(age,str):
print(str,"is",age,"years old")
myprint1(str ="Jerry",age = 18)
#默认参数,要放到最后
def myprint2(str,age = 8):
print(str,"is",age,"years old")
myprint2(str ="Jerry")
#不定长参数
#能处理比定义更多的参数,加*的变量存放所有未命名的参数,就是一个元组,
#myprint3(name,t,*arr)t是限制个数
def myprint3(name,*args):
print(name)
print(args)
myprint3("Tom","Jerry","Mark","Ben")
#不定长的键值对参数字典,
def myprint4(**kwargs):
print(kwargs)
print(type(kwargs))
myprint4(x=1,y=2,z=3)
#一个接受任意参数的函数
def myprint5(*args,**kwargs):
pass
'''匿名函数
不使用def定义的函数,使用lambda创建函数
特点:
1.函数体简单,主体是表达式,不是代码块
2.不能访问全局命名
3.只能写一行
格式:lambda 参数1,参数2,参数3:expression
'''
sum1 = lambda num1,num2:num1+num2
print(sum1(1,3))
二. python基础6(装饰器,偏函数,异常处理)
2.1装饰器
2.1.1基本装饰器
'''
装饰器:是一个闭包,把函数当成参数返回一个替代函数,
是一个返回函数的函数
'''
'''装饰器格式:'''
def outer(func):
def inner():
pass
return inner
'''简单装饰器'''
#执行顺序,会先按照外部函数只能执行,轮到内部函数在执行这里fun1返回
def func1():
print("good boy")
#目的是在不改变fun1的时候打印姓名
def outer1(func):
def inner():
print("*******")
func()
return inner
f1 = outer1(func1)
f1()
'''复杂装饰器'''
def say(age):
print("Ben is %d years old" %(age))
def outer2(func):
def inner(age):
if age < 0:
age = 0
func(age)
return inner
#原先的函数
say(-10)
#装饰之后的函数
say = outer2(say)
say(-10)
2.1.2装饰器通用显示方法
'''复杂装饰器'''
#装饰器
def outer2(func):
def inner(age):
if age < 0:
age = 0
func(age)
return inner
#使用@符号把装饰器应用到函数
@outer2 #相当于say = outer2(say)
def say(age):
print("Ben is %d years old" %(age))
say(-10)
2.1.3通用装饰器(参数)
def outer(func):
def inner(*args,**kwargs):
print("&&&&&&")
func(*args,**kwargs)
return inner
@outer
def say(name,age):
print("%s is %d years old" %(name,age))
say("Ben",10)
2.2 偏函数
'''偏函数'''
#定义了参数的函数
def int2(str,base =2):
return int(str,base)
import functools
#生成偏函数的模块
int3 = functools.partial(int,base = 2)
print(int3("111"))
2.3变量的作用域
'''作用域'''
#局部作用域:一般是函数内部的变量
#全局作用域:一般是文件定义的变量
2.4异常处理
'''异常处理
bug,程序编码错误
用户输入格式错误:可预测
不可预测:磁盘文件大小,网络错误
需求:当程序遇到错误的时候,跳过这个错误,程序不结束
'''
#格式:
try:
语句t
except 错误码1 as e:
语句1
except 错误码2 as e:
语句2
except 错误码3 as e:
语句3
else:
语句e
#运行逻辑:
#1.当程序运行语句t遇到错误,
#2.1python会匹配以下错误码,匹配成功就执行对应语句,
#2.2如果没有匹配成功,那么错误会被提交上一层try错误???
#3.如果try语句t没有遇到错误,那么如果有else就执行
#格式:
try:
语句t
except 错误码1 as e:
语句1
except 错误码2 as e:
语句2
except 错误码3 as e:
语句3
finally:
语句f
#逻辑:不论语句t是否有错,都执行语句f
异常处理实例:
#明确指出错误类型
try:
print(6/1)
except ZeroDivisionError as e:
print("除数不可以为0")
except NameError as e:
print("变量没赋值")
else:
print("&&&&")
print("程序运行")
#多种一起使用
try:
print(6/1)
except (ZeroDivisionError,NameError) as e:
print("程序出现异常")
else:
print("&&&&")
print("程序运行")
#不明确指出错误类型
try:
print(6 / 0)
except:
print("程序出现异常")