总结
#!/usr/bin/env python #-*- coding: utf-8 -*-
第一行注释事为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释
第二行注释市为了告诉Python解释器按照UTF-8编码读取源代码,否则在源代码中写的中文输出可能会有乱码(python2遇见中文会报错,python3默认支持中文)
cmd命令行默认编码为GBK
注意:python3已经默认支持中文了,因此如果你的版本是python3不加这句话也是可以的,但是为了程序的可移植性,所以建议在编写程序的时候加上
字符串是以单引号’或双引号”括起来的任意文本
a = ‘ABC’ b = a a = ‘XYZ’ print(b) »>ABC
对变量赋值x = y是把变量x指向真正的对象,该对象是变量y所指向的。随后对变量y的赋值不影响变量x的指向
Python的整数没有大小限制,Python的浮点数也没有大小限制
Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符
len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数
如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串
append:list中追加元素到末尾
insert:把元素插入到指定的位置
pop():删除list末尾的元素
pop(i):删除指定位置的元素
classmates[1] = ‘Sarah’:某个元素替换成别的元素
list里面的元素的数据类型可以不同,list元素也可以是另一个list
tuple一旦初始化就不能修改(如果元素是列表可以变,但是指向不变)
只有1个元素的tuple定义时必须加一个逗号
input()返回的数据类型是str
range()函数,可以生成一个整数序列,再通过list()函数可以转换为list
要特别注意,不要滥用break和continue语句
注意:返回None的时候Python的交互环境不显示结果
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的
注意:不可变对象永远不变,变的是不同的指向
函数:
可以在交互式命令行通过help(abs)查看abs函数(取绝对值)的帮助信息
max()可以接收任意多个参数,并返回最大的那个
int()函数可以把其他数据类型转换为整数
把函数名赋给一个变量,相当于给这个函数起了一个“别名”
hex()函数把一个整数转换成十六进制表示的字符串
如果想定义一个什么事也不做的空函数,可以用pass语句,作为占位符,方便后面完善
数据类型检查可以用内置函数isinstance()实现
函数可以返回多个值,但其实就是一个tuple
默认参数可以简化函数的调用
默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误
在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象
定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题
Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上
上面的for循环里,同时引用了两个变量,在Python里是很常见的
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
\>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value
生成器一边循环一边计算,不用一次性生成完成列表,节省内存空间
a, b = b, a + b
直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、set、str等;
一类是generator,包括生成器和带yield的generator function
可以使用isinstance()判断一个对象是否是Iterable对象
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator,把list、dict、str等Iterable变成Iterator可以使用iter()函数
一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数
map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
Python的Lambda表达式的函数体只能有单独的一条语句,也就是返回值表达式语句。其语法如下:
lambda 形参列表 : 函数返回值表达式语句(lambda x: x * x)
下面是个Lambda表达式的例子:
#!/usr/bin/envpython
li=[{"age":20,"name":"def"},{"age":25,"name":"abc"},{"age":10,"name":"ghi"}]
li=sorted(li, key=lambda x:x["age"])
print(li)
如果不用Lambda表达式,而要写成常规的函数,那么需要这么写:
`#!/usr/bin/envpython`
`def comp(x):`
return x["age"]
`li=[{"age":20,"name":"def"},{"age":25,"name":"abc"},{"age":10,"name":"ghi"}]`
`li=sorted(li, key=comp)`
`print(li)