当前位置: 首页 > news >正文

Dive into Python

写这篇文章的原因完全是为了督促自己每天晚上看完两章《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

相关文章:

  • ORA-00600错误及其解决方案
  • java-第二章-华氏温度转摄氏温度
  • jprofile学习资料
  • OpenGL基础图形编程 - 复杂物体建模
  • 几道经典C语言面试题
  • Android经典三部曲:
  • 编程语言中的除法
  • Win7_x64下卸载Oracle11g
  • 用jQuery解决弹出层的问题
  • tigase内部处理(2):packet流转
  • SQL Server 2012笔记分享-15:连接到Windows Azure SQL
  • MySql学习 - 基础
  • CC++中的qsort库函数
  • Linux升级Python提示Tkinter模块找不到解决
  • 支持常用的图表、仪表和地图类型的图表控件TeeChart Java for Android
  • [译]如何构建服务器端web组件,为何要构建?
  • Docker下部署自己的LNMP工作环境
  • Elasticsearch 参考指南(升级前重新索引)
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Java知识点总结(JavaIO-打印流)
  • mysql外键的使用
  • python学习笔记 - ThreadLocal
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 简单基于spring的redis配置(单机和集群模式)
  • 今年的LC3大会没了?
  • 区块链分支循环
  • 三栏布局总结
  • 异步
  • 智能合约Solidity教程-事件和日志(一)
  • linux 淘宝开源监控工具tsar
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $NOIp2018$劝退记
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十三)Maven插件解析运行机制
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)一些感悟
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET基础篇——反射的奥妙
  • .NET文档生成工具ADB使用图文教程
  • .Net语言中的StringBuilder:入门到精通
  • [2018-01-08] Python强化周的第一天
  • [4.9福建四校联考]
  • [AAuto]给百宝箱增加娱乐功能
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [BUG] Authentication Error
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测