Boats against the current,borne forward!

Python教程

Posted on By 郑诚

总结

#!/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)