Python语法集中学习一
嵌套
函数嵌套示例
def func():
def func2():
print('hello!!!')
return func2
# 调用方式1
fn = func()
fn()
# hello!!!
#调用方式2
func()()
理解
感觉嵌套很容易理解,就是返回一个函数
闭包
闭包示例
def func(x):
def func2(y):
print(x + y)
return func2
#调用方式
fn = func(1)
fn(2)
# 3
#调用方式2
fn(1)(2)
理解
就是嵌套函数带上参数
装饰器
备注
装饰器相对来说复杂一些,却也属于闭包的加深
无参数装饰器示例
# 装饰器
def addTips(fn):
def warp(*args, **kwargs):
print('这是操作之前')
res = fn(*args, **kwargs)
print('这是操作之后')
return warp
# 装饰函数
@addTips
def add():
print('正在计算')
# 调用
add()
# 输出结果
# 这是操作之前
# 正在计算
# 这是操作之后
理解
初看第一眼,误以为成js的回调函数,但是仔细琢磨发现不是一回事。
解释器更像中间件,对解释器的理解我觉得就是koa官网那张洋葱图。
有参数解释器示例
def addTips(i):
def warp1(fn):
def warp(*args, **kwargs):
print('这是操作之前')
res = 0
if i < 10:
res = fn(*args, **kwargs)
else:
print('没有执行权限')
print('执行结束')
return res
return warp
return warp1
@addTips(11)
def add(x, y):
return x + y
print(add(1, 2))
# 这是操作之前
# 没有执行权限
# 0
理解
添加参数后解释写法略显难看,应该能优化,继续努力学习吧
迭代器
目前学习到的迭代方式
排列 组合 笛卡尔积 串联迭代器
下面一一展示
记得引入itertools类
引入时顺便创建一个Range
import itertools
x = range(1, 5)
# 代表从1到5(不包含5)
排列代码示例
com1 = itertools.combinations(x, 3)
for i in com1:
print(i)
# 输出结果
(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
理解
返回x中所有长度为3的子序列,返回的子序列中的项按输入x中的顺序排序
组合代码示例
com2 = itertools.permutations(x, 3)
for i in com2:
print(i)
(1, 2, 3)
...
(4, 3, 2)
理解
返回x中所有长度为3的元素组合
笛卡尔积代码示例
com3 = itertools.product
y = list('abc')
com3 = itertools.product(x, y)
for i in com3:
print(i)
# 输出结果
(1, 'a')
...
(4, 'c')
理解
这个是引用的第三方解释
product(iter1, iter2, … iterN, [repeat=1]):
创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔积的元组,repeat是一个关键字参数,指定重复生成序列的次数。
串联代码示例
com4 = itertools.chain(range(1, 5), list('abc'))
for i in com4:
print(i)
#输出结果
1
...
c
理解
chain(iter1, iter2, …, iterN):
给出一组迭代器(iter1, iter2, …, iterN),此函数创建一个新迭代器来将所有的迭代器链接起来,返回的迭代器从iter1开始生成项,知道iter1被用完,然后从iter2生成项,这一过程会持续到iterN中所有的项都被用完。