当前位置: 首页 > 科技观察

Python3.6的文件系统你用过这个神奇的方法吗?

时间:2023-03-14 00:17:30 科技观察

Python3.6于2016年首次发布,尽管它已经发布了一段时间,但它引入的许多功能并未得到充分利用,而且非常酷。以下是其中的三个。除数常数快速回答哪个更大,10000000还是200000?看代码你能答对吗?在书面形式中,您将使用10,000,000或10.000.000作为第一个数字,具体取决于当地习俗。问题是,Python在其他方面使用逗号和句点。幸运的是,从Python3.6开始,您可以使用下划线分隔数字。这在代码中和对字符串使用int()转换器时都有效:importmathmath.log(10_000_000)/math.log(10)7.0math.log(int("10_000_000"))/math.log(10)7.0Tau是正确的。用弧度表示的45度角是多少?正确答案是π/4,但这有点难记。更容易记住45度角是八分之一圈。正如TauManifesto解释的那样,2π,称为Τ,是一个更自然的常数。在Python3.6及更高版本中,您的数学代码可以使用更直观的常量:print("Tanofaneighthturnshouldbe1,got",round(math.tan(math.tau/8),2))print("Cosofansixthturnsshouldbe1/2,got",round(math.cos(math.tau/6),2))print("Sinofaquarterturnshouldbe1,go",round(math.sin(math.tau/4),2))Tanofaneighthturnshouldbe1,got1.0Cosofansixthturnshouldbe1/2,got0.5Sinofaquarterturnshouldbe1,go1.0os.fspath从Python3.6开始,有一个神奇的方法,意思是“转换为文件系统路径”。当给定一个str或bytes时,它返回输入。对于所有类型的对象,它都会查找__fspath__方法并调用它。这允许传递的对象是“带有元数据的文件名”。像open()或stat这样的普通函数仍然可以使用它们,只要__fspath__返回正确的东西。例如,这里有一个函数将一些数据写入文件,然后检查其大小。它还将文件名记录到标准输出以实现可追溯性:defwrite_and_test(filename):print("writinginto",filename)withopen(filename,"w")asfpout:fpout.write("hello")print("sizeof",filename,"is",os.path.getsize(filename))你可以按照你期望的方式调用它,用一个字符串作为文件名:write_and_test("plain.txt")writingintoplain.txtsizeofplain.txt5然而,你可以将信息添加到文件名的字符串表示形式的类。这允许在不改变原始功能的情况下进行更详细的日志记录:{self.fname!r},why={self.why!r})"以DocumentedFileName实例作为输入运行函数,允许open和os.getsize函数在增强日志记录的同时继续工作:write_and_test(DocumentedFileName("documented.txt","becauseit'sfun"))writingintoDocumentedFileName(fname='documented.txt',why="becauseit'sfun")sizeofDocumentedFileName(fname='documented.txt',why="becauseit'sfun")欢迎2016Python3.6于五年前发布,但此版本中首次亮相的一些功能非常酷且未得到充分利用。如果您还没有将它们添加到您的工具箱中。