Python读书笔记

第一章 Python基础
  • list是一种有序的可变集合[ ],可以包含不同的数据类型,下标由0开始,到n-1,下标也可以为负数,表示倒数第i个,到-n;可以使用append函数在末尾插入,也可以使用insert函数插入到指定位置;使用pop(i)删除末尾或第i个元素。
  • tuple又叫元组(),一旦初始化就不可再改变
  • dict又叫字典,d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}2
  • set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。s = set([1, 1, 2, 2, 3, 3]);set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:s1 & s2;s1 | s2
 
第二章 函数
  • 函数def需要指定函数名和参数名,不需要指定返回值类型;函数参数有普通的位置参数,默认参数(多一个等号);可变数目参数(形参名前加一个*号),调用时也要加*号;
  • 关键字参数:可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。定义时在参数名前加两个*号;如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下:def person(name, age, *, city, job):关键字参数会进行复制传递,所以在函数中修改不会改变原字典的值,
  • 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
  • 在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。在此基础上,所有参数(自变量)在Python里都是按引用传递。
  • 默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!
要注意定义可变参数和关键字参数的语法:
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict。
 
第三章 高级特性
  • 列表生成式则可以用一行语句代替循环生成上面的list:
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

 

  • 只要把一个列表生成式的[]改成(),就创建了一个generator:;另外一种生成方法是 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。
  • a, b = b, a + b相当于
    t = (b, a + b) # t是一个tuple
    a = t[0]
    b = t[1]
  • 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
 
第四章 函数式编程
  • 要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map():
    map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
  • reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
 
 
第六章 面向对象编程
  • 定义类:
class Student(object):
    def __init__(self, name, score):
        self.__name = name
        self.__score = score
 
    def print_score(self):
        print('%s: %s' % (self.__name, self.__score))

 

其中函数__init__用于构造对象,第一个参数self是固定的
  • 和静态语言不同,Python允许对实例变量绑定任何数据,bart.age = 8
  • 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__;在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名;不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量

posted @ 2018-04-18 10:32  LloydDracarys  阅读(316)  评论(0)    收藏  举报