标签:__ 运算符 内置 Python self 值为 学习 print counter1
Python内置类型
一.逻辑检测
任何对象都可以进行逻辑值的检测。一个对象默认情况下认为是真。除非改对象所属的类定义了如下方法:
- __bool__():定义该方法且返回bool值。
- __len__():定义该方法且返回数值。
出现假值的情况:
- 被定义为假值的常量:None或者False。
- 任何数值类型的0。
- 空的序列或者空集合。
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属于布尔运算,
运算 | 结果 | 备注 |
---|---|---|
or | if x is false, then y, else x | 1 |
and | if x is false, then x, else y | 2 |
not | if x is false, then True, else False | 3 |
注释:
or
这是个短路运算符,因此只有在第一个参数为假值时才会对第二个参数求值。and
这是个短路运算符,因此只有在第一个参数为真值时才会对第二个参数求值。- 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 异常。
is
和is 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,self,值为,学习,print,counter1 来源: https://blog.csdn.net/pcx171/article/details/122275926
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。