4.1 Python速成
在开始使用Python之前,需要掌握几个Python语法,以便能够阅读和理解Python代码。
· 基本数据类型和赋值运算。
控制语句。
复杂数据类型。
函数。
接下来会通过一些例子来讲解上述内容。你也可以编写和测试这些内容来加强理解。在这里提醒大家一点,在Python中,空格是有意义的,用来区分代码块。
4.1.1 基本数据类型和赋值运算
作为一个程序员,对数据类型和赋值运算应该非常熟悉。下面简单地通过几个例子介绍一下Python的基本数据类型和赋值运算。
字符串
字符串的简单例子,代码如下:
# 字符串 data='Hello, world!' print(data[0]) print(data[1:5]) print(len(data)) print(data)
在这里要注意print(data[0])和print(data[1:5]),这是字符串操作中对单个字符或指定范围的字符访问的方式。执行结果如下:
H ello 13 Hello, world!
数值
数值的简单例子,代码如下:
# 数值 value=523 print(value) value=6.18 print(value)
执行结果如下:
523 6.18
布尔类型
布尔类型的简单例子,代码如下:
# 布尔类型 true=True false=False print(true) print(false)
执行结果如下:
True False
多变量赋值
Python中的多赋值运算,代码如下:
# 多变量赋值运算 a, b, c=1,'hello',True print(a, b, c) print(a) print(b) print(c)
从程序的可读性上来看,建议不使用或尽量少使用多变量赋值运算。执行结果如下:
1 hello True 1 hello True
空值
在Python中,每一种数据类型都是对象,空值是Python中的一个特殊值,用None表示,表示该值是一个空对象。你可以将None赋值给任何变量,也可以将任何变量赋值给一个None值的对象。代码如下:
# 空值 a=None b=a print(a) print(b)
执行结果如下:
None None
4.1.2 控制语句
在Python中,控制语句主要有三类:条件控制语句、循环语句或条件循环语句。
条件控制语句
条件控制语句的简单例子,代码如下:
# 条件控制语句 value=1 if value==1: print('This is ture') elif value > 10: print('it is bigger than 10? Yes it is true.') else: print('This is false')
执行结果如下:
This is ture
在这里需要注意,每一个条件判断都以冒号(:)结尾,并且通过空格缩进来区分代码块。
循环语句
循环语句打印输出的简单例子,代码如下:
# 循环语句 for i in range(5): print(i)
执行结果如下:
0 1 2 3 4
条件循环语句
条件循环语句输出的简单例子,代码如下:
# 条件循环语句 i=0 while i < 5: print(i) i=i+1
执行结果如下:
0 1 2 3 4
4.1.3 复杂数据类型
在Python中有三种数据类型非常有用,并且会被经常使用到。它们分别是元组、列表和字典,列表和字典更是经常被使用到。
元组
元组是一个只读的集合类型,初始化后,元组的元素不能重新赋值。代码如下:
# 元组 a=(1, 2, 3) print(a) print(a[1])
执行结果如下:
(1, 2, 3) 2
列表
列表与元组类似,只是列表通过中括号定义,而且列表的元素可以重新赋值。对列表增加列表项使用列表的append()函数。代码如下:
# 列表 a=[1, 2, 3] print(a) # 增加列表项 a.append(4) print(a) print(a[3]) # 更新列表项 a[2]=5 print(a) fori ina: print(i)
执行结果如下:
[1, 2, 3] [1, 2, 3, 4] 4 [1, 2, 5, 4] 1 2 5 4
字典
字典是另一种可变容器模型,且可存储任意类型的对象。字典的每个键值对(key,value)用冒号(:)分隔,每个键值对之间用逗号(,)分隔,整个字典包括在花括号({})中。代码如下:
# 字典 mydict={'a': 6.18, 'b': 'str', 'c': True} print('A value: %.2f'% mydict['a']) # 增加字典元素 mydict['a']=523 print('A value: %d'% mydict['a']) print('keys: %s'% mydict.keys()) print('values: %s'% mydict.values()) forkey inmydict: print(mydict[key])
执行结果如下:
A value: 6.18 A value: 523 keys: dict_keys(['a', 'b', 'c']) values: dict_values([523, 'str', True]) 523 str True
此外,若删除字典中的全部元素,使用字典自身的clear()方法;若删除字典特定的key元素,用pop(key)方法。
mydict={'a': 6.18, 'b': 'str', 'c': True} # 删除特定元素 mydict.pop('a') print(mydict) # 删除字典中的全部元素 mydict.clear() print(mydict)
执行结果如下:
{'b': 'str', 'c': True} {}
4.1.4 函数
函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。函数能提高应用的模块性和代码的重复利用率。目前我们已经使用了Python提供的许多内建函数,如print()。而且,也可以自己创建函数,即自定义函数。
自定义函数需要遵循以下几个简单的规则:
函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串,用于存放函数说明。
函数内容以冒号起始,并且缩进。
用return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。
下面是一个求和的自定义函数的示例,代码如下:
# 定义函数 def mysum(x, y): "这是自定义函数" return x+y # 测试函数 result=mysum(x=1, y=2) print(result)
执行结果如下:
3
4.1.5 with语句
要使用with语句,首先要明白上下文管理器这一概念。有了上下文管理器,with语句才能工作。
下面是一组与上下文管理器和with语句有关的概念。
上下文管理协议(Context Management Protocol):包含方法__enter__()和__exit__(),支持该协议的对象要实现这两个方法。
上下文管理器(Context Manager):支持上下文管理协议的对象,这种对象实现了__enter__()和__exit__()方法。上下文管理器定义执行with语句时要建立的运行时上下文,负责执行with语句块上下文中的进入与退出操作。通常使用with语句调用上下文管理器,也可以通过直接调用其方法来使用。
运行时上下文(Runtime Context):由上下文管理器创建,通过上下文管理器的__enter__()和__exit__()方法实现。__enter__()方法在语句体执行之前进入运行时上下文,__exit__()方法在语句体执行完毕后从运行时上下文退出。with语句支持运行时上下文这一概念。
上下文表达式(Context Expression):with语句中跟在关键字with之后的表达式,该表达式要返回一个上下文管理器对象。
语句体(with-body):with语句包裹起来的代码块,在执行语句体之前会调用上下文管理器的__enter__()方法,执行完语句体之后会执行__exit__()方法。
Python对一些内建对象进行改进,加入了对上下文管理器的支持,可以用于with语句中,比如可以自动关闭文件、线程锁的自动获取和释放等。假设要对一个文件进行操作,可以使用with语句,代码如下:
with open('somefileName')as somefile:
for line in somefile:
print(line)
# ...more code
这里使用了with语句,不管在处理文件过程中是否发生异常,都能保证with语句执行完毕后关闭了打开的文件句柄。如果使用传统的try/finally范式,则要使用如下代码:
somefile=open('somefileName') try: forline insomefile: print(line) # ...more code finally: somefile.close()
使用with语句,简化了对异常的处理。因此,当需要对异常进行处理时,如果对象遵循了上下文管理协议(Context Management Protocol),建议使用with语句来实现。