语言说明##
优势:语法简洁
劣势:运行效率低、代码不能加密
适用:网站WEB应用、日常小工具批量工具、模块连接工具
编写方式##
命令行:使用python可进入交互式编辑模式(>>>)
py文件:同样使用python编译
输入输出##
print和raw_input(),raw_input是函数
a = raw_input()
print a
可以在调用raw_input函数的时候添加字符串参数,
这个参数会作为输入时的提示显示在输出设备上
数据类型##
整数
a = 5
浮点
b = 2.5
字符串
c = "abcd" # 双引
d = 'dcba' # 单引
e = """
ab
cd
""" # 折行
f = "\\\n\\" # 转义
g = r"\\\n\\" # 不对转义做处理
h = u"你好世界"# 用于处理中文的unicode
布尔
m = True
n = True and False # 逻辑组合:and、or、not
空
o = None
注意文件中包含中文,编译会不通过,需要在文件顶部追加
# _*_ coding: utf-8 _*_
以表示该文件用UTF8编码,也正因为如此,中文字符串不再需要以unicode编码保存,因为UTF8本身就是支持中文的
强制类型转换
python使用一组全局函数来做类型的强制转换
int(x [,base ]) #将x转换为一个整数
long(x [,base ]) #将x转换为一个长整数
float(x ) #将x转换到一个浮点数
complex(real [,imag ]) #创建一个复数
str(x ) #将对象 x 转换为字符串
repr(x ) #将对象 x 转换为表达式字符串
eval(str ) #用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) #将序列 s 转换为一个元组
list(s ) #将序列 s 转换为一个列表
chr(x ) #将一个整数转换为一个字符
unichr(x ) #将一个整数转换为Unicode字符
ord(x ) #将一个字符转换为它的整数值
hex(x ) #将一个整数转换为一个十六进制字符串
oct(x ) #将一个整数转换为一个八进制字符串
文件开头注释##
用于在Linux/OS X系统中,表示这是一个Python可执行文件
#!/usr/bin/env python
字符串操作##
格式化字符串
类似于C语言的printf调用,只不过不是输出,只是返回字符串
a = "%f"%15.1 # a 等于 "15.1"
b = "%d - %d = %d"%(2, 3, 2 - 3) # b 等于 "2 - 3 = -1"
连接字符串
python使用逗号连接字符串,逗号会变成空格
print "Hello","World"
s = "opteacher"
print "Hello",s
js用+,php用.
列表##
list就是数组,tuple是常数组
ary = [1, 2, 3]
print ary
cary = (4, 5, 6)
print cary
# 因为python是类型不敏感的,所以列表中可以包含不同类型的值
tt = [1, 1.5, True, "abcd"]
print tt
常数组tuple指的是其中元素的指向不能被改变,但元素本身可以变化
列表操作
ary = []
ary.append(1) # 增
ary.pop() # 删
# 不指定下标,就从最后一个元素删起
ary[0] = 2 # 改
print ary[0] # 查
#可以从最后一个元素开始查
# -1 => 最后一个
# -2 => 倒数第二个
# ...
print ary[-1]
如果tuple只有一个元素,写法会和括号运算符冲突
cary = (1) => cary = 1
为了防止这种情况发生,可以在元素后面加个逗号,以明确表示这是一个
cary = (1,)
判断##
没什么可说的
循环##
for
for循环作用于可迭代对象
ary = [1, 2, 3, 4]
for itm in ary:
print itm
使用range函数生成顺序列表,配合for
for i in range(0, 11):#i: 0 -> 10
print i
range函数的第三个参数可以指定其步进
for i in range(1, 11, 2): # 打印奇数
print i
用for循环可以生成复杂列表,称之为【列表生成式】
ary = [i*i for i in range(1, 5)]
print ary
甚至可以和判断做配合
ary = [i + 1 for i in range(1, 10, 2) if i != 5]
print ary
判断一个对象是否是可迭代对象(能被for遍历)
print isinstance(ary, Iterable)
while
没什么可说的
KV表和枚举集##
dict
python中的KV表成为dict,跟json差不多
m = { "a": 10, "b": 20, "c": 50 }
m["d"] = 80 # 增
m.pop("b") # 删
m["a"] = 5 # 改
#a被覆盖
print m["c"] # 查
为了防止访问不存在的key,使用get函数查询
print m["e"] # Exception
print m.get("e")
可以用in判断存不存在这个key
print "e" in m
遍历
#(KEY)
for k in m:
print k,"->",m[k]
#(VALUE)
for v in m.values():
print v
#(ITEM)
for k, v in m.items():
print k,"->",v
set
枚举集,多用于存储不同的值
s = ([0, 1, 2, 3])
m.add(8) # 增
m.remove(2) # 删
# 改
#改不了,只能删了加
for itm in s:# 查
print itm
# 遍历
可变和不可变对象##
一般的固有类型都是不可变对象,修改往往是改变指向。而像list之类的,修改是直接作用在list对象上的
函数##
用def定义
def add(a, b): return a + b
如果没有函数体,可以填写pass
def empty(): pass
返回多个值
def mulRet(): return 5, 10
a, b = mulRet()
#如果用一个变量接受多返回值的函数调用
#会发现其实多返回值的函数返回的是一个tuple
r = mulRet()
print r
可以带默认参数
def sub(a, b = 0): return a - b
print sub(5)
def b(l = []):
l.append("A")
L = []
b(L)
print L
b(L)
print L
#第二次打印的L为多少?
可变参数(用指针接受多参数【开玩笑-_-+】)
def c(*args):
for t in args:
print t
c(1, 2, "abcd")
#可变参数接受的是一个tuple
#关键字参数(其实就是给出KEY和VALUE,在函数内部组成一个dict)
def d(**args):
for k in args:
print k,"->",args[k]
d(a=3, b=4)
注意:默认参数最好填写不可变常值,因为可变的会
被记录到参数变量中,在下一次调用的时候发生错误
递归函数##
自己调用自己,没什么好说的
集合切片##
取子集
#a[from:to[:step]]
ary = [0, 1, 2, 3, 4, 5]
print ary[1, 3]
#不指定from,则默认从0开始
#不指定to,则默认取到最后一个元素
#也可以用负数下标(但取只能正向取)
print ary[-2:-1]
集合迭代##
遍历的方式
list可以使用enumerate()函数获取列表索引和值得映射表
ary = [0, 1, 2, 3, 4]
for idx, val in enumerate(ary):
print idx,"->",val
#这里enumerate函数返回的就是一个迭代器
跟list一样,dict也有一组迭代器用于遍历
map = { "a": 0, "b": 1, "c": 2 }
for val in map.itervalues():
print val
for k, v in map.iteritems():
print k,"->",v
跟values()和items()不同,iterXXX()函数不会为for循环从新构造集合,而是在迭代器的基础上做遍历
生成器##
跟迭代器一样,只不过元素需要通过调用next函数一个个被提取出来
简单生成器跟定义列表生成式相似
g = (x*x for x in range(1, 5))
for i in g:
print i
生成器函数
def g(max):
i = 0
while i <= max:
yield i
i = i + 1#python居然没有自加自减
for i in g(6):
print i