zoukankan      html  css  js  c++  java
  • 流畅的Python---向量(魔术方法:__repr__ 与 __abs__与__bool__与__add__与__mul__)

    常用Python的模块(math)、魔术方法(__repr__ 与 __abs__与__bool__与__add__与__mul__)构建二维向量

      1.模块math中的常用方法:    

        math.e 自然常数e >>> math.e 2.718281828459045
        math.pi 圆周率pi >>> math.pi 3.141592653589793
        math.degrees(x) 弧度转度 >>> math.degrees(math.pi) 180.0
        math.radians(x) 度转弧度 >>> math.radians(45) 0.7853981633974483
        math.exp(x) 返回e的x次方 >>> math.exp(2) 7.38905609893065
        math.expm1(x) 返回e的x次方减1 >>> math.expm1(2) 6.38905609893065
        math.log(x[, base]) 返回x的以base为底的对数,base默认为e >>> math.log(math.e) 1.0 >>> math.log(2, 10) 0.30102999566398114
        math.log10(x) 返回x的以10为底的对数 >>> math.log10(2) 0.30102999566398114
        math.log1p(x) 返回1+x的自然对数(以e为底) >>> math.log1p(math.e-1) 1.0
        math.pow(x, y) 返回x的y次方 >>> math.pow(5,3) 125.0
        math.sqrt(x) 返回x的平方根 >>> math.sqrt(3) 1.7320508075688772
        math.ceil(x) 返回不小于x的整数 >>> math.ceil(5.2) 6.0
        math.floor(x) 返回不大于x的整数 >>> math.floor(5.8) 5.0
        math.trunc(x) 返回x的整数部分 >>> math.trunc(5.8) 5
        math.modf(x) 返回x的小数和整数 >>> math.modf(5.2) (0.20000000000000018, 5.0)
        math.fabs(x) 返回x的绝对值 >>> math.fabs(-5) 5.0
        math.fmod(x, y) 返回x%y(取余) >>> math.fmod(5,2) 1.0
        math.fsum([x, y, ...]) 返回无损精度的和 >>> 0.1+0.2+0.3 0.6000000000000001 >>> math.fsum([0.1, 0.2, 0.3]) 0.6
        math.factorial(x) 返回x的阶乘 >>> math.factorial(5) 120
        math.isinf(x) 若x为无穷大,返回True;否则,返回False >>> math.isinf(1.0e+308) False >>> math.isinf(1.0e+309) True
        math.isnan(x) 若x不是数字,返回True;否则,返回False >>> math.isnan(1.2e3) False
        math.hypot(x, y) 返回以x和y为直角边的斜边长 >>> math.hypot(3,4) 5.0
        math.copysign(x, y) 若y<0,返回-1乘以x的绝对值; 否则,返回x的绝对值 >>> math.copysign(5.2, -1) -5.2
        math.frexp(x) 返回m和i,满足m乘以2的i次方 >>> math.frexp(3) (0.75, 2)
        math.ldexp(m, i) 返回m乘以2的i次方 >>> math.ldexp(0.75, 2) 3.0
        math.sin(x) 返回x(弧度)的三角正弦值 >>> math.sin(math.radians(30)) 0.49999999999999994
        math.asin(x) 返回x的反三角正弦值 >>> math.asin(0.5) 0.5235987755982989
        math.cos(x) 返回x(弧度)的三角余弦值 >>> math.cos(math.radians(45)) 0.7071067811865476
        math.acos(x) 返回x的反三角余弦值 >>> math.acos(math.sqrt(2)/2) 0.7853981633974483
        math.tan(x) 返回x(弧度)的三角正切值 >>> math.tan(math.radians(60)) 1.7320508075688767
        math.atan(x) 返回x的反三角正切值 >>> math.atan(1.7320508075688767) 1.0471975511965976
        math.atan2(x, y) 返回x/y的反三角正切值 >>> math.atan2(2,1) 1.1071487177940904
        math.sinh(x) 返回x的双曲正弦函数
        math.asinh(x) 返回x的反双曲正弦函数
        math.cosh(x) 返回x的双曲余弦函数
        math.acosh(x) 返回x的反双曲余弦函数
        math.tanh(x) 返回x的双曲正切函数
        math.atanh(x) 返回x的反双曲正切函数
        math.erf(x) 返回x的误差函数
        math.erfc(x) 返回x的余误差函数
        math.gamma(x) 返回x的伽玛函数
        math.lgamma(x) 返回x的绝对值的自然对数的伽玛函数

      2. 简单的二维向量

          

    from math import hypot
    
    class Vector:
        def __init__(self,x=0,y=0):
            self.x = x
            self.y = y
        def __repr__(self):
            return 'Vector(%r, %r)' % (self.x, self.y)
        def __abs__(self):
            return hypot(self.x, self.y)
        def __bool__(self):
            return bool(abs(self))
        def __add__(self, other):
            x = self.x + other.x
            y = self.x + other.y
            return Vector(x, y)
        def __mul__(self, scalar):
            return Vector(self.x * scalar,self.y * scalar)
    
    # 向量加法
    v1 = Vector(2,4)
    v2 = Vector(1,2)
    print(v1+v2)
    
    #向量求模
    v3 = Vector(3,4)
    print(abs(v3))
    
    #向量的标量乘法
    print(abs(v3 * 3))
    v4 = v3 * (-3)
    print(v4)
    print(abs(v4))
    

      还可以继续自定其他的跟运算相关的特殊方法,使这个向量类更加强大

          

  • 相关阅读:
    【leetcode刷题笔记】Merge Intervals
    【leetcode刷题笔记】Implement strStr()
    【leetcode刷题笔记】Rotate List
    【leetcode刷题笔记】Merge k Sorted Lists
    【leetcode刷题笔记】Longest Substring Without Repeating Characters
    【leetcode刷题笔记】Scramble String
    【leetcode刷题笔记】Anagrams
    【leetcode刷题笔记】Distinct Subsequences
    【leetcode刷题笔记】Remove Duplicates from Sorted List II
    结语与感悟
  • 原文地址:https://www.cnblogs.com/coylee/p/10682665.html
Copyright © 2011-2022 走看看