文章目录
参考资料
team-learning-program/Python-Language/
以下笔记为我从参考资料中摘录的我自己不那么熟悉的知识点,完整系统的内容请直接参考上面的链接。
01. 变量、运算符与数据类型
1.1 笔记
-
关于变量和对象、赋值和引用的基本概念,https://blog.csdn.net/OuDiShenmiss/article/details/107484130 这里讲得很清楚
-
可变类型与不可变类型的讲解可参考:https://www.cnblogs.com/blackmatrix/p/5614086.html
-
整除(向下取整):
//
-
幂乘:
**
-
逻辑运算:
and
、or
、not
-
按位取反:
~
-
按位异或:
^
-
注:Python中的
%
与 C/Java不同,本质上是因为除法(整除)的不同- C/Java:趋零截尾除法(truncate除法)。如 -11 / 5 = -2,因此 -11 % 5 = -1((-11)%5=-11-[(-11)/5]*5=-11-(-2)*5=-1,与被除数符号一致)。
- Python:趋负无穷截尾(floor除法)。如 - 11 / 5 = -3,因此 -11 % 5 = 4((-11)%5=-11-[(-11)/5]*5=-11-(-3)*5=4,与除数符号一致)。
-
三元运算符:
z = x if x < y else y
-
is
,is not
与==
,!=
的区别:
is
,is not
对比的是两个变量的内存地址(对象的id)
==
,!=
对比的是两个变量的值(对象的value)
因此,
当变量指向的都是地址不可变的类型(数字、str、tuple),二者完全等价;
当变量指向的是地址可变的类型(list,dict),二者不同。
a = "hello"
b = "hello"
# 两个变量引用同一个对象,指向同一块地址空间
print(a is b, a == b) # True True
print(a is not b, a != b) # False False
a = ["hello"]
b = ["hello"]
# 两个对象,两块内存地址空间
print(a is b, a == b) # False True
print(a is not b, a != b) # True False
- Python 里面万物皆对象(object)。只要是对象,就有相应的属性 (attributes) 和方法(methods),通过
dir(object)
查看。前后各两个下划线表示属性。
b = dir(int)
print(b)
# ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__',
# '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__',
# '__float__', '__floor__', '__floordiv__', '__format__', '__ge__',
# '__getattribute__', '__getnewargs__', '__gt__', '__hash__',
# '__index__', '__init__', '__init_subclass__', '__int__', '__invert__',
# '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__',
# '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__',
# '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__',
# '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__',
# '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__',
# '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__',
# '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__',
# 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag',
# 'numerator', 'real', 'to_bytes']
type(object)
获取类型信息isinstance(object, classinfo)
判断一个对象是否是一个已知的类型
print(isinstance(1, int)) # True
print(isinstance(5.2, float)) # True
print(isinstance(True, bool)) # True
print(isinstance('5.2', str)) # True
- 注:
type()
不会认为子类是一种父类类型,不考虑继承关系。