[Learning Python] Chapter 5 Numeric Types

1, 在Python 2.x 中。Python的integer,有两种类型,normal和long。Normal一般是32位的。Long表示无限精度,由计算机决定。若是数字后面有l或者L,这会强制将该数字转换为long类型。但其实,用户没必要这样作,由于Python会在数值溢出的状况下自动将normal的类型转换为long类型。
然而,在Python 3.x中,normal和long合并了,没有区别了。此时不可再在数字尾部加入l或者L了。编程

2,integer能够用十进制(decimal)、十六进制(hexadecimal)、八进制(octal)、二进制(binary)来表示。后面三种在编程领域很常见。
十六进制(hexadecimal):以0x或者0X开头,接0~9或者A~F,大小写没有关系;
八进制(octal):以0o或者0O开头,接0~7;
二进制(binary):以0b或者0B开头,接0~1.
想要将数字转换为十进制的,能够用int(数值)方法:如int(0o100)=64;
想要将数字转换为八进制的,能够用oct(数值)方法,如oct(0x40)= 0o100;
想要将数字转换为十六进制的,能够用hex(数值)方法,如hex(64)= 0x40;
想要将数字转换为二进制的,能够用bin(数值)方法,如bin(64)= 0b1000000;数组

3,使用以下的方法能够将integer I 转换为十六进制数、八进制数、二进制数:
hex(I)、oct(I)、bin(I)。函数

4,复数 complex numbers。由实数+虚数组成。其中,虚数要以j或者J结尾。复数能够没有实数部分。ui

5, str()和repr()这两个方法都是能够将数值转换为字符串,不一样的是,str()对用户比较友好,repr()对Python比较友好。但一般状况下,它们都是相同的。.net

6,在Python中,除法分为三种:
6.1,true:表示真正的除法,返回值包含小数部分,属于float型,而无论除数和被除数是什么类型的数据。跟数学里面的除法概念吻合;
6.2,classic:若是除数或被除数之一是float类型的数据,classic除法的商保留小数部分,为float型数据。而若是除数和被除数皆为integer,则商会去掉小数部分,往下取整(好比,原本是2.6,取整后为2。而原本是-2.7,取整后为-3)。
6.3,floor:这种除法的商会去掉小数部分,向小的方向靠拢。若是除数和被除数皆为integer 类型,这商也是integer。而若是除数和被除数之一是float型,则商也是float型。code

7, 在Python 2.X中,/表示classic型除法,//表示floor型除法。
在Python 3.x中,/表示true型除法,//表示floor型除法。
Python 3.x已经没有classic型除法了。
ps: 若是在Python2.x中想要用到3.x的除法,能够在开头加入这样的statement:orm

from __future__ import division

8,为了让代码在Python2.x和3.x中都兼容,若是须要取整的操做,老是用//比较好。blog

9,在math模块中,提供了floor和trunc的方法。很是有用:ci

>>>import math
>>>math.floor(2.5)   # closest number below value
2
>>>math.floor(-2.5)
-3
>>>math.trunc(2.5)  # truncate fractional part
2
>>>math.trunc(-2.5)
-2
注意:int(I)也有truncate的功能。

10, 在Python中,实部和虚部都是float型的,虚部以j或者J结尾。字符串

11,在Python 2.x中,八进制能够以0开头,可是在Python 3.x中,不能以0开头,必定要以0o或者0O开头!

12,位的运算bitwise operations

<<表示位向左移动
>>表示位向右移动
| 表示或运算
& 表示AND运算
^ 表示异或运算(二者不一样为1,相同为0)

能够用bit_lenth()方法计算二进制数有多少位。或者len(bin())-2。由于len()会包含开头的0b这两位。

13,位的运算对Python这种高级语言不重要,若是须要作不少位运算,应该考虑低级语言如C语言。

14,round()方法能够作小数的四舍五入。如round(3.78)= 4.0, round(3,789, 2) = 3.79, round()里面的第二个参数表示的是保留多少位小数。

15,Python中的pow()函数用来计算指数。好比pow(2,4)=16, 和 2 ** 4同样的结果。

16,Python中,有自带的min和max()方法。min和max方法接受任意个单独的参数。如min(3, 1, 2, 4)= 1.

17,Python中有sum方法,能够将一列数相加起来,可是这列数应该写在括号内做为一个sequence,好比sum((1,2,3,4)) = 10,也能够是这样的sum([1, 2, 3, 4])。

18,abs函数能够取绝对值。

19,在Python中,有三种方法能够计算平方根:

A, math.sqrt(144)   #Module
B, 144 ** .5        #Expression
C, pow(144, .5)    #Built-in

20, 在Python中,计算0.1 + 0.1 + 0.1 – 0.3 并不会获得0这个准确的值。这是因为计算机因为缺乏精确度而没法精确地保存数据引发的。这个时候,decimal模块很好的解决了这个问题,经过调用decimal模块的Decimal构造函数,把数据转换为str型传入,再进行运算,结果就会返回精确的0,以下:

from decimal import Decimal
print Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3')

结果:0.0
若是传入的参数仍然是float型,将没法得到这个结果。

21,使用Decimal()函数的时候。也能够设定全局精确度:

decimal.getcontext().prec = 4  #设定全局精确度为4位小数。

22,使用Fraction()函数,也能够得到和Decimal()同样的精确效果。Fraction()函数位于fractions 模块中,须要先import才可使用。
Fraction(numerator, denominator),会自动的简化分数。
Fraction()还能够将str参数转换为分数,好比Fraction(‘.25’)=Fraction(1, 4)

23, 初始化一个空的set,使用S = set()。建立一个新的set而且赋值,使用 S = {1, 2, 3, 4}。后续若需再想set里面增长item,能够用S.add(‘…’)

24, set的运算,&表示交集,| 表示并集,- 表示差异,> 表示super set,返回布尔值。这些运算必须都是set类型。

25,union也能够用来创造出并集运算。Union里的参数能够是list,能够是set,还能够是tuple。
{1,2, 3}.union([3, 4])
{1,2, 3}.union({3, 4})

26,intersection也能够用来计算交集,参数能够是list,能够是set,还能够是tuple。

27,issubset()函数能够判断某set是不是令一个set的子集

28,set和tuple的区别:

Set在后续能够增长值,减小值,但tuple不能
Set里面的值必须是互不相同的,但tuple能够接受相同的值。
Set能够内嵌tuple,不能内嵌list,dictionary。

http://blog.csdn.net/u0103675...

29,set comprehensions

{x ** 2 for x in [1, 2, 3, 4]}
{16, 1, 4, 9}

30, set能够用来过滤掉重复的item:

>>> L = [1, 2, 1, 3, 2, 4, 5]
>>> set(L)
{1, 2, 3, 4, 5}

31,set的运算:

>>> engineers = {'bob', 'sue', 'ann', 'vic'}
>>> managers = {'tom', 'sue'}
>>> 'bob' in engineers # Is bob an engineer?
True
>>> engineers & managers # Who is both engineer and manager?
{'sue'}
>>> engineers | managers # All people in either category
{'bob', 'tom', 'sue', 'vic', 'ann'}
>>> engineers - managers # Engineers who are not managers
{'vic', 'ann', 'bob'}
>>> managers - engineers # Managers who are not engineers
{'tom'}
>>> engineers > managers # Are all managers engineers? (superset)
False
>>> {'bob', 'sue'} < engineers # Are both engineers? (subset)
True
>>> (managers | engineers) > managers # All people is a superset of managers
True
>>> managers ^ engineers # Who is in one but not both?
{'tom', 'vic', 'ann', 'bob'}
>>> (managers | engineers) - (managers ^ engineers) # Intersection!
{'sue'}
相关文章
相关标签/搜索