python函数代码块以什么开头_Python初体验-开篇 代码全析
发布日期:2021-06-24 11:21:54 浏览次数:3 分类:技术文章

本文共 6067 字,大约阅读时间需要 20 分钟。

第一次接触Python,现在就开始蟒蛇的威力。

一、首先贴上我们要解析的code:

'''Convert file sizes to human-readable form.

Available functions:

approximate_size(size, a_kilobyte_is_1024_bytes)

takes a file size and returns a human-readable string

Examples:

>>> approximate_size(1024)

'1.0 KiB'

>>> approximate_size(1000, False)

'1.0 KB'

'''

SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],

1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}

def approximate_size(size, a_kilobyte_is_1024_bytes=True):

'''Convert a file size to human-readable form.

Keyword arguments:

size -- file size in bytes

a_kilobyte_is_1024_bytes -- if True (default), use multiples of 1024

if False, use multiples of 1000

Returns: string

'''

if size < 0:

raise ValueError('number must be non-negative')

multiple = 1024 if a_kilobyte_is_1024_bytes else 1000

for suffix in SUFFIXES[multiple]:

size /= multiple

if size < multiple:

return '{0:.1f} {1}'.format(size, suffix)

raise ValueError('number too large')

if __name__ == '__main__':

print(approximate_size(1000000000000, False))

print(approximate_size(1000000000000))

# Copyright (c) 2009, Mark Pilgrim, All rights reserved.

#

# Redistribution and use in source and binary forms, with or without modification,

# are permitted provided that the following conditions are met:

#

# * Redistributions of source code must retain the above copyright notice,

# this list of conditions and the following disclaimer.

# * Redistributions in binary form must reproduce the above copyright notice,

# this list of conditions and the following disclaimer in the documentation

# and/or other materials provided with the distribution.

#

# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'

# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE

# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE

# POSSIBILITY OF SUCH DAMAGE.

该程序的功能是将以字节为单位的文件大小转换为以更易读形式,如将1024 B转换为1KB

二、看看我们代码的执行情况:

0818b9ca8b590ca3270a3433284dd417.png

我的系统里装了Cygwin,该软件能够模拟linux系统里的shell。

首先, 使用ls命令查看当前目录里包含的文件,发现该程序的代码文件humansize.py;

第二, 使用python命令执行该程序,注意加上文件扩展名,否则出现如图所示的NameError

错误;执行成功后,可以看见输出(对10的12次方字节做单位转换):第一行为以1000进制做的

单位转换,第二行以1024进制做的单位转换。

if __name__ == '__main__':

print(approximate_size(1000000000000, False))

print(approximate_size(1000000000000))

三、再看看代码在Python Shell的调用情况:

0818b9ca8b590ca3270a3433284dd417.png

sys.path为import的搜索路径,即当你在代码里或Python shell命令行下使用import向

程序添加新的模块(module)时,Python解释器搜索该模块的所有路径。

从上图我们可以看出:

第一次import humansize时,提示ImportError错误;第二次import humansize时就很正常。

这是因为我们第一次import humansize时,sys.path里不包含路径"C:/Documents

and Settings/Administrator.SCM/桌面/Python学习",所以import humansize时就无法

找到humansize.py文件,当使用sys.path.insert将该路径添加进sys.path后,再import

humansize就没问题了。

import humansize后,我们就可以调用humansize.py里面的所有函数了。

如:

print(humansize.approximate_size(4000,False)),

我们可以看到Python里调用函数的方式为:module_name.function_name(args),

即import时所用的模块名.该模块所包含的函数名,再加上相关参数就可以了。

同样地,我们还在Python Shell下 调用了print(humansize.approximate_size.__doc__)

输出approximate_size函数的文档字符串(docstring,就是我们在其他语言里所说的注释)。

Python里将注释放在一对三单引号之间,即''' 注释 '''  。

四、最后我们总结些Python的基本语法:

1、Python的性质是一个脚本语言,如js、PHP等。

我们都了解脚本语言有一个性质,就是弱类型,轻量级,什么意思?就是说程序员

不用显示定义变量的类型,函数返回的类型,这些值得类型由脚本解释器自己去判断。

所以我们发现程序中定义的各变量和函数都没有返回类型,如变量SUFFIXES、size、

suffix、multiple等、函数approximate_size。

2、变量:

Python中的变量我们不许定义,可以直接使用,变量名的定义和其他语言相似,这里

不多述。

关于变量,这里要特别注意程序中的__name__和SUFFIXES变量。

__name__是Python本身定义的变量。这有些类似PHP中的$_SERVER、

$_POST、$GET,都是预定义的。

SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],

1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'] }

该变量是一个JSON变量。

下面我们简要谈谈JSON。

3、JSON:

Javascript Object Notation,即js对象标记(或符号)。notation有标记、符号的

意思。懂js的大牛们都懂的,其是一种轻量级的数据交换格式,现在在Web上与XML

都实现C/S模式下的数据交换。

JSON简单地定义:

数组: test_array = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']

名值对对象:test_namevalue_object = { 'myname'      :   'heigger',

'country'  :    'china',

'job'          :    'IT'

}

该变量定义了一组名值对。访问时,可以使用variable_name[name]得到name

所对应的值value。如 test_namevalue_object [name]可以得到heigger、

SUFFIXES[1024]可以获得数组:

['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'] 。

关于JSON,还有重要的一点:就是名值对对象可以嵌套定义:

如nested_json= {

'name': 'heigger',

'family':

{'howmanypeople':3, 'father': 'myfather', 'mother' :'mynother'}

'hobby': ['computer', 'music', 'football' , 'silence']

}

4、字符串:

test_string = 'I am heigger'    使用单引号。字符串也可以算作一种JSON对象。

5、main程序:

if __name__ == '__main__':

print(approximate_size(1000000000000, False))

print(approximate_size(1000000000000))

这样的main很特殊吧,鉴于本人初次接触,不便多谈,在这我们可以使用这样的形式编写程序的main部分:

if __name__ == '__main__':

'''

这是我们写的的main体

'''

6、函数定义:

def approximate_size(size, a_kilobyte_is_1024_bytes=True):

'''Convert a file size to human-readable form.

Keyword arguments:

size -- file size in bytes

a_kilobyte_is_1024_bytes -- if True (default), use multiples of 1024

if False, use multiples of 1000

Returns: string

'''

if size < 0:

raise ValueError('number must be non-negative')

multiple = 1024 if a_kilobyte_is_1024_bytes else 1000

for suffix in SUFFIXES[multiple]:

size /= multiple

if size < multiple:

return '{0:.1f} {1}'.format(size, suffix)

raise ValueError('number too large')

def approximate_size(size, a_kilobyte_is_1024_bytes=True):

'''

此处写注释

'''

#然后写函数体

7、该程序中我们遇到一个循环结构,即for ... in

for suffix in SUFFIXES[multiple]:

size /= multiple

if size < multiple:

return '{0:.1f} {1}'.format(size, suffix)

这和其他语言中的foreach结构是类似的,即循环in后数组的所有元素。

8、code style :

Python的代码块完全靠冒号:和代码缩进,如该程序中函数的定义、for...in

的使用等。python中也没有用分号(;)表示一行语句的结束。

所以Python的代码缩进风格很重要。

9、注释 :

单行注释:#

多行注释:'''           '''

10、异常处理:

在程序中我们可以看到raise 关键字,ValueError('number must be non-negative')

其跑出ValueError异常。

到此为止吧!没有解释清楚的知识点定有所在,希望各位IT友指导交流。

参考:

转载地址:https://blog.csdn.net/weixin_32467749/article/details/114957479 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java闹钟程序设计_JAVA课程设计_闹钟的设计与实现项目-报告_附源代码.doc
下一篇:欧亚马 java折叠车_如何选择欧亚马折叠车?

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月20日 08时26分54秒