1 切片
使用[]可以给list或tuple进行切片操作
中括号内第一个值是起始位,第二个位置是终止位
a = [1,2,3,1]
b = a[0:2]
print(b)
我们也可以加入第三个值,第三个值是每隔几个值选中一次
- 起始位为0,终止位为3,选中第一个值后每隔两个值(包括第一个值)选下一个值
a = [1,2,3,1]
b = a[0:3:2]
print(b)
我们有的时候看代码中是这样写的,这样写的意思就是全部选中,然后每隔两个值选一次
a = [1,2,3,1]
b = a[::2]
print(b)
起始位与终止位也可以为负值,这样就是倒着选
a = [1,2,3,1]
b = a[-3:-1]
print(b)
第三个值也可以为负值
a = [1,2,3,1]
b = a[::-1]
print(b)
a = [1,2,3,1]
b = a[::-2]
print(b)
元组与上面使用方法相同
2 列表逆序
a = [1,2,3,4]
b = a[::-1]
print(b)
3 装饰器
我们使用@符号作为装饰器的标志,在 Python关键字_potato123232的博客-CSDN博客 中我提到过 @staticmethod(静态方法) 与 @classmethod(类方法),这两个是python内置的,除此之外我们可以可以自建装饰器
我们现在想一个应用场景,现在你设计了一个除法运算,在除法之前你想检查除数是否为0,那么你可以这样写
def div(a,b):
if b == 0:
return 'b不能为0'
else:
return a/b
但是你的代码中现在有多个不同的函数需要检查,你当前已经写好了,不想再每个都加上if与else这种逻辑,那么你应该这样写
def check(func):
def div_check(a,b):
if b != 0:
return func(a,b)
else:
return 'b不能为0'
return div_check
@check
def div(a,b):
return a/b
再加一个函数也是一样
def check(func):
def div_check(a,b):
if b != 0:
return func(a,b)
else:
return 'b不能为0'
return div_check
@check
def div(a,b):
return a/b
@check
def div2(c,d):
return c/d
那么我们现在又想加入一个条件,输入的两个值只能为整形,同样我不想繁琐的加if...else,那么我们应该这样写
def check(func):
def div_check(a,b):
if b != 0:
return func(a,b)
else:
return 'b不能为0'
return div_check
def check2(func):
def div_check2(a,b):
if type(a)==type(1) and type(b)==type(1):
return func(a,b)
else:
return '这两个参数必须为整形'
return div_check2
@check2
@check
def div(a,b):
return a/b
@check2
@check
def div2(c,d):
return c/d
在我们的设计中优先判定check2,check2满足后判定check1,都满足后执行div或div2
我们使用装饰器的时候注意
- 装饰器函数嵌套来写,装饰器本身只接收函数类变量,返回只返回装饰器函数中的子函数
- 一个装饰器函数中里面可以又多个子函数,但是只有一个可以生效,子函数中可以接收若干变量