day12

不好意思,上午打了个球,然后下雨,有些浪费了,但是也还好,最起码按照老妈的说法,也许是老爸的,出了一些运动的汗。

估计这两天看完的目标完成不了了,晚上还要去福田吃饭。

先说一下刚刚看书的一些理解,有时候发现这样停下来,想想刚刚敲的一些测试样例还是很重要的。

1 a, b = b, a

首先这个序列解包,我记得python cookbook里面是这么翻译的吧。

这个不是很复杂,但是要经常用,我不应该去写什么临时变量了。

本质上,右值是一个tuple(你怎么读这个词呢...),python会自动把这个tuple给尸解了,刚刚在知乎上看了一个自焚的,抱歉。拆成,一个b和一个a,然后python会把第一个给左值的第一个,第二个给左值的第二个。

妈妈再也不用担心临时变量了,用临时变量的同学一定是从其他语言转过来的,哈哈哈!!!

然后我们在看一个例子,发现右值并不是只有tuple才可以,知道为什么叫序列解包了吧,只要是序列,iterable就可以干。

所以我们会有下面一系列的例子

1 d = dict([(1,1),(2,2)])
2 for j,k in d.items:
3     print(j,k)

我当然是会测试我贴上来的每一段代码的,第一次直接在博客园上用带的代码编辑框写代码,感觉好无力。

我兴奋的写好了并偷偷改了几个错误...囧,开行的命令行运行,艹,报错了。

等等,这个报错,我看过。

built in function啥的,抱歉,我截图软件没启动....

我恍然大悟,于是改了代码,然后成功了。

d = dict([(1,1),(2,2)])
for j,k in d.items():
    print(j,k)

 

啥也不说了。

上面那个报错其实没有说完,not iterable,说明和for循环搭配的,必须是要干的起的。

所限于我现在学到的知识,我感觉这个还真可能是统一的,可以被for艹的,和可以被序列解包的都是一些一样的类型。

我就这么理解吧。

再说一下zip。

我觉得zip应该也是区分外来物种的好方法。

def has_match(t1, t2):
    for x, y in zip(t1, t2):
        if x == y:
            return True
    return False
    
t1 = 'fuck'
t2 = 'fuc'
print(has_match(t1, t2))

发现加行号的话,复制下来还要把序号删掉,虽说不麻烦,但是不方便,不过可读性上来说,还是加上序列好。

zip可以把2个可以iterable的变量结合起来,当然也可以直接字面值,或者都来,至于是不是2个,我还没验证,估计是无数个的。

书里还说到一个很重要的点,zip是生成器。

还没有系统介绍,也不知道会不会系统介绍,我翻下我的远古记忆,谈下我的理解。

生成器,顾名思义,只是不停的生成一些值,但是本身并不保存值,他保留的是什么,是生成的逻辑,和生成到哪了。

就像上面的例子,它记录到生成第三次就应该结束了,所以t1的'k'并没有和一个空字符串输出。

好吧,然后好像昨天做的很混混沌沌,也没有整理学的东西,其实有一个很重要的是关键参数,是这个名字么?

就是在参数上直接写上形参的名字,省的还要记一些乱七八糟的顺序(我设计的函数就是这么遭心啊,好好磨练),还有一个是*,我看着就好像swift里面的!。

可以在函数定义里,在形参前面加一个*,这样后面的参数就会全部收纳在一个tuple里面,通常你需要序列解包来干他。

*还有一个用法就是在其他时候,也就是不是在函数定义的形参上,它可以拆解后面的tuple,虽说我感觉好像序列解包存在的话,他好像没什么卵用似的。

再让我想想,可能有什么场景。

等等,我刚刚测试把我的理解推翻了,解释器告诉我你不可以在这里用star。。。略尴尬。

算了,别固执了,我回去看下书。

好吧,我知道了,*应该是只能使用在函数调用上了。函数定义是需要2个参数,但这时候你正好收到上一个函数返回的tuple,怎么样,在做一遍序列解包,是不是有些多余,*来帮你,在你的返回值前面直接加*来调用函数。

练习赶进度就直接跳过了,2天都在tuple也是醉了。

好吧,我们算是基本把序列这种数据类型全学完了,下一章有个综合练习,加油,继续啃书。

 

转载于:https://www.cnblogs.com/onhacker/p/7073373.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值