空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。此外,
Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型。Python的注释以 # 开头,后面的文字直到行
尾都算注释# 这一行全部都是注释...print 'hello' # 这也是注释 会输出hello如果一个字符串包含很多需要转义
的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀 r ,表示这是一个raw 字符串,里面的字符就不需要转义了。例如:r'(~_~)/ (~_~)/'
但是r'...'表示法不能表示多行字符串,也不能表示包含'和 "的字符串(为什么?)
如果要表示多行字符串,可以用'''...'''表示:
'''Line 1
Line 2
Line 3'''
上面这个字符串的表示方法和下面的是完全一样的:
'Line 1nLine 2nLine 3'
还可以在多行字符串前面添加 r ,把这个多行字符串也变成一个raw字符串:
r'''Python is created by "Guido".
It is free and easy to learn.
Let's start learn Python in imooc!'''
----------------------------------------------------------------------------------------------------------------------------------------------------------
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'要解释上述结果,又涉及到 and 和 or 运算的一条重要法则:短路计
算。1. 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是True,则整个计算结果必定取决与 b,因此返回 b。2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。list是数学意义上的有序集合,也就是说,list中的元素是按照顺序排列的。构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来,就是一个list对象。通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用
list:classmates = ['Michael', 'Bob', 'Tracy']
print classmates
由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种:
L = ['Michael', 100, True]
索引从 0 开始,也就是说,第一个元素的索引是0,第二个元素的索引是1,以此类推。我们可以用 -1 这个索引来表示最后一个元素,类似的,倒数第二用 -2 表示,倒数第三用 -3 表示,倒数第四用 -4 表示
append()总是把新的元素添加到 list 的尾部。list的 insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素
pop()方法总是删掉list的最后一个元素,并且它还返回这个元素,所以我们执行 L.pop() 后,会打印出这个元素。可以用 pop(2)把索引为2的元素删除
替换: L = ['Adam', 'Lisa', 'Bart'] L[2] = 'Paul'
tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修
改了。创建tuple和创建list唯一不同之处是用( )替代了[ ]。获取 tuple 元素的方式和 list 是一模一样的
t = (1) print t结果为1,因为()既可以表示tuple,又可以作为括号表示运算时的优先级,结果 (1) 被Python解释
器计算出结果 1,导致我们得到的不是tuple,而是整数 1。
正是因为用()定义单元素的tuple有歧义,所以 Python 规定linux移植,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义:t = (1,) print t 结果为(1,)
tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。
即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
注意: Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的3,4行 print 语句就构成一个代码块(但不包括第5行的print)。如果 if 语句判断为 True,就会执行这个代码块。
缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
注意: if 语句后接表达式,然后用:表示代码块开始。
如果你在Python交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车 练习:
score=55
if score >= 60:
score=bytes(score)
print 'passed:'+score
else:
print 'nopass'
age = 8
if age >= 6:
print 'teenager'
elif age >= 18:
print 'adult'
else:
print 'kid'
Python的 for 循环就可以依次把list或tuple的每个元素迭代出来:L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
注意: name 这个变量是在 for 循环中定义的,意思是,依次取出list中的每一个元素,并把元素赋值给 name,然后执行for循环体,这样,遍历一个list或tuple就非常容易了
花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。由于
dict也是集合,len() 函数可以计算任意集合的大小:
可以简单地使用 d[key] 的形式来查找对应的 value
通过 key 访问 dict 的value,如果key不存在,会直接报错:KeyError。要避免 KeyError 发生,有两个办法:一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d:
print d['Paul']
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None
dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。由于dict是按 key 查找,所以,在一个dict中,key不能重复。
dict的第二个特点就是存储的key-value序对是没有顺序的!这和list不一样
dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}要把新同学'Paul'的成绩 72 加进去,用赋值语句 d['Paul'] = 72如果 key 已经存在,则赋值会用新的 value 替
换掉原来的 value
练习:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
for key in d:
print key
print d[key]
print d.get(key)
set 持有一系列元素linux内核网络栈源代码情景分析 pdf,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:s = set(['A', 'B', 'C'])添加重复元素,重复元素最后只存在一个
由于set存储的是无序集合,所以我们没法通过索引来访问。
访问 set中的某个元素实际上就是判断一个元素是否在set中。
s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
Bart是该班的同学吗?'Bart' in s输出True
遍历:
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
for name in s:
print name
输出('Lisa', 85)
('Adam', 95)
('Bart', 59)
添加元素时,用set的add()方法,删除set中的元素时,用set的remove()方法,不存在会报错
在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。return None可以简写为return。
在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple
使用递归函数需要注意防止栈溢出。在计算机中中标linux,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧linux内核网络栈源代码情景分析 pdf,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
Python自带的 int() 函数,其实就有两个参数,int()函数的第二个参数是转换进制,如果不传,默认是十进制
(base=10),如果传了,就用传入的参数。
可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数