zoukankan      html  css  js  c++  java
  • 2015/8/29 Python基础(3):数值

    数字提供了标量储存和直接访问,是不可更改类型,每次变更数值会产生新的对象。Python支持多种数字类型,包括整型、长整型、布尔型、双精度浮点、十进制浮点和复数。
    在Python中,变量并不是一个盒子,而是一个指针指向装变量值的盒子。对于不可更改类型来说,没办法改变盒子的内容,但是可以指向一个新的盒子。
    我们没办法删除一个数值对象,仅可以不再使用它。内存管理是由Python自己接管的。可以使用del语句来删除引用,但那样的话,这个引用(也就是变量)就不能使用了,除非给它一个新值

    >>> anint = 1
    >>> del anint
    >>> anint
    
    Traceback (most recent call last):
    File "<pyshell#6>", line 1, in <module>
    anint
    NameError: name 'anint' is not defined

    数值类型
    布尔型
    取值范围只有两个值,True和False。
    实际上是整型的子类,但不能再被继承而生成它的子类。数学运算中,True和False分别对应1和0
    由于在Python2中,True和False都不是关键字,所以会出现以下的代码情况

    >>> True, False = False, True
    >>> print True
    False
    >>> print False
    True

    这只是个示例,在实际编程中,不管出现什么情况都不应该这么干。


    整数类型
    Python的标准整数类型是通用的数字类型,在32位机上范围是32位,64位机则是64位。书上说标准整型等价于C的(有符号)长整型,但就我的学习,因为C的标准变更,应该是等价于C的整型。
    而Python的长整型,是一个非常大范围的数,取值范围仅仅与机器支持的内存大小有关。书写时用大写字母L作为后缀标注长整型。
    这里可以用作str()和repr()区别的一个示例

    >>> along = 9999999999L
    >>> str(along)
    '9999999999'
    >>> repr(along)
    '9999999999L'

    可以看到之前提到的str()对人更友好repr()对Python更友好。

    而在Python2.4以后,整型和长整型开始了融合,当整型出现溢出时,就会自动转换为长整型,所以不是特殊的情况下,几乎感觉不到长整型的存在。

    Python的浮点型类似于C的double。可以直接用十进制或者科学计数法表示。
    Python支持复数类型。虚数部分有后缀j或J。写法是real+imagj
    复数是有数值属性的,可以用num.real来调用实部,用num.imag来调用虚部,用num.conjugate()来调用共轭复数。

    运算符
    混合模式运算符
    Python是支持混合模式运算符的,可以将不同类型的数值直接相加。当两个整数相加时,+ 是整数加法,当两个浮点数相加时 + 是浮点数加法,以此类推。非数字类型也可以使用 + 运算符。字符串A + 字符串B表示连接字符串。+ 运算符的多种使用体现了重载概念的应用。
    虽然不能让一个数字和字符串相加,但是不同类型的数字相加是可以的。整数和浮点数相加时,系统会使用浮点数加法。这种强制类型转换遵循以下规则:
      如果一个操作数是复数,另一个被转换成复数
      否则,如果一个操作数是浮点,另一个被转换成浮点
      否则,如果一个操作数是长整型,另一个被转换成长整型
      否则,两者都是普通整数,直接相加。
      此外的,还有不少算术运算符,这里不赘述。

    同时Python对于整数还提供了位运算符,和C语言中一致,对我十分友好。

    数字类型函数
    转换工厂函数int(),long(),float(),complex(),bool().将不同的类型,转换成需要的类型。
    功能函数,Python还有以下的内建函数用于数值运算abs(),coerce(),divmod(),pow(),round()
    abs()是返回参数绝对值,如果是个复数,就返回math.sqrt(num.real**2 + num.imag**2)
    coerce()是一个数据类型转换函数,将两个数值转换成可以运算的数值类型。
    divmod()是发挥一个包含商和余数的元组。也可以用复数和小数作为参数。
    pow()和**都表示幂。一个为内建函数一个为运算符。
    round()用于对浮点数进行四舍五入运算,有一个可选的小数位数参数,可以选择精确位数。
    int(),round(),math.floor()似乎在做同一件事,但int()是截去小数部分,floor()得到最接近原数但小于原数的整数,round()得到最接近原数的整数。
    仅用于整数的函数
    进制转换,oct()和hex()返回8进制和16进制的数
    ASCII转换函数,chr()是接受数值返回字符,ord()是接受字符返回ASCII码值
    同时还有unichr()是接受Unicode码值返回Unicode字符。

    十进制浮点数
    用十进制浮点可以提高一些浮点运算的精度,需要导入decimal模块以便使用Decimal类
    但是Decimal()只能导入字符串。

    random模块,random模块包含多个伪随机数发生器,以当前时间为随机数种子,产生随机数。
    有以下几个函数:

    >>> import random
    >>> random.random()#随机生成一个0到1之间的浮点数
    0.015119438297251486
    >>> random.uniform(10,20)#随机生成两个参数范围内的浮点数
    15.620562881753816
    >>> random.uniform(20,10)#参数大小部分先后
    18.444370827768715
    >>> random.randint(10,20)#随机生成两个参数范围内的整数
    18
    >>> random.randint(10,20)#参数大小不分先后
    11
    >>> random.randrange(1,100,15)#参数分别为(start,stop,step)
    16
    >>> random.choice("abcdefg")#序列里随机获取一个元素
    'g'
    >>> list = [1, 2, 3, 4, 5, 6, 7]
    >>> random.shuffle(list)#打乱列表的元素
    >>> print list
    [4, 6, 7, 5, 1, 3, 2]
    >>> random.sample(list,2)#从一个列表中随机截取指定长度
    [3, 4]
  • 相关阅读:
    使用Maven Helper解决Maven依赖冲突
    bzoj 1037[ZJOI2008]生日聚会Party
    bzoj 1031[JSOI2007]字符加密
    bzoj 1029 [JSOI2007]建筑抢修
    bzoj 1025[SCOI2009]游戏
    bzoj 1027[JSOI2007]合金
    bzoj 1024[SCOI2009]生日快乐
    bzoj 1023[SHOI2008]cactus仙人掌图
    bzoj 1022 [SHOI2008]小约翰的游戏John
    bzoj 1021[SHOI2008]Debt 循环的债务
  • 原文地址:https://www.cnblogs.com/SRL-Southern/p/4770105.html
Copyright © 2011-2022 走看看