python版本切换
进入python时输入py -2
是进入python2,输入py -3
是进入python3。
pip
首先推荐安装pip这个python包管理工具,它在liunx和windows上都可以使用。有了它,安装各种python模块都很方便。对于python的各种模块,一般直接输入命令 pip install modulename
就可以安装成功。
如numpy模块:
pip install numpy
字符
- python的字符串表示可以用双引号或单引号,都 表示字符串。这种灵活性可以在字符串中包含引号,只要和最外面引号不一样即可。
- str(var)
可把var变为字符串类型。 - int(var)
可把vat变为整型。 - var[1:3]
截取下标1到2的字符。 - var1 in var
返回true or false,var1是否在var中。
注释
1. 单行注释
+ 单行注释是#code。
2. 多行注释
+ 多行注释是'''code'''(三引号,双引号或单引号都可)
列表
注: 同一列表中可以存在任何类型的元素。
table = ["1","2","3"];
- 访问最后一个元素:
table[-1]
,倒数第二个table[-2]
,以此类推。 - 添加元素
在列表末尾添加(append)
table.append(var);
在任何位置插入元素(insert)
table.insert(index,var);
//添加元素var使他的下标为index; - 删除元素(del)
- del 删除元素
del table[index];
- pop()弹出并返回列表末尾的元素
var = table.pop();
- pop(index)弹出并返回列表中任一位置的元素
- remove(var)根据值删除元素(只删除第一个出现的值)
table.remove(var)
- del 删除元素
- 合并列表(extend)
list1 = [1,2,3]
list2 = [4,5,6]
list = list1.extend(list2);
list = [1,2,3,4,5,6]; - 排序
- 永久排序
sort()
table.sort();
默认字典序
table.sort(reverse = True);
反字典序 - 临时排序,只是为了输出等,不改变原列表的顺序
sorted()
sorted(table);
//返回排序后的列表
sorted(table,reverse = True);
- 永久排序
- 列表反转
reverse()
table.reverse();
- 列表长度
len()
len(table);
- 转化为列表
list()
比如把一串数字转化为列表:
n = list(range(1,4,2));
//range(1,4,2)是指从1开始每次加2(默认是1)加入数字串,直到数字大于或等于4(不包括4),如果省略第一个参数,那么默认从0开始。 - 列表解析
列表解析是一句话生成一个想要的列表:
squares = [value**2 for value in range(1,11)]
表达式是value**2,for循环为表达式提供值。整个列表的元素就是所有的value**2。(python中**是乘方运算) - 列表切片
列表切片其实就是截取列表的一部分使之成为一个新的列表
n = [1,2,3,4,5];
n = n[1:3];
意思是取列表n从下标1开始到下标2的这一部分做为一个新的列表赋值给n。 - 复制列表
n = [1,2,3,4];
m = n[:];
这是正确的复制列表,即取n的整个切片,而
n = [1,2,3,4];
m=n;
是错误的,这里m和n指向同一个列表,没达到复制的目的(注意与其他语言的不同) - 判断列表是否为空:
n = [];
if(n);
//python中列表至少有一个元素时返回true - 使用集合函数set()
集合函数set()去除列表中相同的元素:
a = [1,2,3,1];
a = set(a);
//集合去除相同的值,保证集合中的元素各不相同 - 查找列表符合条件的元素个数
- count()
list.count(list[0]);
//返回list中等于list[0]的元素个数 - index()
list.index(value);
//查找列表中值等于value的第一个项的索引(下标)
- count()
- 其他列表相关
- 列表和数字相乘
[1]*3
:上述返回[1,1,1];
[1,1]*3
:上述返回[1,1,1,1,1,1];
- 列表和数字相乘
元组-不可修改的列表
- 元组是小括号()表示。
yz = (200,50);
即yz元组有两个元素200和50;修改元组的值将会报错;如果需要存储不可变的一组值,可以使用元组。 - 遍历元组
和遍历列表一样;
集合
- set():无序不重复元素集,顾名思义。主要做一些交,并等数学运算。集合和字典一样,都是用{}大括号表示。
a = [1,2,2,3];
a = set(a)
{1,2,3}
字典
- 字典是一系列的键值对,其中值可以对应数字,字符串,列表乃至字典等任何python对象。
如:
- 字典定义:
alien = {'color':'green','points':5};
- 利用关键字dict创建字典:
a=dict(boxstyle ="sawtooth",fc="0.8");
>>> {'boxstyle': 'sawtooth', 'fc': '0.8'}
- 访问字典元素:
alien['color'];
- 添加键值对:
alien = {'color':'green','points':5};
alien['x']=0;alien['y']=1;
//添加x,y
注:键值对的添加顺序和排列顺序不同,python不关注键值对的存储顺序,只关注键值对之间的关联关系。 - 删除键值对
del alien['x'];
- 遍历字典
a = ['1':0,'2':3];
for key,value in a.items():
print(key);
print(value);
这里使用了字典的一个方法item(),它返回一个键值对列表。- 当不使用值时,可以只遍历键:
for key in a.keys():
print(key);
这里使用了key()方法,提取键列表。 - 当不使用键时只使用值时,可以只遍历值:
for value in a.values():
print(value);
- 添加键值对:
- 字典长度
- len()
- 字典定义:
循环
for name in array:
print(name);
print(name.title());
注:python是按缩进来区分代码块的,而不是一般语言中的大括号{},所以上面的两个print都是在一个for循环。python中的缩进是非常严格的,不该缩进的缩进还将产生语法错误!- while
while a>=5:
print();
a--;
条件语句
- if-elif-else
if car =="jj":
print();
elif car =="dd":
print();
else:
print();
- and/or
- in/not in
判断元素是(否)在列表中:
>>>n=[1,2,4,8];
>>>"88" in n:
>>>true;
输入
- input()
message = input(some input information);
input获取用户的输入并存入message,参数是显示给用户的信息。以用户输入回车结束。可以输入数字,但是字符串输入时必须用引号括起来,否则报错(python2.7) - raw_input()
和input()不同,raw_input输入字符串时不用引号括起来。其他和input()基本一样。
输出
- print
print 'aaaaa=%d'% a;
print 'aaaaa=%d,%d'% (a,b);
//多个输出需要加括号
函数
- 定义:
def a(b="dd"):
print();
return b;
def 说明这是个函数定义,a是函数名,b是参数并且有个默认值,且为返回值,后面的所有缩进行构成了函数体。
注意:
1.python函数的形参列表必须是先列出没有默认值的,再列出有默认值的。
2.以列表为参数时,函数内对列表的修改都是永久性的.其他参数不一定。如果想传递列表参数而不改变原列表,可以传递列表的副本作为参数,即切片a[:];
- 调用:
a("ff");
- 实参的类型:
- 位置实参
即实参的位置必须与行参的位置一一对应 - 关键字实参
实参的位置不必与行参的位置对应,但必须指明行参的名字, 如:
函数定义:def a(value,key):
调用:a(key =“d”,value=“g”);
- 位置实参
传递任意数量的实参
有时我们不知道函数需要接受多少实参,python中允许函数接受任意数量的实参:- 任意数量的非关键字实参
def a(*value):
这里形参前加了星号,这样无论调用函数时传入多少实参,函数会把这些实参存入元组value。也就是说这里value是一个元组,他接受任意数量的非关键字实参加入。我们就可以通过遍历这个元组来获得传入的实参。
注意:任意数量的形参必须放到最后,python把余下的实参都收集到最后一个行参(元组)中。 - 任意数量的关键字实参
def a(**value):
这里行参前加了两个星号,这样传入任意数量的关键字实参后,都会存入字典value,也就是说这里value是个字典,他接受任意数量的关键字实参加入。
- 任意数量的非关键字实参
将函数存放到文件中并导入
可以将函数存放到文件中,使用时导入这个文件。
比如function.py文件中有一个test()函数:import function
这种方式导入时是导入整个文件,调用函数使用function.test()
from function import test
这种是把特定的函数导入,调用时直接使用test()
from function import *
这种是把文件中的所有函数导入,与导入整个包类似,不过调用时直接test()
- 为了避免有时候函数重名或名字太长,可以给文件或函数起别名:
import function as f;
from function import test as t;
- 在命令行中导入文件后,就可以使用文件中的函数等。但是如果这时你修改了文件,就需要重新导入,即reload(function),注意这个函数必须事先导入过一次文件后才能使用,比如:
import function as f;
reload(f)
注意:只能用这种方式import模块后才能用reload,其他方式不行。
类
- 导入类
类的导入和函数的导入类似,和java中包,类的导入也类似。
文件
- 打开文件
with open(filename) as fileobjectname:
加with后python会在不用文件时自动关闭文件,就不用手动调用close关闭文件了。但with打开的文件对象只能在with代码块内部使用。
这句话的意思是打开filename文件,并把他转化为fileobjectname这个对象。
注:windows中文件路径应该用反斜杠”\”,而linux中用斜杠”/”. - 读取文件
- 全部读取
contents = fileobjectname.read();
注: read()读到文件末尾返回一个空字符串,所以read()读出的内容最后都包含一个空行。可以用函数rstrip()去掉. - 逐行读取
for line in fileobjectname:
print(line);
- 将文件各行存入列表(应对with打开的文件对象只能在with代码块中使用)
lines = fileobjectname.readlines();
这样返回的lines就是一个包含各行的列表。就可以with代码块之外使用了。 - 读取文件的一行
for i in fileobjectname.readline:
//不像readlines返回所有行的一个列表,readline只返回一行
print i;
//依次读取这一行中的每个字符
如果想把每一行都读进来,可以用:
for i in range(32):
//假设共有32行
for j in fp.readline():
这样就可以把每一行的j读进来了。
- 全部读取
- 写入文件
with open(filename,'w') as fileobjectname:
fileobjectname.write(var);
异常
try-except-else
异常可以给用户良好的体验,避免输出traceback。同时可以让程序继续向下面执行。
例1:
try:
print(5/0);
except ZeroDivisionError:
print("wrong");
else:
print("yes");
//这里的else是指当异常不发生时执行else
例2:
except ZeroDivisionError:
pass;
//python中的pass语句可以让程序遇到异常时什么都不做,直接往下运行。
json
- 用户一般不想把整个字符串存到文件中,这就需要以一种数据结构存到文件中,方便处理。比如字典和列表,python中,字典和列表的格式和json格式基本一样,所以用json模块存储数据很方便。
json.dump(data,fileobjectname)
//将数据存入json文件
例:把列表存入json文件
number=[2,3,4,5];
with open(filename,'w') as f:
json.dump(number,f);
json.load(fileobjectname)
//把json文件中的数据读出(自动转化为列表或字典或其他格式)
例:
with open(filename) as f:
number = json.load(f);
//读出的是一个列表
变量类型
- type()
比如a是一个字典则type(a)
返回dict