美文网首页
随手记小知识点

随手记小知识点

作者: 桃木剑降妖 | 来源:发表于2017-11-05 17:06 被阅读0次

迭代器和生成器

>>> L = [x*x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x*x for x in range(10))
>>> g
<generator object <genexpr> at 0x0000028F8B774200>

通过列表生成式,可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含百万元素的列表,不仅是占用很大的内存空间,如:我们只需要访问前面的几个元素,后面大部分元素所占的空间都是浪费的。因此,没有必要创建完整的列表(节省大量内存空间)。在Python中,我们可以采用生成器:边循环,边计算的机制—>generator

GIL

线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程.对于io密集型任务,python的多线程起到作用,但对于cpu密集型任务,python的多线程几乎占不到任何优势,还有可能因为争夺资源而变慢。

http://www.oschina.net/translate/pythons-hardest-problem
要理解GIL的含义,我们需要从Python的基础讲起。像C++这样的语言是编译型语言,所谓编译型语言,是指程序输入到编译器,编译器再根据语言的语法进行解析,然后翻译成语言独立的中间表示,最终链接成具有高度优化的机器码的可执行程序。编译器之所以可以深层次的对代码进行优化,是因为它可以看到整个程序(或者一大块独立的部分)。这使得它可以对不同的语言指令之间的交互进行推理,从而给出更有效的优化手段
与此相反,Python是解释型语言。程序被输入到解释器来运行。解释器在程序执行之前对其并不了解;它所知道的只是Python的规则,以及在执行过程中怎样去动态的应用这些规则。它也有一些优化,但是这基本上只是另一个级别的优化。由于解释器没法很好的对程序进行推导,Python的大部分优化其实是解释器自身的优化。更快的解释器自然意味着程序的运行也能“免费”的更快。也就是说,解释器优化后,Python程序不用做修改就可以享受优化后的好处。
这一点很重要,让我们再强调一下。如果其他条件不变,Python程序的执行速度直接与解释器的“速度”相关。不管你怎样优化自己的程序,你的程序的执行速度还是依赖于解释器执行你的程序的效率。这就很明显的解释了为什么我们需要对优化Python解释器做这么多的工作了
.....
.....
现在我们来看一下问题的症结所在。要想利用多核系统,Python必须支持多线程运行。作为解释型语言,Python的解释器必须做到既安全又高效。我们都知道多线程编程会遇到的问题。解释器要留意的是避免在不同的线程操作内部共享的数据。同时它还要保证在管理用户线程时保证总是有最大化的计算资源
那么,不同线程同时访问时,数据的保护机制是怎样的呢?答案是解释器全局锁。从名字上看能告诉我们很多东西,很显然,这是一个加在解释器上的全局(从解释器的角度看)锁(从互斥或者类似角度看)。这种方式当然很安全,但是它有一层隐含的意思(Python初学者需要了解这个):对于任何Python程序,不管有多少的处理器,任何时候都总是只有一个线程在执行。

浅拷贝、深拷贝

引用和copy(),deepcopy()的区别

import copy
a = [1, 2, 3, 4, ['a', 'b']]  #原始对象

b = a  #赋值,传对象的引用
c = copy.copy(a)  #对象拷贝,浅拷贝
d = copy.deepcopy(a)  #对象拷贝,深拷贝

a.append(5)  #修改对象a
a[4].append('c')  #修改对象a中的['a', 'b']数组对象

print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d

输出结果:
a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c =  [1, 2, 3, 4, ['a', 'b', 'c']]
d =  [1, 2, 3, 4, ['a', 'b']]

函数式编程

https://coolshell.cn/articles/10822.html

  • 原则:不依赖于外部的数据,而且也不改变外部数据的值,而是返回一个新的值给你。
  • 理念:把函数当成变量来用,关注于描述问题而不是怎么实现

相关文章

  • 随手记小知识点

    迭代器和生成器 通过列表生成式,可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含...

  • 《骑行的力量》

    ~~~2019年3月23日 周六57人骑行小空山骑友 錢多多随骑手记小游同樂 骑行的力量, 飞翔的梦想; 心灵...

  • Android:随手记(小知识点)

    重要链接: IntentFilterIntent以及IntentFilter详解Android——四大组件、六大布...

  • 微信小程序开发手记和大众点评实战系列

    新手向!微信小程序开发手记系列: 微信小程序开发手记《一》:项目的代码结构微信小程序开发手记《二》:属性displ...

  • 随拍,手记。

  • 每月一本读书笔记——《有钱没钱看习惯 》

    初衷 参加随手记的小随调查活动,获得《有钱没钱看习惯 》书 一本,书皮上有一句很有意思的话,挣得少也能活得好的女性...

  • 知识点随手记

    1.sess.run() sess.run([a,b]),同时运行ab两个函数sess.run(a)sess.ru...

  • 习作

    随手记录的小灵感,先囤起来。

  • 【重拾基础】块级元素和行内元素

    最近给自己定了一个小目标,一周温习一个基础知识点,并输出一篇手记。看自己是否能坚持下去。_ 块级元素 块级元素占据...

  • 小A手记

    2018.6.17 周日 今天逛街看到这个漂亮本本,虽然薄薄的,但还是毫不犹疑的买下它。打算从今天开始,本小姐...

网友评论

      本文标题:随手记小知识点

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