1、增加一个参数来控制缩进打印:level
'''这是一个模块,可以打印列表,其中可能包含嵌套列表'''
deflevel):
"""这个函数取一个位置参数the_list,他可以是任何列表,该列表中的每个数据都会递归地打印到屏幕上,各数据项各占一行;
level参数用来在遇到嵌套列表时插入制表符,实现缩进打印。"""
for each_item in the_list:
iflevel)
else:
for tab_stop in range(level):
print ('\t',end='')
print(each_item)
rang():返回一个迭代器,根据需要生生成一个指定范围的数字;
使用print()BIF在屏幕上打印制表符(TAB),而不是简单的换行(这是print()的默认行为),需要使用python 代码:print ('\t',end='')。
按F5运行模块,将函数导入到IDLE的命名空间,
>>>
=========== RESTART: D:\workspace\eclipse\nester_xcc\nester_xcc.py ===========
>>> movie=['泰囧',2014,'徐峥',91,['王宝强',['黄渤','陶虹','范冰冰']]]
>>> print_list(movie,0)
>>>
因Level设置为0,从没进行改变,所以level参数对显示的输出不产生任何影响。
2、每次处理一个嵌套列表时都需要将level的值增加1.
'''这是一个模块,可以打印列表,其中可能包含嵌套列表'''
def print_list(the_list,level):
"""这个函数取一个位置参数the_list,他可以是任何列表,该列表中的每个数据都会递归地打印到屏幕上,各数据项各占一行;
level参数用来在遇到嵌套列表时插入制表符,实现缩进打印。"""
for each_item in the_list:
iflevel+1) #在每次递归调用函数时将level值增加1
else:
for tab_stop in range(level):
print ('\t',end='')
print(each_item)
运行该模块:
>>>
=========== RESTART: D:\workspace\eclipse\nester_xcc\nester_xcc.py ===========
>>> movie=['泰囧',2014,'徐峥',91,['王宝强',['黄渤','陶虹','范冰冰']]]
>>> print_list(movie,0)
泰囧
2014
徐峥
91
王宝强
黄渤
陶虹
范冰冰
>>> print_list(movie,1)
泰囧
2014
徐峥
91
王宝强
黄渤
陶虹
范冰冰
>>> print_list(movie,-9)
泰囧
2014
徐峥
91
王宝强
黄渤
陶虹
范冰冰
>>> print_list(movie)
Traceback (most recent call last):
File"<pyshell#17>", line 1, in <module>
print_list(movie)
TypeError: print_list() missing1 required positional argument: 'level'
用新代码更新PyPI:
编辑发布的setup.py程序:修改版本号为1.1.0
from distutils. core import setup
setup(
name ='nester_xcc',
version='1.1.0',
py_modules=['nester_xcc'],
author='xcc',
author_email='testqq.com',
url='http://www.cn.com/apple2016/',
description='嵌套列表的打印举例',
)
D:\workspace\eclipse\nester_xcc>python setup.py sdist upload
发布成功。
以上新版本实现了嵌套打印缩进的特性,但是并不是所有用户都喜欢。由于模块中print_list()增加了第二个参数,意为着模块中有个不同的API,使用原来API的用户会遇到问题。
理想的解决方案是同时提供这两个API,一个提供新特性,另一个不提供,如何实现呢?就是通过使用可选参数来实现,使得第二个参数成为可选参数。
通过为一个函数的必须参数提供一个缺省值,实现必填参数变成可选参数;
3、将level设置一个缺省值,变成可选参数:
'''这是一个模块,可以打印列表,其中可能包含嵌套列表'''
def print_list(the_list,level=0):
"""这个函数取一个位置参数the_list,他可以是任何列表,该列表中的每个数据都会递归地打印到屏幕上,各数据项各占一行;
level参数用来在遇到嵌套列表时插入制表符,实现缩进打印。"""
for each_item in the_list:
if isinstance (each_item,list):
print_list(each_item,level+1) #在每次递归调用函数时将level值增加1
else:
for tab_stop in range(level):
print ('\t',end='')
print(each_item)
现在可以采用不同的方式调用这个函数,运行该模块:
>>>
=========== RESTART: D:\workspace\eclipse\nester_xcc\nester_xcc.py ===========
>>> movie=['泰囧',2014,'徐峥',91,['王宝强',['黄渤','陶虹','范冰冰']]]
>>> print_list(movie,0)
泰囧
2014
徐峥
91
王宝强
黄渤
陶虹
范冰冰
>>> print_list(movie)
泰囧
2014
徐峥
91
王宝强
黄渤
陶虹
范冰冰
>>> print_list(movie,2)
泰囧
2014
徐峥
91
王宝强
黄渤
陶虹
范冰冰
>>> print_list(movie,-9)
泰囧
2014
徐峥
91
王宝强
黄渤
陶虹
范冰冰
>>>
将支持两个API的模块发布到PyPI:
from distutils. core import setup
setup(
name ='nester_xcc',
version='1.2.0',
py_modules=['nester_xcc'],
author='xcc',
author_email='[email protected]',
url='http://www.cn.com/apple2016/',
description='嵌套列表的打印举例',
)
D:\workspace\eclipse\nester_xcc>python setup.py sdist upload
running sdist
running check
warning: sdist: manifest template 'MANIFEST.in' does not exist (using default fi
le list)
warning: sdist: standard file not found: should have one of README, README.txt
writing manifest file 'MANIFEST'
creating nester_xcc-1.2.0
making hard links in nester_xcc-1.2.0...
hard linking nester_xcc.py -> nester_xcc-1.2.0
hard linking setup.py -> nester_xcc-1.2.0
creating 'dist\nester_xcc-1.2.0.zip' and adding 'nester_xcc-1.2.0' to it
adding 'nester_xcc-1.2.0\nester_xcc.py'
adding 'nester_xcc-1.2.0\PKG-INFO'
adding 'nester_xcc-1.2.0\setup.py'
removing 'nester_xcc-1.2.0' (and everything under it)
running upload
Submitting dist\nester_xcc-1.2.0.zip to https://pypi.python.org/pypi
Server response (200): OK
D:\workspace\eclipse\nester_xcc>
发布成功。
尽管这个API允许用户安装原来的方式调用函数,但是默认情况下会打开嵌套打印,但是有些人不希望如此。如何实现该嵌套打印行为是可选的呢?
解决方案之一是增加第三个参数indent,需要缩进时就设置为True,不需要缩进就设置为False,默认这个参数为False;
4、增加第三个参数indent来控制实现缩进的代码,默认为false,即不嵌套打印
'''这是一个模块,可以打印列表,其中可能包含嵌套列表'''
def print_list(the_list,indent=False,level=0):
"""这个函数取一个位置参数the_list,他可以是任何列表,该列表中的每个数据都会递归地打印到屏幕上,各数据项各占一行;
level参数用来在遇到嵌套列表时插入制表符,实现缩进打印。
indent参数用来控制实现缩进的代码,默认为false,即不嵌套打印"""
for each_item in the_list:
if isinstance (each_item,list):
print_list(each_item,indent,level+1) #在每次递归调用函数时将level值增加1
else:
if indent: #如果为真,则打印制表符;否则,不打印制表符
for tab_stop in range(level):
print ('\t',end='')
print(each_item)
View Code
运行模块:
>>>
=========== RESTART: D:\workspace\eclipse\nester_xcc\nester_xcc.py ===========
>>> movie=['泰囧',2014,'徐峥',91,['王宝强',['黄渤','陶虹','范冰冰']]]
>>> print_list(movie)
泰囧
2014
徐峥
91
王宝强
黄渤
陶虹
范冰冰
>>> print_list(movie,True)
泰囧
2014
徐峥
91
王宝强
黄渤
陶虹
范冰冰
>>> print_list(movie,True,4)
泰囧
2014
徐峥
91
王宝强
黄渤
陶虹
范冰冰
>>>
View Code
发布版本:
from distutils. core import setup
setup(
name ='nester_xcc',
version='1.3.0',
py_modules=['nester_xcc'],
author='xcc',
author_email='[email protected]',
url='http://www.cn.com/apple2016/',
description='嵌套列表的打印举例',
)
修改发布程序setup.py
1 D:\workspace\eclipse\nester_xcc>python setup.py sdist upload
2 running sdist
3 running check
4 warning: sdist: manifest template 'MANIFEST.in' does not exist (using default fi
5 le list)
6
7 warning: sdist: standard file not found: should have one of README, README.txt
8
9 writing manifest file 'MANIFEST'
10 creating nester_xcc-1.3.0
11 making hard links in nester_xcc-1.3.0...
12 hard linking nester_xcc.py -> nester_xcc-1.3.0
13 hard linking setup.py -> nester_xcc-1.3.0
14 creating 'dist\nester_xcc-1.3.0.zip' and adding 'nester_xcc-1.3.0' to it
15 adding 'nester_xcc-1.3.0\nester_xcc.py'
16 adding 'nester_xcc-1.3.0\PKG-INFO'
17 adding 'nester_xcc-1.3.0\setup.py'
18 removing 'nester_xcc-1.3.0' (and everything under it)
19 running upload
20 Submitting dist\nester_xcc-1.3.0.zip to https://pypi.python.org/pypi
21 Server response (200): OK
22
23
发布新版本1.3.0
5、查看三次修改的版本发布情况: