您的位置:首页 > 编程语言 > Python开发

Python for Data Analysis (2)

2016-09-11 11:42 417 查看

附录A

pwd


'/Users/momo/code/python/learnpython'


ls


100odd.py            fab.py               leapyear.py
1to100.py            fib_401.py           odd.py
3.30_primenumber.py  fiverings.py         parallel.py
MCMC.py              get_counts.ipynb     printlist.py
Narcissus_number.py  guess8.py            redyellowblue.py
Untitled.ipynb       guess8_1.py          sanyuanfu.py
__init__.py          guess8_2.py          scoreABCD.py
binary_decima.py     guessrandom.py       square.py
color_square.py      hanoi.py             stepstairs.py
countseconds.py      hellowho.py          打飞机框架.txt
decima_bianry.py     ipython_1.py


%run odd.py #会在同一个进程中执行指定的文件中的代码


------------奇偶数------------
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]


a=4;b=5
isinstance(a,(bool,float)) #可以检查多种数据类型,用元组来指定


False


a='abcd'
getattr(a,'split') #访问属性和方法,还有相关的hasattr and setattr


<function str.split>


迭代器(看到这个问题,意外补充的内容)

迭代器就是有一个 next() 方法的对象,而不是通过索引来计数。当你或是一个循环机制(例如 for 语句)需要下一个项时,

调用迭代器的 next() 方法就可以获得它。条目全部取出后,会引发一个 StopIteration 异常,这并不表示错误发生,

只是告诉外部调用者,迭代完成.

不过,迭代器也有一些限制。例如你不能向后移动,不能回到开始,也不能复制一个迭代器.如果你要再次(或者是同时)迭代同个对象,

你只能去创建另一个迭代器对象。不过,这并不糟糕,因为还有其他的工具来帮助你使用迭代器。

reversed() 内建函数将返回一个反序访问的迭代器。enumerate() 内建函数同样也返回迭代器.另外两个新的内建函数,

any() 和 all() ,在 Python 2.5 中新增,如果迭代器中某个/所有条目的值都为布尔真时,则它们返回值为真。

本章先前部分展示了如何在 for 循环中通过索引或是可迭代对象来遍历条目。

同时 Python 还提供了一整个 itertools 模块,它包含各种有用的迭代器.

使用迭代器

序列

try-except语句来处理导常

字典

文件

可变对象和迭代器

如何创建迭代器

序列

#面对序列:列表,元组,字符串
m=iter('abcd')
tuple1=(1,'dkf',3,'adsf')
n=iter(tuple1)


print m.next()
print m.next()
print m.next()
print m.next()
print n.next()
print n.next()
print n.next()
print n.next()


a
b
c
d
1
dkf
adf
adsf


如果这是一个实际应用程序,那么需要把代码放在一个 try-except 块中。序列现在会自动地产生它们自己的迭代器,所以一个 for 循环:

#这里不是很理解!!!

#示例:
for i in seq:
do_something_to(i)

#实际工作方式:
fetch = iter(seq)
while True:
try:
i = fetch.next()
except Stoplteration:
break
do_something_to(i)


try-except语句来处理导常

它如何工作

我们把所有可能引发错误的语句放在try块中,然后在except从句/块中处理所有的错误和异常。except从句可以专门处理单一的错误或异常,或者一组包括在圆括号内的错误/异常。如果没有给出错误或异常的名称,它会处理 所有的 错误和异常。对于每个try从句,至少都有一个相关联的except从句。

如果某个错误或异常没有被处理,默认的Python处理器就会被调用。它会终止程序的运行,并且打印一个消息,我们已经看到了这样的处理。

你还可以让try..catch块关联上一个else从句。当没有异常发生的时候,else从句将被执行。

#如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序:
try:
语句1
语句2
.
.
语句N
except .........:
do something .......


但是你并不知道”语句1至语句N”在执行会出什么样的异常,但你还要做异常处理,且想把出现的异常打印出来,并不停止程序的运行,所以在”except ……”这句应怎样来写呢?

这里总结了一3个方法:

#方法一:捕获所有异常
try:
a=b
b=c
except Excepiton,e:
print Exception,":",e

#方法二:采用traceback模块查看异常
#引入PYTHON中的traceback模块,跟踪错误

import traceback
try:
a=b
b=c
except:
traceback.print_exc()

#方法三:采用sys模块查看异常

import sys
try:
a=b
b=c
except:
info=sys.exc_info()
print info[0],":",info[1]


但是,如果你还想把这些异常保存到一个日志文件中,来分析这些异常,那么请看下面的方法:

把 traceback.print_exc() 打印在屏幕上的信息保存到一个文本文件中

import traceback
try:
a=b
b=c
except:
f=open("c:log.txt",'a')
traceback.print_exc(file=f)
f.flush()
f.close()


字典

字典和文件是另外两个可迭代的 Python 数据类型。字典的迭代器会遍历它的键(keys).

语句 for eachKey in myDict.keys() 可以缩写为 for eachKey in myDict ,例如:

legends = {('Poe','author'): (1809,1849,1976),
('Gaudi','architect'): (1852,1906,1987)}

for eachLegend in legends:
print 'Name:%s Occupation:%s'%eachLegend
print 'Birth:%s Death:%s Album:%s'%legends[eachLegend]


Name:Poe Occupation:author
Birth:1809 Death:1849 Album:1976
Name:Gaudi Occupation:architect
Birth:1852 Death:1906 Album:1987


另外,Python 还引进了三个新的内建字典方法来定义迭代:

myDict.iterkeys() (通过 keys 迭代),myDict.itervalues() (通过 values 迭代),以及 myDicit.iteritems() (通过 key/value 对来迭代)

注意,in操作符也可以用于检查字典的 key 是否存在,之前的布尔表达式myDict.has_key(anyKey) 可以被简写为 anyKey in myDict。

文件

文件对象生成的迭代器会自动调用 readline() 方法。

这样循环就可以访问文本文件的所有行。程序员可以使用 更简单的 for eachLine in myFile 替换 for eachLine in myFile.readlines():

myFile=open(‘config-win.txt’)

for eachLine
b7d7
in myFile:
print eachLine


如何创建迭代器

对一个对象调用 iter() 就可以得到它的迭代器。它的语法如下:

iter(obj)

iter(func,sentinel)

如果传递一个参数给 iter() ,它会检查你传递的是不是一个序列,如果是,那么很简单:

根据索引从 0 一直迭代到序列结束。另一个创建迭代器的方法是使用类,将在第 13 章详细介绍,一个实现了 iter() 和 next() 方法的类可以作为迭代器使用.

如果是传递两个参数给 iter() ,它会重复地调用 func ,直到迭代器的下个值等于sentinel。

#书上内容
def isiterable(obj):
try:
iter(obj)
return True
except TypeError:
return False
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python