zoukankan      html  css  js  c++  java
  • Python3 From Zero——{最初的意识:003~数字、日期、时间}

    一、对数值进行取整:round(value,ndigits)

    >>> round(15.5,-1)    #可以取负数
    20.0
    >>> round(15.5,0)    #当某个值恰好等于两个整数间的一半时,取整操作会取到离该值最近的那个偶数上
    16.0
    >>> round(16.5,0)    #如上同例
    16.0

    #float提供17位的精度

    二、对小数进行精确计算:decimal模块(规避float天生的精度误差,但效率低,常用于金融领域)

    >>> a = 1.1
    >>> b = 2.2
    >>> a + b
    3.3000000000000003
    >>> (a + b) == 3.3
    False
    
    >>> from decimal import Decimal
    >>> a = Decimal('1.1')
    >>> b = Decimal('2.2')
    >>> a + b
    Decimal('3.3')
    >>> print(a + b)
    3.3
    >>> print(float(a + b))
    3.3

    三、format()格式化输出:{「参数索引或名称」:「填充符」「对齐方式<>^」「width」「数值千分位,」「精度.ndigits」}.format("a", "b", ...)

    >>> print("{0:=^20,.1f}, {1:+>20}".format(1000.235, 'haha'))
    ======1,000.2=======, ++++++++++++++++haha
    >>> print("{b:=^20,.1f}, {a:+>20}".format(b=1000.235, a='haha'))
    ======1,000.2=======, ++++++++++++++++haha

      '!a' (应用 ascii()),'!s' (应用 str() )和 '!r' (应用 repr() )可以在格式化之前转换值

    >>> print('{!a}'.format('1.001'))
    '1.001'
    >>> print('{!r}'.format('1.001'))
    '1.001'
    >>> print('{!s}'.format('1.001'))
    1.001

      传入一个字典,用中括号( '[]' )访问它的键:

    >>> table = {'a': 10,'b': 20}
    >>> print('a is {1},b is {0}'.format(*table.values()))
    a is 10,b is 20
    >>> print('a is {0[a]},b is {0[b]}'.format(table))
    a is 10,b is 20
    >>> print('a is {a},b is {b}'.format(**table))
    a is 10,b is 20

    四、进制转换

    >>> x = -1234    
    >>> bin(x)    #十进制转二进制
    '-0b10011010010'
    >>> oct(x)    #十进制转八进制
    '-0o2322'
    >>> hex(x)    #十进制转十六进制
    '-0x4d2'
    >>> int(-0x4d2)    #十六进制转十进制
    -1234

    五、Python中大部分和数学相关的模块都适用于复数,但Python的标准数学函数默认不能产生数值,若需要产生复数结果,须使用cmath模块

    >>> import math
    >>> math.sqrt(-1)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: math domain error
    >>> import cmath
    >>> cmath.sqrt(-1)
    1j

    六、正负无穷大(inf、-inf)、NaN(not a number,如两个无穷大之间的运算结果)

    >>> a = float('inf')
    >>> a
    inf
    >>> b = -a
    >>> b
    -inf
    >>> b / 2
    -inf
    >>> 2 / b
    -0.0
    >>> a + b
    nan
    >>> a * b
    -inf
    注1:运算结果根据使用环境判断,inf、-inf具备传染性
    注2:nan会通过所有的操作进行传播,且不会引发任何异常
    注3:对两个nan进行逻辑比较的结果是False,唯一安全检测nan的方法是math.isnan()

    七、处理分数:fractions模块

    #允许用户以分数的形式输入,免去了用户手动将数据转换为float或Decimal对象的麻烦,提升用户体验

    from fractions import Fraction
    >>> a = Fraction(2, 3)
    >>> b = Fraction(4, 5)
    >>> a
    Fraction(2, 3)
    >>> b
    Fraction(4, 5)
    >>> a < b
    True
    >>> a + b
    Fraction(22, 15)
    >>> a * b
    >>> float(a)    #分数转化为浮点数
    0.6666666666666666
    >>> a.numerator    #取分子
    2
    >>> a.denominator    #取分母
    3

    八、大型数组计算:NumPy模块

      #NumPy为Python提供了数组对象,比标准Python中的列表有着更好的性能表现,更加适用于数学计算,底层实现上,NumPy采用和C相同的内存分配方式,即大块的连续内存,其效率通常比math模块中的函数快100倍左右

      NumPy中的数组在进行标量运算时是针对逐个元素进行计算的:

    >>> import numpy as np    #惯例写为np
    >>> ax = np.array([1, 2, 3, 4])
    >>> ay = np.array([10, 12, 13, 14])
    >>> ax * 2
    array([2, 4, 6, 8])
    >>> ax / 2
    array([ 0.5,  1. ,  1.5,  2. ])
    >>> ax * ay
    array([10, 24, 39, 56])
    >>> ax - ay
    array([ -9, -10, -10, -10])

      NumPy中提供了一些“通用函数”集合,可用于math模块中对应函数的替代:

    >>> math.sqrt(4)
    2.0
    >>> np.sqrt(4)    #效率更高
    2.0
    >>> np.sqrt(ay)    #math.sqrt()不能计算数组对象
    array([ 3.16227766,  3.46410162,  3.60555128,  3.74165739])
    >>> np.sin(ax)
    array([ 0.84147098,  0.90929743,  0.14112001, -0.7568025 ])

      NumPy扩展了Python列表的索引功能(尤其是多维数组方面):

    >>> az = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]])
    >>> az
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12],
           [13, 14, 15, 16]])
    >>> az[0:2,2:4]
    array([[3, 4],
           [7, 8]])
    >>> az[0:2,:]
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    >>> az[0:2]
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    >>> az[:,1:3]    #取第2、3两列
    array([[ 2,  3],
           [ 6,  7],
           [10, 11],
           [14, 15]])
    >>> az[,1:3]    #只取列的时候,行部分不能留空!
      File "<stdin>", line 1
        az[,1:3]
           ^
    SyntaxError: invalid syntax

      条件替换(逻辑类似于列表推导式):

    >>> np.where(az>10, 100, 99)
    array([[ 99,  99,  99,  99],
           [ 99,  99,  99,  99],
           [ 99,  99, 100, 100],
           [100, 100, 100, 100]])
    >>> np.where(az>10, az, 99)
    array([[99, 99, 99, 99],
           [99, 99, 99, 99],
           [99, 99, 11, 12],
           [13, 14, 15, 16]])

    九、矩阵与线性代数计算:numpy.matrix

    >>> type(mz)
    <class 'numpy.matrixlib.defmatrix.matrix'>
    >>> mz
    matrix([[ 1,  2,  3,  4],
            [ 5,  6,  7,  8],
            [ 9, 10, 11, 12],
            [13, 14, 15, 16]])
    >>> mz.T    #矩阵行列转置
    matrix([[ 1,  5,  9, 13],
            [ 2,  6, 10, 14],
            [ 3,  7, 11, 15],
            [ 4,  8, 12, 16]])

    十、随机选择:random模块(可用于均匀分布、正态分布、高斯分布等概率分布计算,不可用于加密,加密可用ssl模块)

      从队列中随机选取N个元素:

    >>> b
    [1, 2, 3, 4, 8, 9]
    >>> random.sample(b, 1)
    [2]
    >>> random.sample(b, 1)
    [3]
    >>> random.sample(b, 3)
    [3, 2, 8]
    >>> random.sample(b, 3)
    [4, 9, 2]

      原地打乱元素的顺序:

    >>> o
    [6, 3, 2, 4, 5, 7, 1]
    >>> random.shuffle(o)
    >>> o
    [1, 3, 5, 7, 6, 2, 4]

      产生随机整数:

    >>> random.randint(-100,10)
    -80
    >>> random.randint(-100,10)
    5

      产生0-1之间的随机浮点数:

    >>> random.random()
    0.08408738274480865
    >>> random.random()
    0.3307587395045867

      由N个随机bits所表示的整数(即N位随机二进制数字所表示的int):

    >>> random.getrandbits(10)
    932
    >>> random.getrandbits(10)
    684
    >>> random.getrandbits(100)
    449049712738822352045673826991
    >>> random.getrandbits(100)
    838121576315938044329535728101

    十一、显示当天的日期

    >>> from datetime import datetime
    >>> datetime.today()
    datetime.datetime(2016, 8, 11, 13, 8, 2, 369594)
  • 相关阅读:
    mongodb分布式查询
    MongoDB JAVA API Filters
    mongodb.conf配置文件详解
    mongodb安装配置
    Elasticsearch-2.3.x填坑之路
    C++对象模型详解
    关于虚函数的那些事儿
    关于B树的一些总结
    动态规划问题
    C中的qsort函数和C++中的sort函数的理解与使用
  • 原文地址:https://www.cnblogs.com/hadex/p/5752396.html
Copyright © 2011-2022 走看看