Python 基础语法遇到的问题和思考
1,
1 a = 10 2 b = 10.6 3 print(b-a) 4 0.5999999999996
这是一个经典问题了,由于精度不一致导致的浮点数运算有误差,但这并不是错误,即使浮点之间的运算,也会出现这种情况,小数运算会先转化为二进制,你看 0.6 转化为二进制后,就不准了,而计算机的内存是有限的,不可能保存无限小数,所以就取个多少位的近似值,这样一来,运算就会出现误差了.不仅仅是浮点数的在计算机内部的表示有误差,运算本身也可能会有误差。比如整数 2 可以在计算机内准确表示,但是要算根号 2 就有误差了;再比如两个浮点数相除,本来两个数都是精确表示的,但除的结果精度却超出了计算机内实数的表示范围,然后就有误差了
2,
vim里面设置缩进为python标准的4个空格:
vim vimec set nu set ts = 4 set et
3,
python文件的导入
每个 XXX.py
文件都是一个 Python 模块,文件的内容会在 import XXX
的时候直接执行。对于文件夹,Python 中可以识别成一个包,前提是这个文件夹中有一个 __init__.py
文件,文件中可以不用写任何内容。例如我们创建一个目录 shiyanlou
,在这个目录下有 __init__.py
和 louplus.py
两个代码文件,我们想要引入 louplus.py
文件就可以用 import shiyanlou.louplus
这种代码来引入,前提是 shiyanlou
目录已经放到了 Python 模块搜索的默认路径下了
4,
__main__
Python 文件都有一个 __name__
属性,默认的属性值就是文件名(不带 .py
的字符串形式)。例如 argtest.py
的 __name__
属性值就是 'argtest'
。在终端用 python 解释器执行此文件时(像上文中 $ python3 argtest.py hello shiyanlou
这样),__name__
属性的值就变成 '__main__'
。 if __name__ == '__main__':
实际的作用是让这个程序在终端像 $ python3 argtest.py
这样执行时可以执行到 if __name__ == '__main__':
这个代码块中的内容。当通过 import argtest
将该文件作为模块导入到其他代码文件时不会执行 if __name__ == '__main__':
中的内容,因为导入后这个文件的 __name__
属性值仍然是文件名 'argtest'
。
测试 argtest.py
的代码如下:
1 #!/usr/bin/env python3 2 import sys 3 print('hello shiyanlou') 4 if __name__ == '__main__': 5 for arg in sys.argv: 6 print(arg)