Python语法集中学习一

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中所有的项都被用完。

以上即为今天所学,一切都为人工智能和大数据打基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值