[PYTHON] 核心编程笔记之五-Py

发布时间:2019-08-24 09:33:48编辑:auto阅读(1354)

    5.1 数字类型

    创建数值对象和给变量赋值


    anInt = 1

    aLong = -9999999999L

    aFloat = 3.1415926

    aComplex = 1.23+4.56j


    如何更新数字对象

    变量像一个指针指向装变量值的盒子,对不可变类型来说,你无法改变盒子内容,但可以将指针指向一个新盒子,每次将另外的数字赋给变量时,实际上是创建了一个新的对象并把它赋给变量

    anInt += 1

    aFloat = 2.718281828


    如何删除数字对象


    del anInt

    del aLong,aFloat,aComplex


    5.2 整型


    5.2.1 布尔型


    5.2.2 标准整数类型


    0101 84 -237 0x80 017 -680 -0x92


    5.2.3 长整型


    16384L -0x4E8L -2323124 045332423

    29432432 0xDDWAFEGEGREHREHRERTJW -5432432L


    注:用大写字母"L"表示长整型


    >>> aLong = 99999999999l

    >>> aLong

    99999999999L

    >>> print aLong

    99999999999


    5.3 双精度浮点数


    0.0 -777. 1,6 -5.532423423 9.6e3 * 1.0

    4.3e25 float(12) 4.2E-10 -90. -1.609E-19


    5.4 复数

    64.375+1j 4.23-8.5j 0.23-8.55j 1.23e-045+6.7e+089j

    9.82432-8.342432J -.0224+0j


    5.4.1复数的内建属性


    属性描述

    num.real该复数的实部

    num num.imag该复数的虚数

    num.conjugate()返回该复数的共轭复数


    >>> aComplex = -8.333-1.47j

    >>> aComplex

    (-8.333-1.47j)

    >>> aComplex.real

    -8.333

    >>> aComplex.imag

    -1.47

    >>> aComplex.conjugate()

    (-8.333+1.47j)


    5.5 运算符


    5.5.1 混合模式运算符


    >>> 1 + 4.5

    5.5


    5.5.2 标准类型运算符


    >>> 5.2 ==5.2

    True

    >>> -719 >= 833    

    False

    >>> 2 < 5 <9

    True

    >>> 77 > 66 == 66

    True

    >>> 0. < -90.4 < 55.3e2 != 3 <181

    False

    >>> (-1 < 1) or (1 < -1)

    True


    5.5.3 算数运算符

    传统除法

    >>> 1/2 # 地板除

    0

    >>> 1.0/2.0 # 真正除法

    0.5


    真正的除法

    >>> from __future__ import division

    >>> 1 / 2  

    0.5

    >>> 1.0 / 2.0

    0.5


    地板除


    >>> 1 // 2# 地板除,返回整数

    0

    >>> 1.0 // 2.0# 地板除,返回浮点数

    0.0

    >>> -1 // 2# 返回比 -0.5小的整数,也就是 -1

    -1


    取余


    >>> 4%3

    1

    >>> 4%2

    0


    幂运算


    >>> 3**2

    9

    >>> -3 ** 2

    -9

    >>> (-3) ** 2

    9

    >>> 4.0 ** -1.0

    0.25


    Python数值运算的例子:


    >>> -442-77

    -519

    >>> 4 ** 3

    64

    >>> 4.2 ** 3.2

    98.71831395268974

    >>> 8/3

    2.6666666666666665

    >>> 8.0/3.0

    2.6666666666666665

    >>> 8%3

    2

    >>> (60. - 32.) * (5. /9.)

    15.555555555555557

    >>> 14 * 0x04

    56

    >>> 0170 / 4

    30.0

    >>> 0x80 + 0777

    639

    >>> 45L * 22L

    990L

    >>> 16399L + 0xA94E8L

    709879L

    >>> -2147483648L - 52147483648L

    -54294967296L

    >>> 64.375+1j + 4.23-8.5j

    (68.605-7.5j)

    >>> 0+1j ** 2

    (-1+0j)

    >>> 1+1j ** 2

    0j

    >>> (1+1j) ** 2

    2j


    5.5.4 *位运算符(只适用于整数)


    位运算符功能


    -num单目运算,对数的每一位去反,结果为

    num1 << num2Num1 左移 num2位

    num1 << num2Num1 右移 num2位

    num1 & num2Num1 与 num2按位 与

    num1 ^ num2Num1 异或 num2位

    num1 | num2Num1 与 num2位按位 或


    例:

    >>> 30 & 45

    12

    >>> 30 | 45

    63

    >>> 45 & 60

    44

    >>> ~30

    -31

    >>> ~45

    -46

    >>> 45 << 1

    90

    >>> 60 >> 2

    15

    >>> 30 ^ 45

    51


    5.6 内建函数与工厂函数


    5.6.1 标准类型函数

    >>> cmp(-6,2)

    -1

    >>> cmp(-4.33333,-2.7118281828)

    -1

    >>> cmp(0xFF,255)

    0

    >>> str(0xFF)

    '255'

    >>> str(55.3e2)

    '5530.0'

    >>> type(0xff)

    <type 'int'>

    >>> type(9876543210L)

    <type 'long'>

    >>> type(2-1j)

    <type 'complex'>


    5.6.2 数字类型函数


    内建函数示例:

    >>> int(4.25)

    4

    >>>

    >>> int(4.2555)

    4

    >>> long(42)

    42L

    >>> float(4)

    4.0

    >>> complex(4)

    (4+0j)

    >>> complex(2.4,-8)

    (2.4-8j)

    >>> complex(2.3e-10,45.3e4)

    (2.3e-10+453000j)


    数值工厂函数总结


    类(工厂函数)操作

    bool(obj) b返回obj对象的布尔值,也就是obj.__nonzero__()方法的返回值

    int(obj,base=10)返回一个字符串或数值对象的整数表示,类似string.atoi();

    long(obj,base=10)返回一个字符或数据对象的长整数表示,类似string.atol()

    float(obj)返回一个字符串或数据对象的浮点数表示,类似string.atol()

    complex(str) or

    complex(real,imag=0.0)返回一个字符串的复数表示,或者根据给定的实数(及一个可选的虚数部分)生成一个复数对象


    功能函数:

    Python有五个运算内建函数用于数值运算: abs(),coerce(),divmod(),pow()和round()


    abs()返回给定参数的绝对值

    >>> abs(-1)

    1

    >>> abs(10.)

    10.0

    >>> abs(1.2-2.1j)

    2.418677324489565

    >>> abs(0.23-0.78)

    0.55


    函数coerce()返回一个包含类型转换完毕的两个数值元素的元祖


    >>> coerce(1,2)

    (1, 2)

    >>> coerce(1.3,134L)

    (1.3, 134.0)

    >>> coerce(1,134L)

    (1L, 134L)

    >>> coerce(1j,134L)

    (1j, (134+0j))

    >>> coerce(1.23-41j,134L)

    ((1.23-41j), (134+0j))


    divmod()会把除法和取余结合起来组成一个元祖


    >>> divmod(10,3)

    (3, 1)

    >>> divmod(3,10)

    (0, 3)

    >>> divmod(10,2.5)

    (4.0, 0.0)

    >>> divmod(2.5,10)

    (0.0, 2.5)

    >>> divmod(2+1j,0.5-1j)

    ((-0+0j), (2+1j))


    pow()和 ** 都可以进行指数运算


    >>> pow(2,5)

    32

    >>> pow(5,2)

    25

    >>> pow(3.141592,2)

    9.869600294464002

    KeyboardInterrupt

    >>> pow(1+1j,3)

    (-2+2j)


    round()对浮点数进行四舍五入,第二个参数表示精确到小数点多少位,没有表示精确到整数位


    >>> round(3)

    3.0

    >>> round(3.45)

    3.0

    >>> round(3.499999999999)

    3.0

    >>> round(3.499999999999,1)

    3.5

    >>> import math

    >>> for eachNum in range(10):

    ...   print round(math.pi,eachNum) #pi即为π

    ...

    3.0

    3.1

    3.14

    3.142

    3.1416

    3.14159

    3.141593

    3.1415927

    3.14159265

    3.141592654

    >>> round(-3.5)

    -4.0

    >>> round(-3.4)

    -3.0

    >>> round(-3.49)

    -3.0

    >>> round(-3.49,1)

    -3.5


    注:

    int() 直接截去小数部分(返回值为整数)

    floor()得到最接近原数但小于原数的整数(返回浮点数)

    round()得到最接近原数的整数(返回浮点数)\


    >>> for eachNum in (.2,.7,1.2,1.7,-.7,-1.2,-1.7):              

    ...   print "int(%.1f) \t %+.1f" % (eachNum,float(int(eachNum)))

    ...   print "floor(%.1f) \t %+.1f" % (eachNum,math.floor(eachNum))

    ...   print "round(%.1f) \t %+.1f" % (eachNum,round(eachNum))

    ...   print '-' * 20

    ...

    int(0.2)        +0.0

    floor(0.2)      +0.0

    round(0.2)      +0.0

    --------------------

    int(0.7)        +0.0

    floor(0.7)      +0.0

    round(0.7)      +1.0

    --------------------

    int(1.2)        +1.0

    floor(1.2)      +1.0

    round(1.2)      +1.0

    --------------------

    int(1.7)        +1.0

    floor(1.7)      +1.0

    round(1.7)      +2.0

    --------------------

    int(-0.7)       +0.0

    floor(-0.7)     -1.0

    round(-0.7)     -1.0

    --------------------

    int(-1.2)       -1.0

    floor(-1.2)     -2.0

    round(-1.2)     -1.0

    --------------------

    int(-1.7)       -1.0

    floor(-1.7)     -2.0

    round(-1.7)     -2.0

    --------------------


    数值运算内建函数


    函数功能

    abs(num)返回num的绝对值

    coerce将num1和num2转换成同一类型,然后以一个元祖的形式返回

    divmod(num1,num2)除法-取余运算的结合,返回一个元祖(num1/num2,num1%num2),对浮点数和复数的商进行下舍入

    (复数取实数部分的商)

    pow(num1,num2,mod=1)取num1的num2次方,如果提供mod参数,则计算结果再对mod进取余运算

    round(flt,ndig=0)接受一个浮点数fit并对其四舍五入,白村ndig位小数,若不提供ndig参数,则默认小数点后0位

    round()仅用于浮点数.


    5.6.3 仅用于整数的函数


    进制转换函数

    >>> hex(255)

    '0xff'

    >>> hex(4324324)

    '0x41fbe4'

    >>> hex(432432*2)

    '0xd3260'

    >>> oct(255)

    '0377'

    >>> oct(4324324)

    '020375744'

    >>> oct(432432*2)

    '03231140'


    ASCII转换函数


    >>> ord('a')

    97

    >>> ord('A')

    65

    >>> ord('O')

    79

    >>> chr(97)

    'a'

    >>> chr(65L)

    'A'

    >>> chr(48)

    '0'


    仅适用于整数的内建函数


    函数操作

    hex(num)将数字转化成16进制并以字符串输出

    oct(num)将数字转换成8进制并以字符串输出

    chr(num)将ASCII值的数字转换成ASCII字符 范围0<=num<=255

    ord(chr)接受一个ASCII或Unicode字符(长度为1的字符串),返回相应的ASCII或Unicode值

    unichr(num)接受Unicode码值,范围其对应的Unicode字符,所接受的码值范围依赖于你的Python是构建于USC-2还是UCS-4


    5.7.1 布尔"数"


    永恒不变的两个值 True或False

    布尔型是整型的子类,但不能再被继承二生成它的子类

    没有__nonzero__()方法的对象默认是True

    对于值为零的任何数字或空集(空列表,空元祖和空字典等)在Python中布尔值都为False

    在数字运算中,布尔值的True和False分别对应1和0


    #intro

    >>> bool(1)

    True

    >>> bool(True)

    True

    >>> bool(0)  

    False

    >>> bool('1')

    True

    >>> bool('0')

    True

    >>> bool([])

    False

    >>> bool((1,))

    True


    # 使用布尔值


    >>> foo = 42

    >>> bar = foo < 100

    >>> bar

    True

    >>> print bar + 100

    101

    >>> print '%s' % bar

    True

    >>> print '%d' % bar

    1


    # 无 __nonzero__()


    >>> class C: pass

    ...

    >>> c = C()      

    >>> bool(c)

    True

    >>> bool(C)

    True


    慎用:

    >>> True,False = False,True

    >>> bool(True)

    False

    >>> bool(False)

    True


    5.7.2 十进制浮点数


    5.8 相关模块


    模块介绍

    decimal十进制浮点运算类Decimal

    array高效数值数组(字符,整数,浮点数等等)

    math/cmath标准C库数学运算函数,常规数学运算在match模块,复数运算在cmath模块

    operator数学运算符的函数实现,比如 tor.sub(m,n)等价于 m - n

    random多种伪随机数生成器


    核心模块:ramdom

    两个整数参数,返回两者之间的随机整数:

    randrange()随机返回range([start,]stop[,step])结果的一项

    uniform()几乎和randint()一样,不过它返回时两者之间的一个浮点数

    random()类似uniform() 不过下限为0.0 上限为1.0

    choice()随机返回给定序列的一个元素


关键字