python笔记04/18/2017

来源:互联网 发布:android 关闭数据库 编辑:程序博客网 时间:2024/06/08 18:55

1.
面向过程:以指令为中心,由指令处理数据,因此是如何组织代码处理问题
面向过程:以数据为中心,所有代码围绕数据展开,因此是如何设计数据结构组织数据并提供对此类数据所允许的处理操作
欣慰的是:python两者皆满足
2.
在python中一切皆对象,什么是对象?对象是类的实例化,那么什么是类呢?类就是一个属性抽象的集合,其中不仅仅包括数据属性(变量),当然还有方法(函数),这也是为什么python里面用的模块里面help时候都是methods了
3.
每一个对象属于一个类,而类只要有一个方法,则可对此对象加属于类的方法
4.
r\在paython3中

print(range(10))
得出的结果是 range(0,10) ,而不是[0,1,2,3,4,5,6,7,8,9] ,为什么呢?

官网原话:

In many ways the object returned by range() behaves as if it is a list, but in fact it isn’t. It is an object which returns the successive items of the desired sequence when you iterate over it, but it doesn’t really make the list, thus saving space.

We say such an object is iterable, that is, suitable as a target for functions and constructs that expect something from which they can obtain successive items until the supply is exhausted. We have seen that the for statement is such an iterator. The function list() is another; it creates lists from iterables:

翻译:

可以看到上面这个很奇怪,在很多种情况下,range()函数返回的对象的行为都很像一个列表,但是它确实不是一个列表,它只是在迭代的情况下返回指定索引的值,但是它并不会在内存中真正产生一个列表对象,这样也是为了节约内存空间。

我们称这种对象是可迭代的,或者是可迭代对象,还有一种对象叫迭代器,它们需要从一个可迭代对象中连续获取指定索引的值,一直到索引结束。list()函数就是这样一个迭代器,它可以把range()函数返回的对象变成一个列表。

总结:

range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。

list() 函数是对象迭代器,把对象转为一个列表。返回的变量类型为列表。
实例:

>>> t = range(1,5)>>> list(t)[1, 2, 3, 4]

5.
很多新手刚开始学习python的时候经常会看到python 中name = \’main\’ 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中name = ‘main’ 的作用,到底干嘛的?
有句话经典的概括了这段代码的意义:
“Make a script both importable and executable”
意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。
这句话,可能一开始听的还不是很懂。下面举例说明:
先写一个模块:

#module.pydef main():  print "we are in %s"%__name__  # 下列代码只是用来测试当前模块if __name__ == '__main__':   main()

这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in main“,说明我们的if语句中的内容被执行了,调用了main():
但是如果我们从另我一个模块导入该模块,并调用一次main()函数会是怎样的结果呢?

#anothermodle.pyfrom module import mainmain()

其执行的结果是:we are in module
但是没有显示”we are in main“,也就是说模块name = ‘main’ 下面的函数没有执行。
这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。
总结一下:
如果我们是直接执行某个.py文件的时候,该文件中那么”name == ‘main‘“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时name的值就是我们这个py文件的名字而不是main
这个功能还有一个用处:调试代码的时候,在”if name == ‘main‘“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!
强调下’name‘直接访问的永远是当前模块的名称!
6.
dir能够查看相应模块内部所包含的方法(函数)
例如:

import math
dir(mat)

7.

0 0
原创粉丝点击