#!/usr/bin/env python# python 中的元祖和列表列斯,区别是元祖中的元素不能被修改#字典类型的数据时以键值对的方式存储的,中间以:分割stuff={1000:['kb','mb','gb','tb','pb','eb','zb','yb'],1024:['kib','mib','gib','tib','pib','eib','zib','yib']} ①def file_size(size,byte_size=true): ②''' convert a file size to human form. keywords arguments: size -- file size in bytes byte_size -- if true(default),use multiple of 1024 if false ,use multiple of 1000 :returns:string ''' if size
这段代码是我一个字母一个字母敲在pycharm中的。虽然刚开始并不理解其中的奥秘,但是在我研究了两天之后,终于明白了其中的道道儿。新手需要注意的是,python严格控制代码缩进,根据不同的缩进量控制函数体或循环体。所以一定要注意。有时候执行报错不是因为你哪里敲错了字母,而是缩进没搞对。
首先
#!/usr/bin/env python
这一行代表了你要告诉pycharm去哪里找你本地的python解释器。
① 处这一行的代码是定义了一个字典类型的变量,用来存放最后输出的大小格式单位。字典类型的变量以键值对的方式存储,键和值之间以冒号区分。
②处定义了一个函数,def关键字是申明一个函数,函数名为file_size,它包含两个参数size和byte_size,其中byte_size有一个默认值为true。python中都是通过def关键字定义函数没有别的东西,很好记,对吧?
我当初比较疑惑的地方在③处,因为不是很理解for循环的处理机制,所以把自己整蒙了好久。for循环干的事儿就是取出单位的字符串。举个栗子:比如multiple=1000,那么在for循环开始时,stuff[multiple]=['kb','mb','gb','tb','pb','eb','zb','yb']
程序开始执行的地方是在④处。首先理解if __name__==__main__的意思,可以参照在下写得另一篇文章地址ht tp s://w w w.t o u t i a o.c o m/i 6 5 0 4 1 2 4 2 7 1 0 9 7 28 30 86/。简单来说就是如果这个py文件是作为import导入模块使用的话,后面的print语句就不会被执行。现在是直接运行脚本,所以不影响。
第一个print语句给file_size传的值为1000000000000和false。此时multiple的值为1000,进入循环后会一直判断size和multiple的大小,直到size小于multiple(前提是stuff足够被循环)所以在执行到第四次循环时,size=1,multiple=1000,此时他俩是小于关系,所以会格式化输出文件大小1.0tb。
明白了循环的逻辑后就能理解这个程序是如何实现的了。反正我是明白了,不知道大家明白了没?