Python学习--慕课笔记
Day One
Python特点:优雅 明确 简单
Python适合领域:Web 脚本 “胶水工具”
Python不适合领域:硬件开发 游戏开发 移动应用
Python特点:解释性语言 不用编译 代码量少 速度慢 源码不能加密
版本:2.7 第三方库支持;
3.3 较新
Day Two
16进制转10进制:int('0x12fd45', 16)
print语句可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出,逗号表现为空格
注释:开头加“#”
转义:“\”,常用转义字符:\n 表示换行,\t 表示一个制表符 ,\\ 表示 \ 字符本身
多行字符串表示:用'''...'''表示
忽略转义:raw字符串,用“r+字符串”表示
Unicode:把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
以Unicode表示的字符串用u'...'表示,如:print u'中文'
注意:如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释
# -*- coding: utf-8 -*-
整数和浮点数混合运算的结果就变成浮点数
整数运算的结果永远是精确的,而浮点数运算的结果不一定精确
11 / 4 # ==> 2,整数除法得到整数
11 % 4 # ==> 3,求余
11.0 / 4 # ==> 2.75,浮点数除法,结果为浮点数
短路计算:Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。
list:Python内置的数据类型。list是一种有序的集合,可以随时添加和删除其中的元素。
Day Three
按照索引访问list:索引从 0 开始;使用索引时,千万注意不要越界
倒序访问list:用 -1 这个索引来表示最后一个元素,-2表示倒数第二,以此类推
list添加新元素:
append(),把新的元素添加到 list 的尾部;用法:L.append(新元素)
insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素。
从list删除元素:
pop()方法总是删掉list的最后一个元素,并且它还返回这个元素;
pop(2)将第三位删除掉
tuple:有序列表,tuple一旦创建完毕,就不能修改了。
创建tuple和创建list唯一不同之处是用( )替代了[ ]。
创建单元素tuple:需要注意在元素的后面加上“,”;多元素 tuple 加不加这个额外的“,”效果是一样的。
tuple中可以包含可变的list
Day Four
Python代码的缩进规则:具有相同缩进的代码被视为代码块;4个空格,不要使用Tab,更不要混合Tab和空格
注意:Python交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车
if:if 语句后接表达式,然后用:表示代码块开始
if ... else ... 语句:非此即彼;注意: else 后面有个“:”
if ... elif ... else ... 语句:这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行了
for循环:for name in L:name 这个变量是在 for 循环中定义的,意思是,依次取出list中的每一个元素,并把元素赋值给 name,然后执行for循环体,可以遍历list或者tuple
Day Five
用 for 循环或者 while 循环时,如果要在循环体内直接退出循环,可以使用 break 语句。
在循环过程中,可以用break退出当前循环,还可以用continue跳过后续循环代码,继续下一次循环。
Day Six
dict:建立对应关系
dict访问:使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key;print d.get('Bart')也可以用
注意:一起打印不同类型数据时,用“,”分开
dict内部是无序的,不能用dict存储有序的集合。
dict的特点是作为 key 的元素必须不可变
dict是可变的,也就是说,我们可以随时往dict中添加新的 key-value。如果 key 已经存在,则赋值会用新的 value 替换掉原来的 value
遍历dict:for key in d:
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。set不能包含重复的元素
如果传入有重复,set会自动去掉重复的元素.
访问set:由于set存储的是无序集合,所以我们没法通过索引来访问。访问 set中的某个元素实际上就是判断一个元素是否在set中:'Bill' in s
重要:大小写很重要,'Bart' 和 'bart'被认为是两个不同的元素。
set的特点适合的应用:遍历速度快,可表示星期
遍历set:for 循环在遍历set时,元素的顺序和list的顺序很可能是不同的,而且不同的机器上运行的结果也可能不同。
set添加元素时,用set的add()方法;删除set中的元素时,用set的remove()方法
Day Seven
Python官方网站:http://docs.python.org
可以在交互式命令行通过 help(abs) 查看abs函数的帮助信息
int()函数可以把其他数据类型转换为整数;str()函数把其他类型转换成 str
高级程序用法:L = xrange(1, 101); print sum([i*i for i in L])
定义一个函数要使用 def 语句:依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
return None可以简写为return
返回多值:a的平方:a**2
递归:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰,递归要有块的思想
使用递归函数需要注意防止栈溢出
函数的默认参数的作用是简化调用
由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面
定义可变参数:如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数:
def fn(*args):%注意带星号
print args
可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。
要使用浮点数进行运算:使用“*1.0”
切片:L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素
如果第一个索引是0,还可以省略;只用一个 : ,表示从头到尾;切片操作还可以指定第三个参数:第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个,注意这是第三个参数
range()函数可以创建一个数列:
>>> range(1, 101)
[1, 2, 3, ..., 100]
Day Eight
倒序切片:L[-3:-1]:从倒数第三个开始到最后一个(不包含),记住倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。
Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上
注意: 集合是指包含一组元素的数据结构,我们已经介绍的包括:
1. 有序集合:list,tuple,str和unicode;
2. 无序集合:set
3. 无序集合并且具有 key-value 对:dict
迭代是一个动词,它指的是一种操作,在Python中,就是 for 循环。
Python中,迭代永远是取出元素本身,而非元素的索引。
索引迭代:for index, name in enumerate(L): print index, '-', name
zip()函数可以把两个 list 变成一个 list:
>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]
迭代dict的value:dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list:用法:d.values();itervalues() 方法也是类似功能,但占用内存少
如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
Day Nine
列表生成式: >>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
注意:range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...]
列表生成式的 for 循环后面还可以加上 if 判断
注意:仔细区分数字和字符串