python思想读后感_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)

第六章 面向对象编程

定义类:

classStudent(object):def __init__(self, name, score):

self.__name =name

self.__score =scoredefprint_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变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值