模块就是一个包含Python代码的文本文件,以.py结尾。

第三方模块都在PyPI(python package index)上,可使用PyPI发布你的模块,供他人使用。

注释代码

# coding=utf-8

"""
nester.py模块
模块描述放在这里
""" def print_lol(li):
"""
描述函数放在这里
:param li: list
:return: None
"""
for each in li:
if isinstance(each, list):
print_lol(each)
else:
print(each)

发布到PyPI

1、为模块创建各一个文件夹nester_zlm

  文件夹下面包含nester.py和setup.py  

  setup.py包含发布的元数据,代码如下:

from distutils.core import setup

setup(
name='nester',
version='1.0.0',
py_modules=['nester'],
author='hfpython',
author_email='zlm_dj68@163.com',
url='http://www.findeen.co.uk/headfirstlabs.com.html',
description='a Simple printer of nested lists',
)

2、构建一个发布文件

nester_zlm文件夹中打开一个终端窗口,键入命令:python3 setup.py sdist

3、将发布安装到你的Python本地副本中

python3 setup.py install

安装成功后发布已经准备就绪

4、发布速览

build和dist的是发布工具生成的。

5、导入模块并使用

导入新创建的模块nester,定义一个列表,调用print_lol函数,没有加命名空间时,会导致NameError;

用命名空间限定函数名后,pass。

若使用 from nester import print_lol,则可以不用命名空间,但要注意,如果当现有空间存在print_lol,那么导入的函数会覆盖现有的函数。

6、注册Pypi网站

https://pypi.python.org/pypi?%3Aaction=register_form

PGP Key一般都不用填

7、向pypi上传代码

(1)通过命令行窗口注册Pypi

pyton3 setup.py register

(2)通过命令行窗口上传

python3 setup.py sdist upload

(当然,如果试图上传一个名字为nester的模块,会得到一个错误,指出这个模块名字已经被占用)

添加参数

新的需求

现在有新的需求,nester.py模块的print_lol函数,当碰到一个嵌套列表时,需要有缩进,以让层次跟清晰。

这时需要添加额外的参数控制行为

# coding=utf-8

def print_lol(the_list, level):
"""
所提供列表中的各个数据项会(递归地)打印到屏幕上,而且各占用一行
:param the_list: 包含或者不包含嵌套列表的列表
:param level:用来在遇到嵌套列表时插入制表符
:return: None
"""
for each in the_list:
if isinstance(each, list):
print_lol(each, level+1)
else:
for tab_stop in range(level):
print("\t", end="")
print(each) if __name__ == '__main__':
li = [1, [2, 3], 4]
print_lol(li, 0)

运行结果:

将上述代码更新到pypi

1、修改setup.py中version='1.1.0',

2、发布 python3 setup.py sdist upload

可选参数

上述nester.py模块有个问题,无法兼容老版本,此时我们可以用可选参数

为了实现可选参数,需要位这个参数提供一个缺省值,如下:

def print_lol(the_list, level=0):

这样,我们使用以下两种都是一样的了:

print_lol(li)
print_lol(li, 0)

API还是不对

上述nester.py模块还有个问题,并不是所有人都想有缩进,那如何兼容不带缩进呢

再添加一个新的变量

# coding=utf-8

def print_lol(the_list, indent=False, level=0):
"""
所提供列表中的各个数据项会(递归地)打印到屏幕上,而且各占用一行
:param indent: False-不打开缩进,True-打开缩进
:param the_list: 包含或者不包含嵌套列表的列表
:param level:用来在遇到嵌套列表时插入制表符
:return: None
"""
for each in the_list:
if isinstance(each, list):
print_lol(each, indent, level+1)
else:
if indent:
for tab_stop in range(level):
print("\t", end="")
print(each) if __name__ == '__main__':
li = [1, [2, 3], 4]
print_lol(li, True)

 

Head First Python之2函数模块的更多相关文章

  1. python 循环语句 函数 模块

    python循环语句 while循环语法结构 当需要语句不断的重复执行时,可以使用while循环 while expression: while_suite 语句ehile_suite会被连续不断的循 ...

  2. Python(2):创建函数模块

    说明: 在使用python的时候我们除了使用内置的函数之外,可能还需要使用一些别人写的函数.或者我们写的代码也希望可以给其他人使用.要实现这样的功能,我们就需要按照下面的步骤来定义自己的模块: Ste ...

  3. python基础14 ---函数模块5(模块和包)

    模块与包 一.模块 1.模块是怎么诞生的. 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到 不同的文 ...

  4. python基础12 ---函数模块2

    函数模块 一.sys函数模块详解 1.sys.argv[x] 功能:从程序外部接受参数,接收的参数个数可以是多个,在程序内部sys.argv吧这些外部参数转换成元组的形式,然后以索引x的方式在内部取出 ...

  5. python基础11 ---函数模块1

    函数模块 一.函数模块的作用(为什么要有函数模块) 1.函数模块可以减少代码量 2.函数模块方便阅读 3.函数模块维护性强二.函数模块的本质以及调用方法 1.函数模块的本质就是一个.py结尾的文件,该 ...

  6. Python变量/运算符/函数/模块/string

    Python笔记(一) 1.变量类型 Python 有五个内置的简单类型:bool.int.long.float 和 complex.这些类型是不可变的,就是说整数对象一旦创建,其类型便不可更改. t ...

  7. python基础13 ---函数模块3(正则表达式)

    正则表达式 一.正则表达式的本质 1.正则表达式的本质(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的 ...

  8. python基础14 ---函数模块4(configparser模块)

    configparser模块 一.configparser模块 1.什么是configparser模块:configparser模块操作配置文件,配置文件的格式与windows ini和linux的c ...

  9. python之定义参数模块argparse(二)高级使用 --传参为函数的实现

    我们在文章python之定义参数模块argparse的基本使用中介绍了argparse模块的基本使用方法 当前传入的参数只能是int.str.float.comlex类型,不能为函数,这有点不方便,但 ...

随机推荐

  1. dede数据库类使用方法 $dsql(转)

    dede数据库类使用方法 $dsql   dedecms的数据库操作类,非常实用,在二次开发中尤其重要,这个数据库操作类说明算是奉献给大家的小礼物了. 引入common.inc.php文件 ? 1 r ...

  2. windows下通过Git Bash使用Git常用命令

    Git跟SVN最大不同的地方就是分布式.SVN的集中式与Git的分布式决定各自的业务场景.既然是分布式的,那么大部分操作就是本地操作.一般Git操作都是通过IDE,比如Eclipse,如果装了Git ...

  3. Linux LED字符设备驱动

    // 申请IO资源 int gpio_request(unsigned gpio, const char *label); // 释放IO资源 void gpio_free(unsigned gpio ...

  4. 73个word使用终极技巧

    1.问:Word里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同? 答:分节,每节可以设置不同的页眉.文件——页面设置——版式——页眉和页脚——首页不同 2.问:请问Word中怎样让每一章用 ...

  5. AngularJS:template2

    ylbtech-AngularJS: 1.返回顶部 1.   2. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1.   2.  6.返回顶部   作者:ylbtech出处:h ...

  6. win10 Edge 无法上网代理服务器错误

    当连接好网络时 Edge无法上网,提示代理服务器错误,系统其他非第三方软件同样网络异常 解决:为当前所连接的网络更新自动检测 控制面板->网络和Internet->Internet选项-& ...

  7. Redis存储AccessToken

    AccessToken 2小时有效. 就不要每次都调取了,这样会造成浪费. 或者存入Session中,设置过期时间. 或者存入Redis中,设置过期时间. 过期之后,进行重新获取. <?php ...

  8. generate_scripts

    echo "#!/usr/bin/env python" >$1echo "#-*- encoding=UTF-8 -*-" >>$1echo ...

  9. Python Twisted系列教程12:改进诗歌下载服务器

    作者:dave@http://krondo.com/a-poetry-transformation-server/  译者:杨晓伟(采用意译) 你可以从这里从头阅读这个系列. 新的服务器实现 这里我们 ...

  10. RAD 10 蓝牙

    http://docwiki.embarcadero.com/Libraries/Seattle/en/System.Bluetooth.TBluetoothLEManager.StartDiscov ...