Python基础教程

Posted by Kerwen Blog on March 18, 2016

参考资料:
http://www.runoob.com/python/python-tutorial.html
http://www.runoob.com/python3/python3-tutorial.html

语法

标识符

标识符由字母、数字、下划线组成,但不能以数字开头。
标识符是区分大小写的。

行和缩进

学习Python与其他语言最大的区别就是,Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。

多行语句

可以使用斜杠( \)将一行的语句分为多行显示,如下所示:

1
2
3
4
total = item_one + \

    item_two + \   
    item_three   

注释

单行注释采用 # 开头
多行注释使用三个单引号(‘’‘)或三个双引号(“””)。

等待用户输入

下面的程序在按回车键后就会等待用户输入:

1
input("\n\nPress the enter key to exit.")

代码组

缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。

1
2
3
4
5
6
if expression : 
	suite 
elif expression :  
	suite  
else :  
	suite 

变量类型

Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程。
每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

标准数据类型

Python有五个标准的数据类型:

1
2
3
4
5
Numbers(数字)
String(字符串)
List(列表)
Tuple(元组)
Dictionary(字典)

数字

数字数据类型用于存储数值。他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。
当你指定一个值时,Number对象就会被创建:

1
2
var1 = 1
var2 = 10

您也可以使用del语句删除一些对象引用。

1
2
del var
del var_a, var_b

Python支持四种不同的数值类型:

1
2
3
4
int(有符号整型)	10      
long(长整型[也可以代表八进制和十六进制])	51924361L   
float(浮点型)	0.0   
complex(复数)	3.14j   

字符串

1
2
3
4
5
6
7
8
str = 'Hello World!'

print str # 输出完整字符串
print str[0] # 输出字符串中的第一个字符
print str[2:5] # 输出字符串中第三个至第五个之间的字符串
print str[2:] # 输出从第三个字符开始的字符串
print str * 2 # 输出字符串两次
print str + "TEST" # 输出连接的字符串

以上实例输出结果:

1
2
3
4
5
6
Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST

列表

列表用[ ]标识, 可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。

1
2
3
4
5
6
7
8
9
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']

print (list) # 输出完整列表
print (list[0]) # 输出列表的第一个元素
print (list[1:3]) # 输出第二个至第三个的元素 
print (list[2:]) # 输出从第三个开始至列表末尾的所有元素
print (tinylist * 2) # 输出列表两次
print (list + tinylist) # 打印组合的列表

以上实例输出结果:

1
2
3
4
5
6
['abcd', 786, 2.23, 'john', 70.2]
abcd
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.2, 123, 'john']

元组

元组是另一个数据类型,类似于List(列表)。
元组用”()”标识。内部元素用逗号隔开。但是元素不能二次赋值,相当于只读列表。

元字典

字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典用”{ }”标识。字典由索引(key)和它对应的值value组成。

1
2
3
4
5
6
7
8
9
10
11
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"

tinydict = {'name': 'john','code':6734, 'dept': 'sales'}

print (dict['one']) # 输出键为'one' 的值
print (dict[2]) # 输出键为 2 的值
print (tinydict) # 输出完整的字典
print (tinydict.keys()) # 输出所有键
print (tinydict.values()) # 输出所有值

输出结果为:

1
2
3
4
5
This is one 
This is two 
{'dept': 'sales', 'code': 6734, 'name': 'john'} 
['dept', 'code', 'name'] 
['sales', 6734, 'john']

运算符

% 取模 - 返回除法的余数
** 幂 - 返回x的y次幂
// 取整除 - 返回商的整数部分

逻辑运算符

and 布尔”与” - 如果x为False,x and y返回False,否则它返回y的计算值。
or 布尔”或” - 如果x是True,它返回True,否则它返回y的计算值。
not 布尔”非” - 如果x为True,返回False。如果x为False,它返回True。

成员运算符

in 如果在指定的序列中找到值返回True,否则返回False。
not in 如果在指定的序列中没有找到值返回True,否则返回False。

1
2
3
4
5
6
7
8
9
10
11
12
13
a = 2
b = 20
list = [1, 2, 3, 4, 5 ];

if ( a in list ):
	print ("Line 1 - a is available in the given list")
else:
	print ("Line 1 - a is not available in the given list")

if ( b not in list ):
	print ("Line 2 - b is not available in the given list")
else:
	print ("Line 2 - b is available in the given list")

身份运算符

is
is是判断两个标识符是不是引用自一个对象
is not
is not是判断两个标识符是不是引用自不同对象

条件语句

1
2
3
4
5
6
7
8
if 判断条件1:
	执行语句1……
elif 判断条件2:
	执行语句2……
elif 判断条件3:
	执行语句3……
else:
	执行语句4……

While循环语句

1
2
3
4
5
6
7
8
9
10
11
12
13
i = 1
while i < 10:   
	i += 1
	if i%2 > 0:     # 非双数时跳过输出
		continue
	print (i)         # 输出双数2、4、6、8、10

i = 1
while 1:            # 循环条件为1必定成立
	print (i)         # 输出1~10
	i += 1
	if i > 10:     # 当i大于10时跳出循环
		break

循环使用 else 语句

在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。

1
2
3
4
5
6
count = 0
while count < 5:
	print (count, " is  less than 5")
	count = count + 1
else:
	print (count, " is not less than 5")

for 循环语句

1
2
3
4
5
6
7
8
9
10
11
for letter in 'Python':     # 第一个实例
	print ('当前字母 :', letter)

fruits = ['banana', 'apple',  'mango']
for fruit in fruits:        # 第二个实例
	print ('当前字母 :', fruit)
	
for index in range(len(fruits)):
	print ('当前水果 :', fruits[index])

print "Good bye!"

数字

数学函数

  函数   返回值  
  abs(x)   返回数字的绝对值,如abs(-10) 返回 10  
  ceil(x)   返回数字的上入整数,如math.ceil(4.1) 返回 5  
  cmp(x, y)   如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1  
  exp(x)   返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045  
  fabs(x)   返回数字的绝对值,如math.fabs(-10) 返回10.0  
  floor(x)   返回数字的下舍整数,如math.floor(4.9)返回 4  
  log(x)   如math.log(math.e)返回1.0,math.log(100,10)返回2.0  
  log10(x)   返回以10为基数的x的对数,如math.log10(100)返回 2.0  
  max(x1, x2,…)   返回给定参数的最大值,参数可以为序列。  
  min(x1, x2,…)   返回给定参数的最小值,参数可以为序列。  
  modf(x)   返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。  
  pow(x, y)   x**y 运算后的值。  
  round(x [,n])   返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。  
  sqrt(x)   返回数字x的平方根,数字可以为负数,返回类型为实数,如math.sqrt(4)返回 2+0j  

随机数函数

  函数   描述  
  choice(seq)   从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。  
  randrange ([start,] stop [,step])   从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省值为1  
  random()   随机生成下一个实数,它在[0,1)范围内。  
  seed([x])   改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。  
  shuffle(lst)   将序列的所有元素随机排序  
  uniform(x, y)   随机生成下一个实数,它在[x,y]范围内。  

字符串

访问字符串中的值
Python不支持单字符类型,单字符也在Python也是作为一个字符串使用。
Python访问子字符串,可以使用方括号来截取字符串,如下实例:

1
2
3
4
5
var1 = 'Hello World!'
var2 = "Python Programming"

print (var1[0])
print (var2[1:5])

运算符

  操作符   描述  
  +   字符串连接  
  *   重复输出字符串  
  []   通过索引获取字符串中字符  
  [ : ]   截取字符串中的一部分  
  in   成员运算符 - 如果字符串中包含给定的字符返回 True  
  not in   成员运算符 - 如果字符串中不包含给定的字符返回 True  
  r/R   原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母”r”(可以大小写)以外,与普通字符串有着几乎完全相同的语法。  
  %   格式字符串  

格式化

1
print ("My name is %s and weight is %d kg!" % ('Zara', 21) )

以上实例输出结果:

1
My name is Zara and weight is 21 kg!

三引号

python中三引号可以将复杂的字符串进行复制:
python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。
一个典型的用例是,当你需要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义将会非常的繁琐。

内建函数

  方法   描述  
  string.capitalize()   把字符串的第一个字符大写  
  string.center(width)   返回一个原字符串居中,并使用空格填充至长度 width 的新字符串  
  string.count(str, beg=0, end=len(string))   返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数  
  string.endswith(obj, beg=0, end=len(string))   检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.  
  tring.expandtabs(tabsize=8)   把字符串 string 中的 tab 符号转为空格,默认的空格数 tabsize 是 8.  
  string.find(str, beg=0, end=len(string))   检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1  
  string.index(str, beg=0, end=len(string))   跟find()方法一样,只不过如果str不在 string中会报一个异常.  
  string.isalnum()   如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False  
  string.isalpha()   如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False  
  string.isdecimal()   如果 string 只包含十进制数字则返回 True 否则返回 False.  
  string.isdigit()   如果 string 只包含数字则返回 True 否则返回 False.  
  string.islower()   如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False  
  string.isnumeric()   如果 string 中只包含数字字符,则返回 True,否则返回 False  
  string.isspace()   如果 string 中只包含空格,则返回 True,否则返回 False.  
  string.istitle()   如果 string 是标题化的(见 title())则返回 True,否则返回 False  
  string.isupper()   如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False  
  string.join(seq)   Merges (concatenates)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串  
  string.ljust(width)   返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串  
  string.lower()   转换 string 中所有大写字符为小写.  
  string.lstrip()   截掉 string 左边的空格  
  max(str)   返回字符串 str 中最大的字母。  
  min(str)   返回字符串 str 中最小的字母。  
  string.partition(str)   有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.  
  string.replace(str1, str2, num=string.count(str1))   把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.  
  string.rfind(str, beg=0,end=len(string) )   类似于 find()函数,不过是从右边开始查找.  
  string.rindex( str, beg=0,end=len(string))   类似于 index(),不过是从右边开始.  
  string.rjust(width)   返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串  
  string.rpartition(str)   类似于 partition()函数,不过是从右边开始查找.  
  string.rstrip()   删除 string 字符串末尾的空格.  
  string.split(str=””, num=string.count(str))   以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串  
  string.splitlines(num=string.count(‘\n’))   按照行分隔,返回一个包含各行作为元素的列表,如果 num 指定则仅切片 num 个行.  
  string.startswith(obj, beg=0,end=len(string))   检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.  
  string.strip([obj])   在 string 上执行 lstrip()和 rstrip()  
  string.swapcase()   翻转 string 中的大小写  
  string.title()   返回”标题化”的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())  
  string.translate(str, del=””)   根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中  
  string.upper()   转换 string 中的小写字母为大写  
  string.zfill(width)   返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0  
  string.isdecimal()   isdecimal()方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。  

列表(Lists)

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型

删除列表元素

可以使用 del 语句来删除列表的的元素

脚本操作符

  表达式   结果   描述  
  len([1, 2, 3])   3   长度  
  [1, 2, 3] + [4, 5, 6]   [1, 2, 3, 4, 5, 6]   组合  
  [‘Hi!’] * 4   [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’]   重复  
  3 in [1, 2, 3]   True   元素是否存在于列表中  
  for x in [1, 2, 3]: print x,   1 2 3   迭代  

函数&方法

  cmp(list1, list2)   比较两个列表的元素  
  len(list)   列表元素个数  
  max(list)   返回列表元素最大值  
  min(list)   返回列表元素最小值  
  list(seq)   将元组转换为列表  
  list.append(obj)   在列表末尾添加新的对象  
  list.count(obj)   统计某个元素在列表中出现的次数  
  list.extend(seq)   在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)  
  list.index(obj)   从列表中找出某个值第一个匹配项的索引位置  
  list.insert(index, obj)   将对象插入列表  
  list.pop(obj=list[-1])   移除列表中的一个元素(默认最后一个元素),并且返回该元素的值  
  list.remove(obj)   移除列表中某个值的第一个匹配项  
  list.reverse()   反向列表中元素  
  list.sort([func])   对原列表进行排序  

元祖

元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号,列表使用方括号。

字典

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

1
d = {key1 : value1, key2 : value2 }

键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

删除字典元素

1
2
3
4
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}; 
del dict['Name']; # 删除键是'Name'的条目
dict.clear();     # 清空词典所有条目
del dict ;        # 删除词典

1) 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
2) 键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行

函数方法

  cmp(dict1, dict2)   比较两个字典元素。  
  len(dict)   计算字典元素个数,即键的总数。  
  str(dict)   输出字典可打印的字符串表示。  
  type(variable)   返回输入的变量类型,如果变量是字典就返回字典类型。  
  radiansdict.clear()   删除字典内所有元素  
  radiansdict.copy()   返回一个字典的浅复制  
  radiansdict.fromkeys()   创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值  
  radiansdict.get(key, default=None)   返回指定键的值,如果值不在字典中返回default值  
  radiansdict.has_key(key)   如果键在字典dict里返回true,否则返回false  
  radiansdict.items()   以列表返回可遍历的(键, 值) 元组数组  
  radiansdict.keys()   以列表返回一个字典所有的键  
  radiansdict.setdefault(key, default=None)   和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default  
  radiansdict.update(dict2)   把字典dict2的键/值对更新到dict里  
  radiansdict.values()   以列表返回字典中的所有值