内容来自廖雪峰老师慕课教程:https://www.imooc.com/learn/177
数据类型
1.整数,包括正常表示的整数和十六进制表示的数字,即0x开头
2.浮点数,对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
3.字符串,单引号双引号要匹配
4.布尔值,Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。布尔值可以用and、or和not运算。
5.空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
6.还可以自定义数据类型
print语句
print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出。print会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串是这样拼起来的:
eg:>>> print '100 + 200 =', 100 + 200
100 + 200 = 300#运行结果
变量
python是动态语言,不同类型的值可以重复赋值给某一个变量,赋值符号不能简单的理解为数学上的等于号
字符串
常见的转义字符:\n 表示换行,\t 表示一个制表符,\\ 表示 \ 字符本身
raw字符串:字符串前加 r'...',表示里面的内容不需要转义。表示多行字符串以及引号的话,可以用 r'''...'''。

字符串可以通过 % 进行格式化,用指定的参数替代 %s。
字符串的join()方法可以把一个 list 拼接成一个字符串。
unicode编码
1.Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...' 表示,含转义的话 ur'''...'''。
2.如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释# -*- coding: utf-8 -*-目的是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++ 另存为... 并选择UTF-8格式保存。
运算
1.整数与浮点数运算:
Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致。整数运算结果仍然是整数,浮点数运算结果仍然是浮点数,整数和浮点数混合运算的结果是浮点数。
为什么要区分整数运算和浮点数运算呢?这是因为整数运算的结果永远是精确的,而浮点数运算的结果不一定精确,因为计算机内存再大,也无法精确表示出无限循环小数,比如 0.1 换成二进制表示就是无限循环小数。Python的整数除法,即使除不尽,结果仍然是整数,余数直接被扔掉。
2.布尔运算:
Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True。
and 和 or 运算的一条重要法则:短路计算
1)在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
2.)在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
List类型
1. Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据:>>> L = ['Michael', 100, True]。直接打印list会出来[ ]。空list:[ ]。
2. 直接使用索引来引用某个位置的值,注意索引不要越界。倒序索引从-1开始,比如L[-1]表示最后一个位置的值。
3. 添加新元素:
1)append(),追加到最后
>>> L = ['Adam', 'Lisa', 'Bart'] >>> L.append('Paul') >>> print L
['Adam', 'Lisa', 'Bart', 'Paul']
2)insert(),第一个参数表示要添加的位置索引
>>> L = ['Adam', 'Lisa', 'Bart'] >>> L.insert(0, 'Paul') >>> print L
['Paul', 'Adam', 'Lisa', 'Bart']
4. 删除元素
1) pop()删除末尾元素
2) pop(index) 删除指定索引的元素
5.替换元素
可以直接给当前位置重新赋值。
6.切片

tuple类型
1. tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了,即不能删除添加替换。t = tuple(x for x in range(0,10)) print t #顺序输出0到10
2. ()既可以表示tuple,又可以作为括号表示运算时的优先级。用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”
if语句
1. Python代码的缩进规则。具有相同缩进的代码被视为代码块。缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
注意: if 语句后接表达式,然后用:表示代码块开始。
if age >= 18:
print 'your age is', age
print 'adult'
2. 利用 if ... else ... 语句,我们可以根据条件表达式的值为 True 或者 False ,分别执行 if 代码块或者 else 代码块。
注意: else 后面有个“:”。
3. elif 意思就是 else if。
特别注意: 这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行了。

for循环
L = ['Adam', 'Lisa', 'Bart'] for name in L: print name
name 这个变量是在 for 循环中定义的,意思是,依次取出list中的每一个元素,并把元素赋值给 name,然后执行for循环体(就是缩进的代码块)。
while循环
1. 注意写法while x < N: 。要特别留意while循环的退出条件,不要陷入死循环。
2. 用 for 循环或者 while 循环时,如果要在循环体内直接退出循环,可以使用 break 语句。
用continue跳过后续循环代码,继续下一次循环。
dict字典
1. 可以简单理解为字典,key对应着value,通过 key来查找 value。
2. 访问字典
可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key。通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。
两种方法避免keyerror:
1) 一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d: print d['Paul']
2) 二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
>>> print d.get('Bart') 59
>>> print d.get('Paul') None
3.dict的特点:
1) dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。
2) key-value序对是没有顺序的
3) 作为 key 的元素必须不可变
4. 更新dict,可以直接使用赋值语句,若已存在该key,会直接覆盖。
5. 遍历dict,,直接使用for循环可以遍历 dict 的 key。
set
1. 有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
2. 创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:
>>> s = set(['A', 'B', 'C'])
3. 访问set
由于set存储的是无序集合,所以我们没法通过索引来访问。访问 set中的某个元素实际上就是判断一个元素是否在set中。可以用 in 操作符判断。

4.set的特点
1)set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
2)set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
3)set存储的元素也是没有顺序的。
5. set的遍历可以通过for循环来完成

6. set的更新
由于set存储的是一组不重复的无序元素,因此,更新set主要做两件事:一是把新的元素添加到set中,二是把已有元素从set中删除。
如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了,如果删除的元素不存在set中,remove()会报错,remove()前需要判断。

函数
1.官方文档:https://docs.python.org/3.7/library/functions.html#abs
在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
2. 在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple

3. 使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
4. 默认参数只能定义在必需参数的后面

函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的参数来覆盖默认参数值。
5. 可变参数
可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。
迭代
1. 集合是指包含一组元素的数据结构,python中有:
1)有序集合:list,tuple,str和unicode;
2)无序集合:set
3)无序集合并且具有 key-value 对:dict
迭代是一个动词,它指的是一种操作,在Python中,就是 for 循环。
2. 索引迭代要用enumerate() 函数
for index, name in enumerate(L):
print index, '-', name
索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。
还有一种方法就是使用zip函数,合并上一个索引list成为一个tuple的list

3. 迭代dict的value
dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value。
dict除了values()方法外,还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样
1)values() 方法实际上把一个 dict 转换成了包含 value 的list。
2)但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
3)打印 itervalues() 发现它返回一个 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
4. 迭代dict的key和value
items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value。items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。

列表生成式
1. 列表生成式的 for 循环后面还可以加上 if 判断,有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
2. for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。

网友评论