Python是一门面向通用目的高端编程语言。那代码风格是简单清晰。在数据处理行业中,这门语言是当之无愧的第一。

现在说一下2和3的区别。Python 2和Python 3都比较常用,但是这两个版本又有一些的区别。只要记得,以后在编程的时候,可能会遇到版本不一而导致程序无法运行的问题就行了。

下来我们可以说一些Python编程中的一些技术细节。

  1. 字符串

首先是字符串,任何语言编程中都离不开字符串。字符串是一些字符的集合。这是集合用单引号或者双引号,包含起来,基本上这两种表示方式没有区别。

'test'

"test"

如果文字中包含多行,需要用三个引号来表示。

'''test another

test'''

"""test another

test"""

下面说一下字符串的操作。

两个字符串相加,直接用加号就可以了。

"Test"+"test2" => “Testtest2”

多个字符串相连,直接用单引号,连起来就可以了。

' a ‘' b ‘' c‘=>' a b c‘

字符串的重复直接用乘号。

‘A’ * 5 ⇒”AAAAA”

字符串的索引和取值。

a=”test”

a[0]=>’t’

索引值为负的话表示从后面取。

a[-2]=>’s’

取一段儿的话,用冒号。

a[0:2]=>”te”, 最后结尾索引不包括在内。

只用冒号表示,取全部字符串。

a[:]=>”test”

只输入右边数值表示从左边第一个字符开始。

a[:2]=>”te”

只输入左边数值表示取到最后。

a[2:]=>”st”

下面是字符串的相关函数。

len() 返回字符串中字符的个数,也就是字符串的长度。

len(a)=>4

字符串儿对象的方法。

split返回的是一个字符串数组。

str=”This is a test”

str.split(“ ”) => [“This”, “is”, “a”, “test”]

这个方法可以输入一个参数,指定最多可以进行多少次的分解。

str.split(“ ”, 1) => [“This”, “is a test”]

这个方法对应的反向操作是join。把一个数组或者列表合成为一个字符串。

‘ ’.join([“This”, “is”, “a”, “test”])=>”This is a test.”

接下来是大小写的操作。分别调用Upper, Lower.

‘a’.Upper()=>’A’

‘A’.Lower()=>’a’

还有一些比较常用的方法:

string.isalnum, 是否是字符或者数字?

string.isalpha, 是否是字符?

string.isdigit, 是否是数字?

string.islower, 是否是小写?

string.isspace, 是否是空格?

string.istitle, 是否第1个字符为大写?

string.isupper是否是大写?

字符串的格式化。

打印用print函数或者命令。

print(‘test’) = > test

print (4+5)=> 9 (Python 3)

用百分号来格式化。

'%s, %s' % ('a1', 'a2') => a1 a2

'{}'.format(2) => 2

'{1} {0}'.format(1, 2) (Python 3)

'2 1'

百分号后面的转义符有:

d/i — 整数
u — 无符号整数
o — 8进制整数
h/H — 16进制整数
f — 浮点型数字
e/E — 用指数表示的浮点型数字
g/G — 用最佳符号表示的浮点型数字
s — 字符串
c — 单个字符
  1. 接下来说一下数字类型数据。

类型和转换

整数类型
数值范围从负20亿到正20亿
int() # 这是取整函数。

int(3.9)=>3

长整型。
如果数字超出了整型的范围就应该用长整型
在数字前面加大写的L来表示长整型整数(如 7L)
长整型因为范围比较大,它会降低程序的运行速度
long() # Python 2
Float 浮点型数字。
最多支持15~16个数字
可以使用指数表示方法 1e3 => 1000
float()

float(3)=>3.0

复数
使用复数函数,可以输入一个复数(比如 complex(1.2, 7)) 或者用j表示虚部 (e.g. 1.2 + 7j)
complex()

数字操作符。

+ 加法。
-减法。
*乘法。
/ 除法
** 指数
% 模运算。
// # Python 3

5 // 2=>2

>> 右移位。
<< 左移位。

函数

abs() 取绝对值。

round() 四舍五入。

divmod() 除法得出商和余数。

divmod(9, 4) =>(2, 1)

pow() 指数运算。

pow (3, 2)=>9

coerce() — 数值类型匹配, 可以从低范围数字类型像高范围数据类型匹配

整数类型 < 常整数类型 < 浮点型 < 复数类型

coerce (1, 2L)=>(1L, 2L)

str() — 转化数字为字符串

玩数字离不开数学模块

import math

math.pi 圆周率。

3.141592653589793

math.sqrt(4) =>2.0 开平方。

  1. 列表。

在Python里面列表和数组没有区别。创建了一个列表,可以用方括号, 可以用list函数。

fruit = ['apple', 'banana', 'orange']

meat = list(['pork', 'beef', 'chicken'])

mix = [123, ['Python', 'SQL'], 'iPhone']

索引和取值

取值方面跟上面的字符串类似。但是要注意,列表是可以修改的,字符串是不可以修改的。

mylist = [1, 2, 3, 4, 5, 6]

mylist[1] = 10

mylist =>[1, 10, 3, 4, 5, 6]

上面的例子,原来的列表被修改过了。这种情况下Python不会重新创建一个列表。你可以同时更新几个元素。

mylist = [1, 2, 3, 4, 5]

mylist[3:5] = [100, 101]

mylist=>[1, 2, 3, 100, 101, 6]

如果被更新的元素长度跟输入的数值不匹配,那么以原先的列表会被收缩或者扩张。

newlist = [1, 2, 3]

newlist[0:2] = [4]

newlist =>[4, 3]

你可以在现有的列表中插入另一个列表。

newlist = [1, 2, 3]

newlist[2] = [2, 2, 2]

newlist=>[1, [2, 2, 2], 3]

如果你把现有的列表,用等号复制给另一个列表,当你修改其中一个列表的时候,两个列表都会被修改, 因为他们始终指向同一个列表。

技术上在Python里面,等号是传递引用的。

x = [1, 2, 3]

y = x

y=>[1, 2, 3]

x[1] = 1000

x=>[1, 1000, 3]

y=> [1, 1000, 3]

如果你想避免这种情况, 你需要用copy模块。

x = [1, 2, 3]

y = x[:]

x[1] = 1000

x=>[1, 1000, 3]

y=>[1, 2, 3]

或者

import copy

x = [1, 2, 3]

y = copy.copy(x)

x[0] = 10

x=>[10, 2, 3]

y =>[1, 2, 3]

删除列表中的元素,你可以用del。

mylist = [1, 2, 3, 4]

del mylist[1]

mylist=>[1, 3, 4]

del mylist[:2]

mylist=>[4]

操作符

你可以用加号来合并两个列表。

a = [1, 2, 3]

b = [4, 5, 6]

a + b=>[1, 2, 3, 4, 5, 6]

你可以用星号来重复一个列表。

a = [1, 2]

a * 2=>[1, 2, 1, 2]

[a] * 2=>[[1, 2], [1, 2]]

可以检查一个列表中是否包含另一个列表。

mylist = [1, 2, 3, 4]

1 in mylist =>True

10 in mylist=> False

列表的相关函数

len() — 返回列表的长度,也就是列表中含有多少个元素。

mylist = [1, 2, 3, 4]

len(mylist)=>4

min() — 返回最小的列表元素。

max() — 返回最大的列表元素。

list() — 把一个tuple转换成一个list, 或者创建一个列表。

mytuple = (1, 2, 3)

list(mytuple)=>[1, 2, 3]

列表的方法

列表的方法会修改它自身, 因此你不需要把列表方法的返回值,返回给另一个变量。

list.append(element) — 在列表中添加一个元素或者另一个列表。

a = [1, 2, 3]

a.append(4)

a=>[1, 2, 3, 4]

b = [7, 8]

a.append(b)

a=>[1, 2, 3, 4, [7, 8]]

list.extend(list) — 在已有的列表尾端添加另一个列表。

a = [1, 2, 3]

b = [7, 8]

a.extend(b) => [1, 2, 3, 7, 8]

list.insert(index, element) — 在列表中指定位置插入一个元素。

a = [1, 2, 3]

a.insert(1, 10)

a=>[1, 10, 2, 3]

list.remove(value) — 删除在列表中出现的第1个指定元素。

a = [1, 2, 3]

a.remove(2)

a=>[1, 3]

list.pop(index) — 返回指定位置的元素,并且把这个元素从列表中删除。

a = [1, 2, 3]

a.pop(1)=>2

a=>[1, 3]

list.sort() — 按照数字顺序或者字符串顺序进行排序。

a = [3, 2, 1]

a.sort()

a=>[1, 2, 3]

list.count(value) — 检查指定的数值在列表中出现的次数。

a = [1, 1, 1, 2, 3,]

a.count(1)=>3

list.index(value) — 返回指定数值的第1个索引。

a = [1, 2, 3, 4]

a.index(2) =>1

列表动态

你可以使用一个for loop来动态的生成一个新的列表, 比如下面的例子是说对老列表中的每个元素取平方。

old = [1, 2, 3, 4, 5]

new = [i**2 for i in old]

new=>[1, 4, 9, 16, 25]

列表动态非常简单,上面的运算过程相当于下面这个:

old = [1, 2, 3, 4, 5]

new = []

for i in old:

... new.append(i**2)

...

new=>[1, 4, 9, 16, 25]

在列表动态里面你还可以使用if条件判断:

old = [1, 2, 3, 4, 5]

new = [i for i i n old if i % 2 == 1]

new=> [1, 3, 5]

列表动态还允许你使用多个for loop。

a = [(i, j) for i in range(2) for j in range(3)]

a=>[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]

  1. Tuple 元组

Tuple 跟列表很类似。只是不能被修改。Tuple主要有下面的好处:

比列表更快

因为无法修改所以能够很好的保护数据

创建purple的方式可以用圆括号来把数据括起来,并不是必须的。

mytuple = 1, 2, 3

type(mytuple)=>

向里面添加数据也很简单,是这样。

mytuple + (7, )=>(1, 2, 3, 7)

也可以用tuple函数,来把一个列表转成一个tuple。

mylist = [1, 2, 3]

tuple(mylist)=>(1, 2, 3)

索引和取值

操作符。

跟列表的操作符是一样的。

函数

跟列表的函数列表也非常类似。

len() — 返回长度

min() — 返回最小值

max() — 返回最大值

tuple() — 把列表转成

方法

既然couple是不可被修改的,列表的一些方法并不适用它。

tuple.count(value) — 计算某个值出现了多少次。

tuple.index(value) 返回某个值的第1个索引

  1. 字典

字典就是一种数据对应的数据结构。

只要是不可改变的值,都可以作为它的键。

获取自己的字典中的数据,不是通过索引,而是通过键值。

创建一个字典用大括号,有冒号来连接键值和对应值。

键值必须是唯一的不可改变的。

mydict = {key1: value1, key2: value2}

索引和取值。

字典通过键值来取值。

dict = {'a': 'apple', 'b': 'banana'}

dict['a']=>'apple'

字典的值是可以改变的,这跟列表有点类似。

dict = {'a': 'apple', 'b': 'banana'}

dict['a'] = 'burger'

dict=>{'a': 'burger', 'b': 'banana'}

可以向字典中添加新的元素对。

dict = {'a': 'apple', 'b': 'banana'}

dict['c'] = 'cat'

dict=> dict = {'a': 'apple', 'b': 'banana', 'c': 'cat'}

字典取值无法像列表那样取一段。

操作符。

in — 这个操作符, 主要是判断某个键值在字典中是否存在, 可以访问字典的键值, 不能用来访问对应的元素值。

dict = {'a': 'apple', 'b': 'banana'}

'a' in dict => True

'apple' in dict =>False

del — 用来删除元素对

dict = {'a': 'apple', 'b': 'banana'}

del dict

dict=>

  1. 函数

len() — 返回字典中元素对的个数。

方法

dict.keys() — 返回字典中的键值列表。

dict.values() — 返回字典中的元素值列表。

dict.items() — 返回字典中元素对的列表。

dict.clear — 清除字典中所有的元素对。

dict = {'a': 'apple', 'b': 'banana'}

dict=>{}

dict.get(key, default = None) 对指定的键值进行取值。

dict = {'a': 'apple', 'b': 'banana'}

dict.get('a') =>'apple'

dict.get('c')

dict.get('c', "doesn't exist") => "doesn't exist"

dict.copy() — 拷贝当前的字典,新生成的字典修改不会影响到原来的字典。

dict = {'a': 'apple', 'b': 'banana'}

dict2 = dict.copy()

dict2=>{'a': 'apple', 'b': 'banana'}

dict['a'] = 'dog'

dict=> {'a': 'cat', 'b': 'banana'}

dict2=> {'a': 'apple', 'b': 'banana'}

dict.update(dict) — 用另外一个字典来更新现有的字典。

dict = {'a': 'apple', 'b': 'banana'}

dict2 = {'a': 'dog', 'b': 'banana', 'c': 'cat'}

dict.update(dict2) =>dict {'a': dog', 'b': 'banana', 'c':'cat'}

  1. 文件

打开操作。

Python可以对文件对象进行操作,open() 可以返回一个文件对象, 然后用读写函数对文件对象进行操作。

参数说明,第1个参数是文件名,你指定打开哪个文件?第2个参数是打开的方式,不填的话是只读。

r — 文件读操作,文件必须存在,否则出错。

w — 文件写操作,如果文件不存在,则会创建新文件。

a — 文件添加内容操作,如果文件不存在也会创建新文件。

r+ — 读写打开文件操作,文件内容不会被删除。

w+ — 读写打开文件操作,文件内容会被删除。

a+ — 读写打开文件操作,文件内容不会被删除,可以指指定缓冲方式:

0 — 不缓冲no buffering

1 — 行缓冲line buffering

其他值代表缓冲的大小。

方法

file.read() — 打开整个文件,返回所有的数据为字符串。

file.readline() — 逐行读取文件。

file.readlines() — 打开整个文件返回文件内容的行列表。

file.write() — 往文件里写入内容。

file.writelines() — 往文件里写入多行数据。

file.close() — 关闭文件。

  1. 管道

Pipe是指一个命令中读取输出数据,或者向一个命令发送输出数据。

Python 用 os 模块中的popen() 函数来创建一个管道。

import os

from os import popen

  1. 条件判断。

x == y — 等于判断。

x != y — 不等于判断。

x > y — 大于判断。

x < y — 小于判断。

x >= y — 大于等于判断。

x < = y — 小于等于判断。

in — 存在判断。

not in — 不存在判断。

is — 完全相同判断。

not is — 不完全相同判断。

is None — 空值判断。

is not None — 非空值判断。

and — 与条件判断。

or — 或条件判断。

not — 非条件判断。

if 如果条件判断。

if expression:

... statement

... elif expression: 其他如果。

... statement

... else:

... statement

注意在if后面的冒号下面有4个空格符。

嵌套

def countdown(n):

if n < 0:

print(Done!)

else:

print(n)

countdown(n-1)

  1. For循环。

for循环用来遍历一个序列中的所有元素。

for name_whatever_you_want in sequence:

statements

如果你想用一个for循环来循环多个序列, 你可以使用这样:

x = [1, 2, 3, 4]

y = [5, 6, 7, 8]

for i in range(len(x)):

... print(x[i], y[i])

1 5

2 6

3 7

4 8

  1. while 循环。

这个循环不是基于序列的。但是也非常有用。

while expression:

statements

跳出循环,需要用break:

while condition_is_true:

break

  1. 函数。

函数是一系列操作的集合。用户可以调用已经定义好的函数,也可以自己定义函数。

函数是非常强大的,它可以允许你重复使用你自己的代码。

要创建一个新的函数,你需要使用这个关键字def。

def function_name(parameter1, parameter2,...):

''' This is the documentation of this function.'''

body area

(return XXX)

参数。

函数的参数放在圆括号内, 对于函数的参数,你可以设定缺省值, 一定要记住一点,设置缺省值的参数一定要放在最后面,对有缺省值的参数,如果你在调用函数的时候设定某个值,函数就会启用你设定的新值。

一个很方便的地方是在你对函数的参数设置的时候,你可以指定函数参数的名字。>>> def count_letter (string, letter = 'a')。

有时候你不知道要往函数里传多少个参数Python语言的设计里面也考虑了这一点,你用星号就可以了。

def max_length(*string)

这个函数会返回所有输入的字符串中,长度最长的那一个。

Python 也允许你输入不指定个数的元素对, 这个地方你需要用双星号

def print_dict(**dict):

  1. map()和lambda

数据对应函数。

使用这种方法,可以简化你的代码。

num = ['1', '2', '3']

letter = ['a', 'b', 'c']

combine = []

for i in range(len(num)):

... combine.append(': '.join((num[i], letter[i])))

...

Combine => ['1: a', '2: b', '3: c']

简单点是这样:

def combine_list(list1, list2):

... return ': '.join([list1, list2])

...

num = ['1', '2', '3']

letter = ['a', 'b', 'c']

list(map(combine_list, num, letter)) => ['1: a', '2: b', '3: c']

Python Lamda操作符有点像列表动态。

两者结合功能非常强大。

num = ['1', '2', '3']

letter = ['a', 'b', 'c']

list(map(lambda list1, list2: ': '.join([list1, list2]), num, letter)) =>['1: a', '2: b', '3: c']

Lambda也可以跟过滤器结合使用。

num = [1, 3, -2, -10, 5]

list(filter(lambda x: x < 0, num))=> [-2, -10]

  1. 模块。

Python语言的核心是非常小而简单的。要让它更加强大,就需要很多额外的模块。数学模块和拷贝模块是经常被用到的。

这些一个个的模块都是由Python语言编写的程序集合单元。

  1. re

正则表达式模块。

是一个非常强大的模块。如果你的程序中经常用到匹配和查找的功能,你可能会需要这个模块。

re.compile() — 创建一个正则表达式对象

re.match() 匹配

re.search()查找

re.split() — 字符串的分解

re.findall() — 找到所有的匹配

在上一期的强大的Python简介中,提到了几个重要的模块,感兴趣的可以去那一篇中找一下。

  1. 异常处理。

在写程序的时候,不管你有多么的小心,总会或多或少的出现一些异常。这个时候我们就需要异常处理。

Python中提供了一种方法可以跟踪你的程序运行异常错误。

一个简单的例子就是除数为0。

x = 1

y = 0

print(x/y)

Traceback (most recent call last):

File "", line 1, in

ZeroDivisionError: division by zero

try:

... print(x/y)

哪里出了错误,一目了然。

怎么样,东西虽然多,对你来说不难吧?