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__.pylouplus.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)

 

 

 



 

posted @ 2018-05-18 10:56  时代的稻草人  阅读(198)  评论(0编辑  收藏  举报