python各种零碎的知识点(防止忘记-自查用)
-
为了减少使用转义字符(\)可以在字符串前加字母 r 例如
r"./datasets/train/img"
-
三重引号字符串:(省去了 \n \t 等等操作,写啥就是啥)
‘‘’ 123 456 789 ‘’‘
-
变量float()转int()小数部分会直接剪掉
-
//
地板除法,舍弃小数 -
逻辑运算,与and 或or 非not
5>3<4
=5>3 and 3<4
-
三元操作符
a=x if <条件> else y
-
断言
assert <条件>
条件为False
时报错AssertionError
-
range
返回一个 iterate -
list(iterate)
返回迭代对象转换为列表 -
else
搭配循环使用(循环中break之后要执行else部分)while 条件: 循环体 else: 条件不成立时执行的内容 for variable in iterate: 循环体 else: 条件不成立时执行
-
内建方法
a.sort()
a 本身改变了
sorted(a)
返回一个拍完序的列表 -
emumerate(iterator,num)
,从num开始记数a=[1,2,3,4] for i,j in enumerate(a,9): print(i, j)
结果
9 1 10 2 11 3 12 4
-
Python提示object is not subscriptable的错误():
subscriptable的意思是 可有下标的 意思
错误的原因就是把不具有下标操作的对象用成了对象[i] -
with open("/XXX.txt", "r") as f: print(f.readlines())
结果是
['0\n', '1\n', '2\n', '3\n', '4\n', '5\n', '6\n', '7\n', '8\n', '9\n']
删掉
\n
for i in f.readlines: i.strip()
-
类的属性和方法同名时,属性覆盖方法,属性牛bi
-
Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :
-
调用未绑定的父类的方法
class Test(Train): def __init__(self): Train.__init__(self)
class Test(Train): def __init__(self): super().__init__()
-
多重继承
class 类名 (父类1,父类2,…………)
-
类的组合:把已有的类扔到新的类里直接实例化为类对象去使用
class BBB: def __init__(self,x): self.test=x class FFF: arg= BBB(9) def print_test(self): print(self.arg.test)#这变量直接就能调了 c=FFF() c.print_test()
-
python中定义私有变量,只需要在变量名或函数名上加上
__
两个下划线 -
要访问私有化变量,只需要
对象名._类名__变量名
-
对象.__dict__
查看对象所拥有的属性 -
callable() 函数用于检查一个对象是否是可调用
对于
函数
、方法
、lambda 函式
、类
以及实现了 __call__ 方法的类实例
, 它都返回True
-
pickle
包的用法,将一切保存成二进制,在将二进制文件读入import pickle example_a = [1, 2, 3, 4] file = open("./test.txt", "wb") pickle.dump(example_a, file) file.close() file_l = open("./test.txt", "rb") example_b=pickle.load(file_l) print(example_b)
-
import os labelsPath = os.path.sep#这里输出的是操作系统的分隔符"/" #文件路径写成这样 labelsPath = os.path.sep.join(str1,str2)
-
对于很大的数,例如10000000000,很难数清楚0的个数。Python允许在数字中间以_分隔,因此,写成
10_000_000_000和10000000000
是完全一样的。十六进制数也可以写成0xa1b2_c3d4
-
但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10**9就是
1.23e9
-
对于单个字符的编码,Python提供了
ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符:>>> ord('A') 65 >>> ord('中') 20013 >>> chr(66) 'B' >>> chr(25991) '文'
-
由于Python的字符串类型是
str
,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str
变为以字节为单位的bytes
,也就是Unicode
转化为UTF-8
。 -
Python对bytes类型的数据用带b前缀的单引号或双引号表示:
x = b'ABC'
要注意区分’ABC’和b’ABC’,前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。
-
以Unicode表示的
str
通过encode()
方法可以编码为指定的bytes
,例如:>>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87'
-
如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用
decode()
方法:b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') '中文'
-
字符串
%s
会把一切都转化为字符串'Age: %s. Gender: %s' % (25, True) 'Age: 25. Gender: True'
-
有些时候,字符串里面的
%
是一个普通字符怎么办?这个时候就需要转义,用%%
来表示一个%
-
f-string
最后一种格式化字符串的方法是使用以f开头的字符串,称之为f-string,它和普通字符串不同之处在于,字符串如果包含{xxx}
,就会以对应的变量替换:>>> r = 2.5 >>> s = 3.14 * r ** 2 >>> print(f'The area of a circle with radius {r} is {s:.2f}') The area of a circle with radius 2.5 is 19.62
-
“可变的”tuple:
>>> t = ('a', 'b', ['A', 'B']) >>> t[2][0] = 'X' >>> t[2][1] = 'Y' >>> t ('a', 'b', ['X', 'Y'])
表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。
即指向’a’,就不能改成指向’b’,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!