美文网首页程序员《做与学系列》
疯狂的Python-06(时间的误会)

疯狂的Python-06(时间的误会)

作者: 景行1023 | 来源:发表于2018-09-08 11:56 被阅读1次

一些有趣的鲜为人知的Python特性集合

无论你是Python新手还是Python老手,我相信,这个系列的文章都会让你获益良多!

阅读此系列任何文章前请务必观看:疯狂的Python-目录大纲


▶ 时间的误会

1.

array = [1, 8, 15]
g = (x for x in array if array.count(x) > 0)
array = [2, 8, 22]

Output:

>>> print(list(g))
[8]

2.

array_1 = [1,2,3,4]
g1 = (x for x in array_1)
array_1 = [1,2,3,4,5]

array_2 = [1,2,3,4]
g2 = (x for x in array_2)
array_2[:] = [1,2,3,4,5]

Output:

>>> print(list(g1))
[1,2,3,4]

>>> print(list(g2))
[1,2,3,4,5]

:bulb: 解释

  • 生成器表达式中,in语句会在声明阶段求值,但是条件判断语句(在这里是array.count(x) > 0)会在真正的运行阶段(runtime)求值。
  • 在生成器运行之前,array已经被重新赋值为[2, 8, 22]了,所以这个时候再用count函数判断2,8,22在原列表中的数量,只有8是数量大于0的,所以最后这个生成器只返回了一个8是符合条件的。
  • 在第二部分中,g1,g2输出结果不同,是因为对array_1array_2的赋值方法不同导致的。
  • 在第一个例子中, array_1绑定了一个新的列表对象[1,2,3,4,5](可以理解成array_1的指针指向了一个新的内存地址),而且在这之前,in语句已经在声明时就为g1绑定好了旧的列表对象[1,2,3,4](这个就对象也没有随着新对象的赋值而销毁)。所以这时候g1array_1是指向不同的对象地址的。
  • 在第二个例子中,由于切片化的赋值,array_2并没有绑定(指向)新对象,而是将旧的对象[1,2,3,4]更新(也就是说旧对象的内存地址被新对象占用了)成了新的对象[1,2,3,4,5]。所以,g2array_2依旧同时指向一个地址,所以都更新成了新对象[1,2,3,4,5]

相关文章

  • 疯狂的Python-06(时间的误会)

    一些有趣的鲜为人知的Python特性集合 无论你是Python新手还是Python老手,我相信,这个系列的文章都会...

  • 让时间证明的误会

    正如世间的事情都有两面性一样,在得到收获的同时会有付出的辛劳。 得到了惬意的美丽时,往往也会有着莫名的苦恼。 对于...

  • 时间之间 学会宽恕感恩

    嫉妒的火焰让人与人彼此误会、错怪,以为被伤害了,而后疯狂地报复,以至于不可挽回的悲剧发生。可是时间,让他们懂得了悲...

  • Python-06~10题

    ---06--- Question: >Write a program that calculates and p...

  • 误会从来不会美丽,因为人类的心灵会随时间成长

    有时候,爱情发生在误会。 因误会而结合,因误会而分开。 误会从来不会美丽,因为人类的心灵会随时间成长。 当发...

  • 误会中的误会

    一句鼓励,一个微笑,也许就能结交一个真诚的朋友;一种语气,一个动作,也可能就回铸一道心灵的隔墙,虽然你不是有心的,...

  • 不是误会的误会

    今天早上九点左右,室友A在宿舍收拾东西准备回家过年,他买的是上午11点多的票。另外一个室友B躺在床上问A怎么还没走...

  • “误会,天大的误会!”

    世界上什么最可怕?我说误会最可怕! “误会,都是误会啊!这简直就是天大的误会,人在屋中坐,祸从天上来!” “哪有什...

  • 《感恩日志》第【271】天

    感恩感谢误会。误会的释义:误解,错误的理解。没有误会,就没有沟通,沟通二字就失去了意义。 感恩感谢释怀。时间久了,...

  • 能被误会的误会,不是误会

    郑重声明:文章系原创首发,文责自负。 误会的根源,还是互相不信任。不信任的根源,是感情不够深。感情不够深,是因为没...

网友评论

    本文标题:疯狂的Python-06(时间的误会)

    本文链接:https://www.haomeiwen.com/subject/jgogwftx.html