1. 集合:它不是映射也不是序列,相反,它们是唯一的不可变的对象的无序集合。集合可以通过调用内置set函数而创建,或者使用Python3中心的集合常量和表达式穿件,并且它支持一般的数学集合操作。其实在python3中,集合更像是一个没有值得字典的键。
    #ipython3
    
    In [1]: X = set('spam')
    
    In [2]: Y = {'h','a','m'}
    
    In [3]: X,Y
    Out[3]: ({'a', 'm', 'p', 's'}, {'a', 'h', 'm'})
    
    In [4]: X & Y
    Out[4]: {'a', 'm'}
    
    In [5]: X | Y
    Out[5]: {'a', 'h', 'm', 'p', 's'}
    
    In [6]: X - Y
    Out[6]: {'p', 's'}
    
    In [7]: {x ** 2 for x in [1,2,3,4]}
    Out[7]: {1, 4, 9, 16}
    
  2. 新数值类型:十进制数(固定精度浮点数)和分数(有一个分子和一个分母的有理数)。它们都用来解决浮点数学的局限性和内在的不精准性。
    In [1]: 1 / 3
    Out[1]: 0.3333333333333333
    
    In [2]: (2/3) + (1/2)
    Out[2]: 1.1666666666666665
    
    In [3]: import decimal
    
    In [4]: d = decimal.Decimal('3.141')
    
    In [5]: d + 1
    Out[5]: Decimal('4.141')
    
    In [6]: decimal.getcontext().prec = 2
    
    In [7]: decimal.Decimal('1.00') / decimal.Decimal('3.00')
    Out[7]: Decimal('0.33')
    
    In [8]: from fractions import Fraction  
    
    In [9]: f = Fraction(2,3)
    
    In [10]: f + 1
    Out[10]: Fraction(5, 3)
    
    In [11]: f + Fraction(1,2)
    Out[11]: Fraction(7, 6)
    
  3. 布尔值和None:预定义的True和False对象实际上是定制后以逻辑结果显示的整数1和0。以及长期以来一直支持的特殊占位符对象None(它通常用来初始化名字和对象)。
    In [1]: 1 > 2 , 1 < 2
    Out[1]: (False, True)
    
    In [2]: bool('spam')
    Out[2]: True
    
    In [3]: X = None
    
    In [4]: print(X)
    None
    
    In [5]: L = [None] * 5
    
    In [6]: L
    Out[6]: [None, None, None, None, None]
    
  4. 如何破坏代码的灵活性。内置函数tpye返回的类型对象是赋给该类型的另一个对象的一个对象。结果在Python3中略有不同,因为类型已经完全和类结合起来了。
    In [7]: type(L)
    Out[7]: list
    
    In [8]: type(type(L))
    Out[8]: type
    

    除了允许交互地探究对象,这个函数的实际应用是,允许编写代码来检查它所处理的对象的类型。实际上,在Python脚本中至少有三种方法可以做到这点。

    In [11]: if type(L) == type([]):  
       ....:     print('yes')
       ....:     
    yes
    
    In [13]: if type(L) == list:
       ....:     print('yes')
       ....:     
    yes
    
    In [15]: if isinstance(L,list):
       ....:     print('yes')
       ....:     
    yes
    

    尽管我们提供了所有的类型的检验方法,但其实,在Python程序中这样做基本都是错误的!在代码中检验了特定的类型,实际上破坏了它的灵活性,即 限制它只能使用一种类型工作,而没有这样的检测,代码也许能够使用整个范围的类型工作。这与前面我们讲到的多态的思想有些关联,它是由Python没有类 型声明而发展出来的。在Python中,我们编写对象接口(所支持的操作)而不是类型。不关注与特定的类型意味着代码会自动适应它们中的很多类型:任何具 有兼容接口的对象均能够工作,而不管它是什么对象类型。

  5. 用户自定义的类。
    class Worker:
        def __init__(self,name,pay):
            self.name = name
            self.pay = pay
        def lastName(self):
            return self.name.split()[-1]               //split()默认分割为空格
        def giveRaise(self,percent):
            self.pay *= (1.0 + percent)
    
    bob = Worker('Bob Smith',5000)
    sue = Worker('Sue Jones',6000)
    print(bob.lastName())
    print(sue.lastName())
    print(sue.pay)
    
    Smith
    Jones
    6600.000000000001
    

    隐含的‘self’对象是我们把这叫做面向对象型的原因,即一个类中的函数总是有一个隐含的对象。一般来说,基于类的类型是建立在并使用了核心类型的。

分类: Python3

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注