Python学习(一)内置

2022/1/2 14:09:15

本文主要是介绍Python学习(一)内置,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Python内置类型

一.逻辑检测

任何对象都可以进行逻辑值的检测。一个对象默认情况下认为是真。除非改对象所属的类定义了如下方法:

  • __bool__():定义该方法且返回bool值。
  • __len__():定义该方法且返回数值。

出现假值的情况:

  1. 被定义为假值的常量:None或者False。
  2. 任何数值类型的0。
  3. 空的序列或者空集合。

1.1例子

定义测试函数和自定义类:

class Test:
    def __init__(self) -> None:
        pass


class Test1:
    def __init__(self, *args) -> None:
        self.list = list(args)

    def __len__(self):
        return len(self.list)


class Test2:
    def __init__(self, *args) -> None:
        self.list = list(args)

    def __bool__(self):
        return len(self.list) > 3


def check(param: bool) -> None:
    if param:
        print(f"{param}值为真")
    else:
        print(f"{param}值为假")

定义测试用的对象和数值:

number_0 = 0
constant_None = None
empty_list = []

test0 = Test()
test1_1 = Test1(1, 2, 3)
test1_2 = Test1()
test2_1 = Test2(1, 2, 3, 4, 5, 6)
test2_2 = Test2(1, 2)

测试结果:

0值为假
None值为假
[]值为假
<__main__.Test object at 0x00000209C10BBF70>值为真
<__main__.Test1 object at 0x00000209C10BB850>值为真
<__main__.Test1 object at 0x00000209C10BBCD0>值为假
<__main__.Test2 object at 0x00000209C10BB490>值为真
<__main__.Test2 object at 0x00000209C10BBB50>值为假

二.布尔运算

and、or、not属于布尔运算,

运算结果备注
orif x is false, then y, else x1
andif x is false, then x, else y2
notif x is false, then True, else False3

注释

  1. or这是个短路运算符,因此只有在第一个参数为假值时才会对第二个参数求值。
  2. and这是个短路运算符,因此只有在第一个参数为真值时才会对第二个参数求值。
  3. not 的优先级比非布尔运算符低,因此not a == b会被解读为not (a == b)a == not b会引发语法错误。

2.1例子

使用and:

counter1 = []
counter2 = []
if counter1 and counter2.append(1):
    print("表达式值为真")

print(f"counter1:{counter1}")
print(f"counter2:{counter2}")

测试结果

counter1:[]
counter2:[]

使用or:

counter1 = []
counter2 = []
if counter1 or counter2.append(1):
    print("表达式值为真")

print(f"counter1:{counter1}")
print(f"counter2:{counter2}")

测试结果:

counter1:[]
counter2:[1]

三.比较运算

在Python 中有八种比较运算符。它们的优先级相同(比布尔运算的优先级高)。比较运算可以任意串连;例 如,x < y <= z 等价于x < y and y <= z,前者的不同之处在于y只被求值一次(但在两种情况下当x < y 结果为假值时z 都不会被求值)。

除不同的数字类型外,不同类型的对象不能进行相等比较。== 运算符总有定义,但对于某些对象类型(例
如,类对象),它等于is 。其他<、<=、> 和>= 运算符仅在有意义的地方定义。例如,当参与比较的参数
之一为复数时,它们会抛出TypeError 异常。

isis not运算符无法自定义;并且它们可以被应用于任意两个对象而不会引发异常。

内置方法的比较:

  • x<y 调用 x.lt(y)
  • x<=y 调用 x.le(y)
  • x==y 调用 x.eq(y)
  • x!=y 调用 x.ne(y)
  • x>y 调用 x.gt(y)
  • x>=y 调用 x.ge(y)

3.1例子

自定义一个类,实现__lt____gt____eq__

class Test3:
    def __init__(self, a, b) -> None:
        self.a = a
        self.b = b
        
    def __eq__(self, other: object) -> bool:
        return self.a == other.a
    
    def __lt__(self, other):
        return self.b < other.b
    
    def __gt__(self, other):
        return self.b > other.b
    
test3_1 = Test3(1, 2)
test3_2 = Test3(1, 4)

print(f"==:{test3_1 == test3_2}")
print(f">:{test3_1 > test3_2}")
print(f"<:{test3_1 < test3_2}")

测试结果:

==:True
>:False
<:True

四.数字类型

存在三种不同的数字类型: 整数, 浮点数和复数。此外,布尔值属于整数的子类型。整数具有无限的精
度。浮点数通常使用C 中的double 来实现;

数字是由数字字面值或内置函数与运算符的结果来创建的。不带修饰的整数字面值(包括十六进制、八进制 和二进制数)会生成整数。包含小数点或幂运算符的数字字面值会生成浮点数。在数字字面值末尾加上’j’ 或’J’ 会生成虚数(实部为零的复数),你可以将其与整数或浮点数相加来得到具有实部和虚部的复数。

Python 完全支持混合运算:当一个二元算术运算符的操作数有不同数值类型时,” 较窄” 类型的操作数会拓 宽到另一个操作数的类型,其中整数比浮点数窄,浮点数比复数窄。不同类型的数字之间的比较,同比较这 些数字的精确值一样。

  • /也称为整数除法。结果值是一个整数,但结果的类型不一定是int。运算结果总是向负无穷的方向舍入:1//2 为0, (-1)//2 为-1, 1//(-2) 为-1 而(-1)//(-2) 为0。
  • %不可用于复数。而应在适当条件下使用abs() 转换为浮点数。
  • int从浮点数转换为整数会被舍入或是像在C 语言中一样被截断。
  • float 也接受字符串”nan” 和附带可选前缀”+” 或”-” 的”inf” 分别表示非数字(NaN) 以及正或负无穷。
  • Python 将pow(0, 0) 和0 ** 0 定义为1,这是编程语言的普遍做法。
  • 接受的数字字面值包括数码0 到9 或任何等效的Unicode 字符(具有Nd 特征属性的代码点)。

未完待续



这篇关于Python学习(一)内置的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程