文章目录
适合的领域
-
Web网站和各种网络服务
-
系统工具和脚本
-
“胶水语言”
解释执行,则是需要一个解释器,它会将我们的一句句解释成机器代码来执行,可以认为是,解释一句,执行一句。在这个过程中,不会生成中间文件。通过对比发现,编译执行,只需要编译一次,多次运行。而解释执行的话,没运行一次程序,都要经过解释器的解释过程。
基础语法
数据类型
注释
#开头
变量
一个变量可以反复被赋予不同类型的数据。
a = 123 # a是整数
print a
a = 'imooc' # a变为字符串
print a
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。
字符串与多行字符串
- 同时有"或者’可以加转义符\
- 不想加转义符可以使用r’ ',但多行情况不能使用
- 多行可以用’’’ ‘’’’,与’Line 1\nLine 2\nLine 3’效果相同
'''Line 1
Line 2
Line 3'''
- 多行不需要转义符也可以用r’’’ ‘’’’
unicode字符串
整数与浮点数
布尔类型
在Python中,布尔类型还可以与其他数据类型做 and、or和not运算,请看下面的代码:
a = True
print a and ‘a=T’ or ‘a=F’
计算结果不是布尔类型,而是字符串 ‘a=T’,这是为什么呢?
因为Python把0、空字符串’'和None看成 False,**其他数值和非空字符串都看成 True,**所以:
True and ‘a=T’ 计算结果是 ‘a=T’
继续计算 ‘a=T’ or ‘a=F’ 计算结果还是 ‘a=T’
List和Tuple类型
list–[]–append、pop
Tuple–()不可变
if、for、while
dict
d = {
‘Adam’: 95,
‘Lisa’: 85,
‘Bart’: 59
}
set
创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:
s = set([‘A’, ‘B’, ‘C’, ‘C’])
,set会自动去掉重复的元素,原来的list有4个元素,但set只有3个元素。
函数
返回值
这样我们就可以同时获得返回值:
x, y = move(100, 100, 60, math.pi / 6)
print x, y
151.961524227 70.0
但其实这只是一种假象,Python函数返回的仍然是单一值:
r = move(100, 100, 60, math.pi / 6)
print r
(151.96152422706632, 70.0)
用print打印返回结果,原来返回值是一个tuple!
但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
定义默认参数
由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:
OK:
def fn1(a, b=1, c=2):
pass
Error:
def fn2(a=1, b):
pass
定义可变参数
切片
取前N个元素,也就是索引为0-(N-1)的元素,可以用循环:
r = []
n = 3
for i in range(n):
r.append(L[i])
r
[‘Adam’, ‘Lisa’, ‘Bart’]
对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。
对应上面的问题,取前3个元素,用一行代码就可以完成切片:
>>> L[0:3]
['Adam', 'Lisa', 'Bart']
- 对list进行切片
- 倒序切片
- 对字符串切片
迭代
如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
- 索引迭代
- dict的value迭代
- dict的key和value迭代
首先,我们看看 dict 对象的 items() 方法返回的值:
d = { ‘Adam’: 95, ‘Lisa’: 85, ‘Bart’: 59 }
print d.items()
[(‘Lisa’, 85), (‘Adam’, 95), (‘Bart’, 59)]
可以看到,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:
for key, value in d.items():
… print key, ‘:’, value
…
Lisa : 85
Adam : 95
Bart : 59
和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
列表生成式
- 生成列表
- 复杂表达式
- 条件过滤
- 多层表达式