二、共享你的代码 ----- 函数模块

  • 将一个函数转换为可共享的模块

对模块的主要需求就是要求文件名以.py结尾,这是python的扩展名

一个标准的python文件应该包含代码与注释,第一个注释描述模块,第二个描述函数。以第一章print_lol()函数为例,代码如下

"""这是“nester.py”模块,提供一个名为print_lol()的函数,这个函数的作用就是打印列表,其中有可能包含(也有可能不包含)嵌套列表。"""

def print_lol(the_list):

    """这个函数取一个位置参数,名为“the_list”,这可以是任何python列表(也可以是包含嵌套列表的列表)。所指定的列表中的的每个数据项会(递归地)输出到屏幕上,各数据项各占一行。"""
       
    for each_item in the_list:
        if isinstance(each_item,list):
            print_lol(each_item)        #递归调用
        else:
            print(each_item)
  • 如何构建、打包和发布你的模块?

        1.为模块创建一个文件夹,将nester.py文件放入到文件夹nester中

        2.在nester文件夹中创建一个名为“setup.py”的文件。增加一下代码:

from distutils.core import setup          #从python发布工具导入“setup”函数

setup(
           name          ='nester',
           version       ='1.0.0',
           py_modules    =['nester'],      # 将模块的元数据与setup函数的参数关联
           author        ='hfpython',
           author_email  ='xxx@xxx.com',
           url           ='http://www.headfirstlabs.com',
           description   ='A simple printer of nested lists',    
)  

        3.构建一个发布文件。在nester文件夹中打开一个终端窗口,键入命令:  python3 setup.py sdist

        4.将发布安装到你的Python本地副本中。   仍然在终端窗口键入命令: sudo python3 setup.py install

  • Python的模块实现命名空间

命名空间的名字就是生活中的姓氏。关于区别请看下边代码:

import nester

nester.print_lol(the_list)      # 调用需要添加模块名
from nester import print_lol

print_lol(the_list)         #直接调用
  • PyPI网站      http://pypi.python.org/

PyPI为Internet上的第三方Python模块提供一个集中的存储库。可以使用PyPI来发布你的模块,从而是你的代码可供他人使用。

  • 写新代码之前,先考虑BIF(内置函数)

list()         这是一个工厂函数,创建一个新的空列表

range()    返回一个迭代器,根据需要生成一个指定范围的数字

enumerate()    创建成对数据的一个编号列表,从0开始

int()    将一个字符串或者另一个数转换为一个整数(如果可行)

id()    返回一个Python数据对象的唯一标识

next()    返回一个可迭代数据结构(如列表)中的下一项

  • 使用可选参数

注意以下两种定义函数参数的写法

def print_lol(the_list,level):       #这两个参数在函数调用时都是必须提供的
def print_lol(the_list,level=0):       #增加一个缺省值使得level变成一个可选的参数

 

定义了参数的缺省值之后,可以采用多种不同的方法调用这个函数,如:

nester.print_lol(movies,0)
nester.print_lol(movies)
nester.print_lol(movies,2)
  • 修改模块之后,模块支持两个API

修改模块之后如何创建并向PyPI上传一个新的发布,首先先修改setup.py程序中的version设置

name          =  'nester'
version        =  '1.2.0'          #此处变为1.2版本
py_modules =  ['nester']

 

修改代码后,上传PyPI:  命令:   python3 setup.py sdist upload

  • 再次修改模块

为函数增加第三个参数,使用这个参数来控制是否缩进代码

def print_lol(the_list,indent=False,level=0):
    
    for each_item in the_list:
        if isinstance(each_item,list):
            print_lol(each_item,indent,level+1)        
        else:
            if indent:
                for tab_stop in range(level):
                    print("\t",end=' ')        
            print(each_item)

 

转载于:https://www.cnblogs.com/bing0818/p/4895293.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值