Python Tutorial
2016-04-11 19:33
447 查看
Python Tutorial
这一章讲了Python的基本语法,从最最开始来讲到数据挖掘所需要的Python知识,可见Joel Grus的良苦用心,在这里最基本的语法就忽略掉了,从稍微有点奇妙的地方开始入手。方法
在python中,定义方法使用def关键字。
def double(x): return x*2
在Python中,方法可以当做变量来使用,如下:
def apply_to_one(f): return f(1) my_double = double print apply_to_one(double) # 值为2
当然了,也可以使用匿名函数,使用
lambda关键字
apply_to_one(lambda x:x+4) # 返回5
方法也可以被给出默认值:
def my_print(message='hello'): print message my_print(message = '12345') #打印出12345 my_print() #打印出hello
当然了,也可以指定参数赋值。
def subtract(a=0, b=0): return a - b print subtract(10, 5) # 5 print subtract(0,5) # -5 print subtract(b=5) # -5
字符串
字符串可以使用单引号,也可以使用双引号。Python语法中也有转义字符:tab_string = "\t" print len(tab_string) # 值为1
当然了,如果我们不想用转义字符,我们可以使用
r""来定义原始字符串。
not_tab_string = r"\t" print len(not_tab_string) #值为2
如果有多行字符串,我们使用
triple-quotes。
s = """sssss afadsfasdfasd dsfasdfasd"""
异常
Python有异常机制:try: print 0/0 except ZeroDivisionError: print "ZeroDivisionError"
列表操作
Python列表有操作检测成员1 in [1,2,3] # True 4 in [1,2,3] # False
列表可以很简单扩展:
x = [1,2,3] x.extend([4,5,6]) print x # [1,2,3,4,5,6]
如果你不想改变x的值,可以这样:
x = [1,2,3] y = x + [4,5,6]
有时候,我们不需要某些值,直接可以这样:
_, y = [1,2] # _就是我们不需要关心的值
元组
元组与列表不同之处在于元组元素不可以被改变,在Python中很容易进行变量交换。x, y = 1,2 x, y = y,x
字典
字典是特别重要的一种数据结构。empty_dict = {} #很好的做法 empty_dict2 = dict() #不太好的做法 grades = {'Joel':80,'Tim':95}
字典中直接通过键来得到对应的值。字典有一个方法当你没有找到键的时候,就会返回一个默认值。
joel_grade = grades.get('Joel',0) # 80 kate_grade = grades.get('kate',0) # 0
我们经常使用字典来作为一个结构数据:
tweet={ 'user':'qwert', 'text':'adgfdag', 'sfdsd':['123','345','456'] } print tweet.keys() #获取键 print tweet.values() #获取值 print tweet.items() #获取键值对
如果判断一个键是否在里面:
'user' in tweet
defaultdict
想象一下,你要统计一篇文档中单词的个数,很明显的做法就是建立一个字典,键为单词,值为个数。document = 'I love my mom I love father haea I hava' document = document.split(' ') word_counts = {} for word in document: if word in word_counts: word_counts[word] += 1 else: word_counts[word] = 1
当然我们可以这样:
word_counts ={} for word in document: try: word_counts[word] += 1 except KeyError: word_counts[word] = 1
还可以这样:
word_counts ={} for word in document: previous_count = word_counts.get(word,0) word_counts[word] = previous_count+1
Counter
在数值计算中,计数很常用。from collections import Counter c = Counter([0,1,2,0]) print c.items() # 返回[(0, 2), (1, 1), (2, 1)]
这样就很容易使用此方法来统计单词的个数了
c = Counter(document)
输出:
c = Counter(document)for word,count in c.items():
print word,count
集合
集合一个最重要的特性就是没有重复元素。s = set() s.add(1) 1 s.add(2) 2 s.add(2) 2
当判断一个元素是否在一个集合里面,最好使用
set。
slist = ['a','an','ann','e'] print 'an' in slist # 这是对的,但需要检查每一个元素 s = set(slist) print 'an' in s # 更加快
控制流程图
我们一般使用if else来作为控制语句。更一般的,我们可以使用:
p = 'even' if x%2==0 else 'odd'
有点高级的用法
排序
x = [4,1,2,3] y = sorted(x) # [1,2,3,4] 但是x没有改变 x.sort() # x改变了
一般的,
sort采用从小到大排序,如果你想从大到小排序,指定
reverse=True就可以了。还可以自定义排序。
x = sorted([-4,1,-2,3],key=abs,reverse=True) #[-4,3,-2,1] 根据绝对值的大小来排序。 wc = sorted(word_counts.items(), key=lambda (word,count):count,reverse=True) # 指定根据计数的大小排序。
列表生成式
在列表操作中,有通过生成式来得到列表:even_numbers = [x for x in range(5) if x%2==0] #[0,2,4] squares = [x*x for x in range(5)] # [0,1,4,9,16] even_squares = [x*x for x in even_numbers] #[0,4,16]
也可以将列表改成字典:
squares_dict = {x:x*x for x in range(5)}
如果不关心里面的值,可以这样:
zeros = [0 for _ in even_numbers]
当然了,也可以使用多个
for。
pairs = [(x,y) for x in range(10) for y in range(10)]
迭代器
列表操作是特别耗内存的,有时候还会超出内存。这时候我们使用迭代器,使用关键字yield。def lazy_range(n): i = 0 while i < n: yield i i += 1 for i in lazy_range(5): print i
随机数
import random four_uniform_randoms = [random.random() for _ in range(4)]
还可以生成定义区域空间内的随机数
random.randrange(10) random.randrange(1,4)
可以打乱数字的位置:
up_to_ten = range(10) random.shuffle(up_to_ten) #[5, 1, 2, 4, 3, 8, 7, 9, 6, 0]
如果你想在一个列表中随机选择一个元素,可以使用
random.choice。
my_best_friend = random.choice(['Alice','Tom','Charlie'])
如果你想选择一批不重复的数据,可以使用
random.sample。
lottery_numbers = range(50) winning_numbers = random.sample(lottery_numbers,6) #[47, 0, 34, 27, 25, 37]
如果可以选择可以重复的数据,可以使用random.choice。
for_with_replacement = [random.choice(range(10)) for _ in range(4)]
正则表达式
import re print not re.match("a","cat") #True print re.search("a","cat") #True print not re.search("c",'dog') #True print re.split("[ab]","carbs") #3 print re.sub("[0-9]","-","R2D2") #R-D-
面向对象编程
这本书中,为了说明面向对象的思想,做了一个set集合的类,也算是帮助我们掌握面向对象思想吧。首先,集合可以添加元素,删除元素,判断一个元素是否在集合里面,并完成方法。
class Set(object): """docstring for Set""" def __init__(self, values=None): self.dict = {} if values is not None: for value in values: self.add(value) def __repr__(self): return "Set:"+str(self.dict.keys()) def add(self, value): self.dict[value] = True def contains(self, value): return value in self.dict def remove(self, value): del self.dict[value] s = Set([1,2,3]) print s #Set:[1, 2, 3] s.add(4) print s.contains(4) #True s.remove(3) print s.contains(3) #False
函数功能
python中的函数有很多功能,有map,reduce和
filter.
def double(x): return 2 * x xs = [1,2,3,4] twice_xs = [double(x) for x in xs] #[1,4,9,16] twice_xs = map(double, xs) #同上
如果提供多个参数,也可以:
def multiply(x,y): return x * y products = map(multiply, [1,2],[3,4]) print products #[3,8]
使用filter过滤:
def is_even(x): return x%2==0 x = range(10) print filter(is_even, x)
还有:
reduce
x_product = reduce(multiply,xs) #返回 1*2*3*4 = 24
在对列表进行遍历的时候,不要忘了
enumerate.可以同时得到下标和值。
s = [1,3,4,5] for i,v in enumerate(s): print i,v
zip操作和参数解析
list1 = ['a','b','c'] list2 = [1,2,3] zip(list1,list2) #[('a', 1), ('b', 2), ('c', 3)]
也可以解析:
pairs = [('a', 1), ('b', 2), ('c', 3)] letters, numbers = zip(*pairs)
高级函数
def doubler(f): def g(x): return 2 * f(x) return g def f1(x): return x+1 g = doubler(f1) print g(3) # 8
还有一些参数表达式。
def magic(*args, **kwargs): print args print kwargs magic(1,2,key="word",key2='word2') #(1, 2) {'key2': 'word2', 'key': 'word'}
这里,args是一个元组类型,kwargs是一个字典数据类型。
def other_way_magic(x,y,z): print x+y+z x_y_list = [1,2] z_dict = {'z':3} other_way_magic(*x_y_list,**z_dict)
一个星号解析列表,2个星号解析字典。
到这里,这本书的Python基本语法介绍完了。
相关文章推荐
- python学习笔记1
- Python常用的爬虫技巧
- Python urllib简单使用
- python的numpy和matplotlib包的安装
- 用Python计算MIC值
- 执行python脚本报错No module named requests解决方法
- python发布及调用基于SOAP的webservice
- python学习8
- Python变量与数据类型
- python 包管理工具pip安装与使用
- Python3处理文件中每个词的方法
- Python学习笔记(五)函数
- python几个轻量级web框架
- python中的list、dict、string基本操作
- python使用mysql数据库
- python学习7
- Ubuntu环境下python安装dlib模块
- 【Python】Python2.7 编码问题:'ascii' codec can't encode characters in position 的解决方案
- 【Python 学习】多进程
- Python中time模块详解(转)