• python(数字Number)


    数字

    Python 数字数据类型用于存储数值。

    数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间

    Python 支持三种不同的数值类型:

    整型(int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。布尔(bool)是整型的子类型

    浮点型(float) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)

    复数( (complex)) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。

    创建实例

    1.当声明一个对象a后,直接输出会报错

    2.给a进行赋值后,输出结果正确

    结论:实例在变量赋值时 Number 对象将被创建

    数字类型转换

    int(x) 将x转换为一个整数。

    float(x) 将x转换到一个浮点数。

    complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。

    complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。

    python数字运算

    Python 解释器可以作为一个简单的计算器,您可以在解释器里输入一个表达式,它将输出表达式的值。

    表达式的语法很直白: +, -, * 和 /, 和其它语言(如Pascal或C)里一样。例如:

    >>> 2 + 2
    4
    >>> 50 - 5*6
    20
    >>> (50 - 5*6) / 4
    5.0
    >>> 8 / 5  # 总是返回一个浮点数
    1.6

    注意:在不同的机器上浮点运算的结果可能会不一样。

    在整数除法中,除法 / 总是返回一个浮点数,如果只想得到整数的结果,丢弃可能的分数部分,可以使用运算符 // 

    >>> 17 / 3  # 整数除法返回浮点型
    5.666666666666667
    >>>
    >>> 17 // 3  # 整数除法返回向下取整后的结果
    5
    >>> 17 % 3  # %操作符返回除法的余数
    2
    >>> 5 * 3 + 2 
    17

    注意:// 得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。

    >>> 7//2
    3
    >>> 7.0//2
    3.0
    >>> 7//2.0
    3.0
    >>>

    等号 = 用于给变量赋值。赋值之后,除了下一个提示符,解释器不会显示任何结果。

    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900

    Python 可以使用 ** 操作来进行幂运算:

    >>> 5 ** 2  # 5 的平方
    25
    >>> 2 ** 7  # 2的7次方
    128

    变量在使用前必须先"定义"(即赋予变量一个值),否则会出现错误:

    >>> n   # 尝试访问一个未定义的变量
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'n' is not defined

    不同类型的数混合运算时会将整数转换为浮点数:

    >>> 3 * 3.75 / 1.5
    7.5
    >>> 7.0 / 2
    3.5

    数学函数

    函数返回值 ( 描述 )
    abs(x) 返回数字的绝对值,如abs(-10) 返回 10
    ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5

    cmp(x, y)

    如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 Python 3 已废弃,使用 (x>y)-(x<y) 替换
    exp(x) 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
    fabs(x) 返回数字的绝对值,如math.fabs(-10) 返回10.0
    floor(x) 返回数字的下舍整数,如math.floor(4.9)返回 4
    log(x) 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
    log10(x) 返回以10为基数的x的对数,如math.log10(100)返回 2.0
    max(x1, x2,...) 返回给定参数的最大值,参数可以为序列。
    min(x1, x2,...) 返回给定参数的最小值,参数可以为序列。
    modf(x) 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
    pow(x, y) x**y 运算后的值。
    round(x [,n])

    返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。

    其实准确的说是保留值将保留到离上一位更近的一端。

    sqrt(x) 返回数字x的平方根。

    随机数函数

    函数描述
    choice(seq) 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
    randrange ([start,] stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
    random() 随机生成下一个实数,它在[0,1)范围内。
    seed([x]) 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
    shuffle(lst) 将序列的所有元素随机排序
    uniform(x, y) 随机生成下一个实数,它在[x,y]范围内。

    三角函数

    函数描述
    acos(x) 返回x的反余弦弧度值。
    asin(x) 返回x的反正弦弧度值。
    atan(x) 返回x的反正切弧度值。
    atan2(y, x) 返回给定的 X 及 Y 坐标值的反正切值。
    cos(x) 返回x的弧度的余弦值。
    hypot(x, y) 返回欧几里德范数 sqrt(x*x + y*y)。
    sin(x) 返回的x弧度的正弦值。
    tan(x) 返回x弧度的正切值。
    degrees(x) 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0
    radians(x) 将角度转换为弧度

    数字常量

    常量描述
    pi 数学常量 pi(圆周率,一般以π来表示)
    e 数学常量 e,e即自然常数(自然常数)。

    round()函数补充:

    print(round(1.4))
    print(round(1.5))
    print(round(1.6))
    print(round(2.4))
    print(round(2.5))
    print(round(2.6))

    得出结论

    当个位为奇数,小数部分>=0.5入,其余为舍

    当个位为偶数,小数部分>0.5入,其余为舍。

    ==和is的区别

    == 比较的是两个对象的内容是否相等,默认会调用对象的 __eq__() 方法。

    is 比较的是两个对象的 id 是否相等,也就是是否是同一个对象,是否指向同一个内存地址

    >>> a = 4
    >>> b = 4
    >>> a == b
    True
    >>> a is b
    True
    >>> a = 256 >>> b = 256 >>> a == b True >>> a is b True
    >>> a = 257 >>> b = 257 >>> a == b True >>> a is b False

    我们看到,前几组比较我们都可以理解显示的结果,但是最后当 a/b 都指向 257 这个整数对象的时候,用 is 比较以后的结果是 False。

    这是因为 Python 处于对性能的考虑,内部作了优化,对于整数对象,把一些频繁使用的整数对象缓存起来,保存到一个叫 small_ints 的链表中。

    在 Python 整个生命周期中,任何需要引用这些整数对象的地方,都不再重新创建新的整数对象,范围是 [-5,256]

    再看看下面的例子

    >>> a = 259
    >>> def foo () :
    ...     b = 259
    ...     c = 259
    ...     print(a is b)
    ...     print(b is c)
    ...
    >>> foo()
    False
    True

    这是因为 Python 程序都是由代码块构成,代码块作为程序的一个最小基本单位来执行。一个模块文件/一个函数体/一个类/交互式命令中的单行代码都叫做一个代码块。

    上面的程序中有两部分代码块,一个是名称 a 所在的代码块,一个是名称 b/c 所在的代码块。Python 的另一个优化的地方就是,如果在同一个代码块中创建的两个整数对象中,它们的值相等的话,那么这两个对象引用同一个整数对象。所以Python出于对性能的考虑,但凡是不可变的对象,在同一代码块中,只有值相等的对象就不会重复创建,而是直接引用已经存在的对象。不仅整数对象,字符串对象也遵循同样的原则

    在学习中遇到的疑问:

    由上图输出结果变量c和d的id地址是一样的,这与我们上面所得的结论似乎有所不同

    在经过多方面的询问,得知原因可能是:IDE开发工具会对内存存储进行优化,将一些常用的值提前存放入内存地址,后续创建新的变量,若值都一样,则都指向这个内存地址

    如果小伙伴们有更准确的答案,可以在下方留言评论哦!感谢大家!!

  • 相关阅读:
    《大道至简》之五
    String类总结
    《大道至简》之沟通
    程序设计及总结
    《大道至简》之团队
    动手动脑课堂作业7---------
    动手动脑课堂作业7
    动手动脑
    大道至简—现实中的软件工程—思考还是思想
    动手动脑
  • 原文地址:https://www.cnblogs.com/wuyufeng-9-14/p/15516130.html
Copyright © 2020-2023  润新知