【python基础】python基础5+6(set,函数,装饰器,偏函数,异常处理)

一. 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("程序出现异常")

猜你喜欢

转载自blog.csdn.net/acycy/article/details/82718908