《Python入门》笔记

来源:互联网 发布:淘宝卖家申请蚂蚁花呗 编辑:程序博客网 时间:2024/06/02 00:44

Python入门

Python与其他语言相比的优势

Python与C和Java相比,运行速度较慢。但随着技术发展,CPU运行速度越来越快,性能的瓶颈往往不在CPU的运行速度,而在网络和数据库的调用上。这就和电瓶车与轿车在堵车时的运行速度一样,与车本身的运行速度无关。

Python变量和数据类型

Python中的布尔类型

a = 'python'print 'hello,', a or 'world' #hello, pythonb = ''print 'hello,', b or 'world' #hello, word

Python之创建tuple

  • tuple和list非常类似,但是,tuple一旦创建完毕,就不能修改了。创建tuple和创建list唯一不同之处是用()替代了[]
t = ('Adam','Lisa','Bart')
  • 单元素tuple要多加一个逗号,避免歧义
 t=(1,)

Python中什么是set

  • 创建set的方式是调用set()并传入一个list,list的元素将作为set的元素
  • set中的元素不重复且无序
  • 用add()可以直接添加,而remove()前需要判断。因为remove()不存在的元素会报错

Python之调用函数

  • Python的函数返回多值其实就是返回一个tuple,但可以省略括号,写起来更方便

第一个Python程序

输入和输出

  • Python提供了一个input(),可以让用户输入字符串,并存放到一个变量里
>>> name = input()Michael

Python基础

数据类型和变量

  • 整数的地板除//永远是整数,即使除不尽。要做精确的除法,使用/就可以。

使用list和tuple

  • 只有1个元素的tuple定义时必须加一个逗号,,来消除歧义
>>> t = (1,)>>> t(1,)

使用dict和set

  • 要删除一个key,用pop(key)方法,对应的value也会从dict中删除
  • 对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

函数

函数的参数

  • *args是可变参数,args接收的是一个tuple;**kw是关键字参数,kw接收的是一个dict。

生成器

  • 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator

迭代器

  • 凡是可作用于for循环的对象都是Iterable类型;凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

返回函数

  • 返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变
def count():    def f(j):        def g():            return j*j        return g    fs = []    for i in range(1, 4):        fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()    return fs

序列化

  • Pytho语言特定的序列化模块是pickle,但如果要把序列化搞得更通用、更符合Web标准,就可以使用json模块
  • json模块的dumps()和laods()函数是定义得非常好的接口的典范。当我们使用时,只需要传入一个必须的参数。

进程和线程

多进程

  • 在Unix/Linux下,可以使用fork()调用实现多进程
  • 要实现跨平台的多进程,可以使用multiprocessing模块
  • 进程间的通信是通过Queue、Pipes等实现的

多线程

  • 多线程编程,模型复杂,容易发生冲突,必须用锁加以隔离,同时,又要小心死锁的发生
  • Python解释器由于设计时有GIL全局锁,导致了多线程无法利用多核。多线程的并发在Python中就是一个美丽的梦。但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁
  • 一个ThreadLocal变量虽然是全局变量,但每个线程都只能读写自己线程的独立副本,互补干扰。ThreadLocal解决了参数在一个线程中各个函数之间互相传递的问题
  • 在Thread和Porcess中,应当优先选择Process,因为Process更稳定
原创粉丝点击