写这篇文章的原因完全是为了督促自己每天晚上看完两章《Dive Into Python》这本书,因此,很多内容都是摘抄自原书的翻译版或者是自己瞎想,于是就顺带着记录了下来。此前已经看完前两章,是关于Python的由来以及编码格式,安装等问题。接下来,是Python的数据结构。

第三章 内置数据结构

字典类型(Dictionary)

d = {"server":"mpilgrim", "database":"master"}

引用方式为:

d["server"]

注意,在Javascript等脚本语言中,对字典类型(Json格式)的引用方式一般有属性引用和‘.’号引用两种方式,但在Python中,对字典类型的数据对象的引用方式只有这一种。

列表类型(List)

li = ["a", "b", "mpilgrim", "z", "example"]

引用方式:

li[index]

通过下标的方式进行检索。

另外,List支持切片模式,我们甚至可以从负数开始进行检索。

还有一个比较重要的小插曲:

  • 0 为 false; 其它所有数值皆为 true。
  • 空串 ("") 为 false; 其它所有字符串皆为 true。
  • 空 list ([]) 为 false; 其它所有 list 皆为 true。
  • 空 tuple (()) 为 false; 其它所有 tuple 皆为 true。
  • 空 dictionary ({}) 为 false; 其它所有 dictionary 皆为 true。

元组类型(Tuple)

Tuple 是不可变的 list。一旦创建了一个 tuple,就不能以任何方式改变它。

  定义 tuple 与定义 list 的方式相同,但整个元素集是用小括号包围的,而不是方括号。
Tuple 的元素与 list 一样按定义的次序进行排序。Tuples 的索引与 list 一样从 0 开始,所以一个非空 tuple 的第一个元素总是 t[0]
负数索引与 list 一样从 tuple 的尾部开始计数。
与 list 一样分片 (slice) 也可以使用。注意当分割一个 list 时,会得到一个新的 list ;当分割一个 tuple 时,会得到一个新的 tuple。

您不能向 tuple 增加元素。Tuple 没有 appendextend 方法。

您不能从 tuple 删除元素。Tuple 没有 removepop 方法。

您不能在 tuple 中查找元素。Tuple 没有 index 方法。

然而,您可以使用 in 来查看一个元素是否存在于 tuple 中。

格式化字符串

k = "uid"

v = "sa"
"%s=%s" % (k, v)

注意 (k, v) 是一个 tuple。我说过它们对某些东西有用。

您可能一直在想,做了这么多工作只不过是为了做简单的字符串连接。您想的不错,只不过字符串格式化不只是连接。它甚至不仅仅是格式化。它也是强制类型转换。

Python对List有强大的支持,也因为如此,才使得List成为Python中应用最多的数据类型,关键是注意它们的内存分配方式

>>>li = [1, 9, 8, 4]
>>>[elem*2 for elem in li]      
[2, 18, 16, 8]
>>>li                         
[1, 9, 8, 4]
>>>li = [elem*2 for elem in li] 
>>>li
[2, 18, 16, 8]
为了便于理解它,让我们从右向左看。li 是一个将要映射的 list。Python 循环遍历 li 中的每个元素。对每个元素均执行如下操作:首先临时将其值赋给变量 elem,然后 Python 应用函数 elem*2 进行计算,最后将计算结果追加到要返回的 list 中。
需要注意是,对 list 的解析并不改变原始的 list。
将一个 list 的解析结果赋值给对其映射的变量是安全的。不用担心存在竞争情况或任何古怪事情的发生。Python 会在内存中创建新的 list,当对 list 的解析完成时,Python 将结果赋给变量。

if __name__ == "__main__":
    myParams = {"server":"mpilgrim", \
                "database":"master", \
                "uid":"sa", \
                "pwd":"secret" \
                }

注意代码的缩进方式!


第四章 自省的威力

type,str,和内置函数

平时使用type的机会比较多,对于Python的数据类型

>>> a = 10
>>> type(a)
<type 'int'>
>>> b = "hello,world"
>>> type(b)
<type 'str'>
>>> c = {'key':'value'}
>>> type(c)
<type 'dict'>
>>> d =[1,2,3]
>>> type(d)
<type 'list'>
>>> e = (12,3,4,5)
>>> type(e)
<type 'tuple'>
>>> f=0.02
>>> type(f)
<type 'float'>
>>> def fun():print 'hello'>>> type(fun)
<type 'function'>
>>> g =  a = set('abracadabra')>>> type(g)
<type 'set'>
>>> g
set(['a', 'r', 'b', 'c', 'd'])
>>> type(odbchelper)
<type 'module'>

目前想到的就这几种数据结构,当然,每种数据结构下面都封装了若干的方法可以调用

还有漏掉一个

>>> type(True)
<type 'bool'>

原来要求首字符是区分大小写的!

type 可以接收任何东西作为参数并返回它的数据类型。整型、字符串、列表、字典、元组、函数、类、模块,甚至类型对象都可以作为参数被 type 函数接受。  
type 可以接收变量作为参数,并返回它的数据类型。 
type 还可以作用于模块。  
你可以使用 types 模块中的常量来进行对象类型的比较。这就是 info 函数所做的,很快你就会看到

str内置函数用于将其他的数据类型强制转换为字符串

对于简单的数据类型比如整型,你可以预料到 str 的正常工作,因为几乎每种语言都有一个将整型转化为字符串的函数。

str 还允许作用于模块。注意模块的字符串形式表示包含了模块在磁盘上的路径名

str 的一个细小但重要的行为是它可以作用于 None,None 是 Python 的 null 值。这个调用返回字符串 'None'。你将会使用这一点来改进你的 info 函数,这一点你很快就会看到。

info 函数的核心是强大的 dir 函数。dir 函数返回任意对象的属性和方法列表,包括模块对象、函数对象、字符串对象、列表对象、字典对象 …… 相当多的东西。

>>> a = {'key':'value'}
>>> a
{'key': 'value'}
>>> dir(a)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']

我们在Python自带的编译器GUI上弹出某个对象下面的方法反映会比较慢,可以通过调用dir这个函数来实现 可以发现,每个对象的下面,即使是最简单的int类型下面都有很多函数

内置函数

typestrdir 和其它的 Python 内置函数都归组到了 __builtin__ (前后分别是双下划线) 这个特殊的模块中。如果有帮助的话,你可以认为 Python 在启动时自动执行了 from __builtin__ import *,此语句将所有的 “内置” 函数导入该命名空间,所以在这个命名空间中可以直接使用这些内置函数。

    Built-in Functions    
abs() divmod() input() open() staticmethod()
all() enumerate() int() ord() str()
any() eval() isinstance() pow() sum()
basestring() execfile() issubclass() print() super()
bin() file() iter() property() tuple()
bool() filter() len() range() type()
bytearray() float() list() raw_input() unichr()
callable() format() locals() reduce() unicode()
chr() frozenset() long() reload() vars()
classmethod() getattr() map() repr() xrange()
cmp() globals() max() reversed() zip()
compile() hasattr() memoryview() round() __import__()
complex() hash() min() set() apply()
delattr() help() next() setattr() buffer()
dict() hex() object() slice() coerce()
dir() id() oct() sorted() intern()

上面就是Python的内置函数(2.7版本),有兴趣可以看一下。类似于将所有的d对象字符串化的str函数,还有Int函数,dict函数。都是强制类型转换函数

getattr方法

getattr(object, name[, default])

Return the value of the named attribute of object. name must be a string. If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example, getattr(x, 'foobar') is equivalent to x.foobar. If the named attribute does not exist, default is returned if provided, otherwise AttributeError is raised.

转载于:https://www.cnblogs.com/CBDoctor/p/3760375.html

Dive into Python相关推荐

  1. 《Dive Into Python》非死不可

    译者言: 早在 2008 年 8 月,我就曾在自己的博客发表了一篇<为什么<Dive into Python>不值得推荐>(http://blog.csdn.net/lanph ...

  2. 为什么《Dive into Python》不值得推荐

    2010 年 5 月 5 日更新:我翻译了一篇<<Dive Into Python>非死不可>作为对本文观点的进一步支持和对评论的回复,请见:http://blog.csdn. ...

  3. <Dive into Python>大补贴(2)

    赖勇浩(http://laiyonghao.com) 第二贴 在 2.2 节函数声明中,DIP 讲述了关于函数定义的一些基础知识,后来又在 4.2 节使用可选参数和命名参数中讲述了关于函数参数的较为深 ...

  4. <Dive into Python>大补贴(1)

    <Dive into Python>大补贴 作者:赖勇浩 前言 前几日发了一篇<为什么<Dive into Python>不值得推荐>的贴子,有朋友指出这本书虽然不 ...

  5. <Dive into Python>大补贴

    作者:赖勇浩 前言 前几日发了一篇<为什么<Dive into Python>不值得推荐>的贴子,有朋友指出这本书虽然不适合初学者,但里面的一些内容还是可以当作提高篇的,最大的 ...

  6. 深入python3 (Dive Into Python 3) 在线阅读与下载

    在线阅读:http://book.doucube.com/diveintopython3/  中文版 下载地址:https://github.com/downloads/diveintomark/di ...

  7. 深入 Python :Dive Into Python 中文版 读书笔记 第13,14,15单元测试

    2019独角兽企业重金招聘Python工程师标准>>> 第 13 章 单元测试 13.4. 正面测试 (Testing for success) 13.5. 负面测试 (Testin ...

  8. dive into python 3_对象方法Dive into Python读书笔记3

    近期朋友几篇文章介绍了改对象方法的文章. 关联文章的地址 XML,以及网络部份直接跳过了. 单元测试部份很好,但是我前目是小作坊式的发开,更重视效率,所以也略过. 当前有机遇 会返来看这几章的. 1. ...

  9. 对象方法Dive into Python读书笔记3

    近期朋友几篇文章介绍了改对象方法的文章. 关联文章的地址 XML,以及网络部份直接跳过了. 单元测试部份很好,但是我前目是小作坊式的发开,更重视效率,所以也略过. 当前有机遇 会返来看这几章的. 1. ...

最新文章

  1. 你见过最垃圾的代码长什么样?(来长长见识)
  2. [面向对象] ABAP中程序类如何转化成全局类
  3. tomcat java 参数乱码_javaweb乱码(tomcat服务器)
  4. springboot热部署工具
  5. js判断字符串包含某个字符_python str 字符串的逻辑判断用法
  6. Ruby on Rails 通过代理远程安装
  7. 图像学习-验证码识别
  8. SuperMap IS.NET自定义Action添加Mark
  9. qt qlabel 布局重叠_Pyqt5布局管理实例
  10. opencv-api SIFT_create()
  11. javaMail发送邮件设置发件人中文昵称
  12. [精简]托福核心词汇32
  13. 企业证书打包ipa文件(图文详解)
  14. 微信个人号客服系统淘宝客发单机器人sdk服务端接口列表
  15. MySQL 内连接、外连接、全连接
  16. y40.第三章 Kubernetes从入门到精通 -- k8s 资源对象(十三)
  17. sql server 数据库正在使用该文件的解决办法
  18. python3 opencv 基于二值化图像素投影的图片切割方法
  19. 欧洲为何没有很牛掰的互联网公司
  20. eclipse 配置tomcat 启动日志

热门文章

  1. 采用信号量机制实现消费者与生产者的线程同步_Java线程通信
  2. kettle清洗mysql数据_ETL工具Kettle使用以及与Java整合实现数据清洗
  3. bootstrap拖动div_JS组件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)
  4. af_netlink_Linux Netlink通信机制详解(上)
  5. labview和python混编_将数据从LabView发送到Python并取回
  6. python 排列组合_Python计算生态jieba库和random库的综合运用之爬山篇
  7. docker run后台启动命令_Docker命令-docker run
  8. Oracle新建数据库和用户及表空间
  9. aliyun maven 添加jar_Maven介绍及安装
  10. 载波聚合或双连接的方式进行_首发天玑1000+!iQOO Z1来了:5G+5G双卡双待、双WiFi 6...