#3 Python 基本的对象类型(一)

Posted on 2019-10-29 16:48  锐肚肚2001  阅读(384)  评论(0)    收藏  举报

---恢复内容开始---

1、IPO结构

  一个程序的最基本,也是最重要的结构,便是IPO结构。它由  

    Input→Process→Output

  三个流程组成。一切的人机交互程序,都是自输入开始,输出为止。

2、对象的基本类型

  什么叫做对象的基本类型?作为“面向对象”的语言,Python所有的数据都是一个个的对象。而一个对象应该具有三个东西:

  •   一个身份、一个类型和一个值

  因此,我们先从类型来理清楚,python中有哪些类型的对象来组成我们的程序。

  • 数字:int,float,complex,bool
  • 序列:str,list,tuple
  • 集合:set
  • 映射:dict

 

(图片来源:https://www.cnblogs.com/harvyxu/p/8535930.html

 

 

  2.1 帮助函数

    字符串对象应该是我们平时最为常见的对象之一。字符串对象在《达人迷》中被形象的称为“文字常量”,即一个想用就用,呼之即来的常量。但是身为一个常量,它是不可修改的。每一个常量在Python中都有一个固定储存的地址。我们可以通过以下指令来获取常量的地址:

1 #id()的使用
2 >>> id("Hello Python")
3 2953861085040

    类似的,当我们并不清楚一个对象的类型时,我们可以对这些对象进行“查水表”。

    我喜欢叫这些帮助我们查询获取各种信息的函数叫做“帮助函数”。常用的帮助函数有:

    dir( )、help( )、type( )、id( )

 1 >>> dir(math)
 2 ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
 3 >>> help(math.sin)
 4 Help on built-in function sin in module math:
 5 sin(x, /)
 6     Return the sine of x (measured in radians).
 7 >>> id(math)
 8 2953858855064
 9 >>> type(2)
10 <type 'int'>
11 >>> type(int)
12 <type 'type'>

  

图:PYTHON语言的数据类型

     那么,就从对象类型的分类开始吧!我们先来谈谈有哪些种类。

  2.2 数字类型 Numbers

 

     数学中,我们通常称为一个数域它是属于复数域的。但是在Python中,复数域和浮点数被区分的明明白白。

    准确的说,实数中包含了整数与含有小数点的数(注意,含有小数点即为浮点数),故int和float属于实数类型。而复数用单独的complex(实数,虚数)来表示,注意它在计算时会自动给你加上i,所以描写成complex(1,2i)的形式是函数错误的使用方式。

    布尔值只含有0或1,即false和true。这个在我的世界红石系统里面,用红石的开与关可以模拟布尔值。

  2.3 序列类型 Sequences

     序列分为三类:字符串、元组和列表。元组是我最为陌生的一个称呼,所以我百度了元组的由来。

    ——“元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。”

    通俗的来讲,假如这里有一个表格:

    那么,(1,小刘)就是这张表格中的元组之一。ID1,对应着小刘,即表示了两个变量之间的对应关系。可是,如果这个表是三维的呢?我们不难想象,对于三维表格,假如我们固定其中的一个变量,那么剩下的表格就是相对于三位表格的元组。

   序列的可修改性

    人们通常认为我们是电脑的使用者,便能自由的控制序列该填入那些东西。是的,作为程序设计者,当然可以自由的修改序列,但对于程序的使用者来说呢?

    因此,设计一个不可修改的序列是有必要的。为了防止程序被使用者有意无意地修改其中的数据,从而导致程序功能异常,序列是有其可修改性的。通过观察上一张图片,我们不难知道目前我们唯一可修改的序列叫做List。List,中文名又叫“列表”,是所有序列想要修改的必经之处。假如我们想要修改字符串和元组,那么我们就可以巧妙地将他们转化为序列,然后通过修改序列的方式间接修改字符串和元组。

 

     但是,当字符串使用如上操作时,会出现意想不到的bug。

 1 >>> str_="I love this doctor!"
 2 >>> list(str_)
 3 ['I', ' ', 'l', 'o', 'v', 'e', ' ', 't', 'h', 'i', 's', ' ', 'd', 'o', 'c', 't', 'o', 'r', '!']
 4 >>> str_
 5 'I love this doctor!'    #这段代码说明,仅仅使用list()函数而不赋值是不会修改原对象的类型的
 6 >>> str_=list(str_)
 7 >>> str_
 8 ['I', ' ', 'l', 'o', 'v', 'e', ' ', 't', 'h', 'i', 's', ' ', 'd', 'o', 'c', 't', 'o', 'r', '!']
 9 >>> str(str_)
10 "['I', ' ', 'l', 'o', 'v', 'e', ' ', 't', 'h', 'i', 's', ' ', 'd', 'o', 'c', 't', 'o', 'r', '!']"    
11 #发现了吗?原本想要输出'I love this doctor!' ,实际上却输出了"['I', ' ', 'l', 'o', 'v', 'e', ' ', 't', 'h', 'i', 's', ' ', 'd', 'o', 'c', 't', 'o', 'r', '!']"  。

    这个故事告诉我们,不要想当然地面对一切事物。只有通过实践才能出真知,一切联想和类比都只能是猜测。

    那么,究竟用什么办法才能输出它原本对应的字符串呢?

    我们下回分解!