【Python 3这件小事】1.第一个Python 3程序

通常程序设计的书籍都会以一堆关于基础知识的章节开始,最终逐步的构建一些有用的东西。让我们跳过所有的那些东西,来看一个完整的、可以直接运行的 Python 程序。可能刚开始你根本看不懂,但不要担心,因为你会去一行一行的仔细研究。但是首先还是要通读一遍,看看里面什么东西(如果有的话)是你可以看懂的。

 1 SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
 2             1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}
 3 
 4 def approximate_size(size, a_kilobyte_is_1024_bytes=True):
 5     '''Convert a file size to human-readable form.
 6 
 7     Keyword arguments:
 8     size -- file size in bytes
 9     a_kilobyte_is_1024_bytes -- if True (default), use multiples of 1024
10                                 if False, use multiples of 1000
11 
12     Returns: string
13 
14     '''
15     if size < 0:
16         raise ValueError('number must be non-negative')
17 
18     multiple = 1024 if a_kilobyte_is_1024_bytes else 1000
19     for suffix in SUFFIXES[multiple]:
20         size /= multiple
21         if size < multiple:
22             return '{0:.1f} {1}'.format(size, suffix)
23 
24     raise ValueError('number too large')
25 
26 if __name__ == '__main__':
27     print(approximate_size(1000000000000, False))
28     print(approximate_size(1000000000000))

现在让我们从命令行来运行这个程序。在 Mac OS X 或者 Linux 上,类似这样:

you@localhost:~/diveintopython3/examples$ python3 humansize.py
1.0 TB
931.3 GiB

刚刚发生了什么?你执行了你的第一个 Python 程序。你从命令行调用了 Python 解释器,并且传递了一个你想 Python 去执行的脚本的名称。这个脚本定义了一个单一的函数,这个approximate_size() 函数把一个精确到字节的文件大小计算成一个有漂亮格式(大约计算的)的大小。(你可能已经在 Windows Explorer,或者 Mac OS X Finder,或者 Linux 上的 Nautilus 或 Dolphin 或 Thunar 看到过这个。如果你按照多列的列表来显示一个文件夹的文档,它就会显示一个包含文档图标、文档名称、大小、类型、最后修改日期等等信息的表格。如果这个文件夹包含一个 1093 字节大小名叫 TODO 的文件,你的文件管理器将不会显示成 TODO 1093 bytes,而用 TODO 1 KB 的显示格式代替。那就是 approximate_size() 函数所做的事情。)

看看这个脚本的底部,你会看到对 print(approximate_size(arguments)) 的两次调用。这些叫做函数调用 —— 第一个调用了 approximate_size() 函数并传递了一些参数,接着直接把返回值传递给了 print() 函数。这个 print() 函数是内置的,你将从不会看到它的一个显式的声明。你只管在需要的任何时候任何地方使用它就行。(有很多内置函数,更多的函数独立于各个 modules(模块)里面。保持耐心,你会逐步熟悉它们的。)

那么为什么每次在命令行运行脚本都会给你同样的输出结果呢?我们将讲解这个。首先,让我们来看一下 approximate_size() 函数。

你可能感兴趣的:(python)