zoukankan      html  css  js  c++  java
  • 二、共享你的代码 ----- 函数模块

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

    对模块的主要需求就是要求文件名以.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("	",end=' ')        
                print(each_item)
  • 相关阅读:
    Linux命令之 文件归档管理
    C#总结项目《影院售票系统》编写总结完结篇
    C#总结项目《影院售票系统》编写总结三
    C#中MD5加密
    C#中的序列化与反序列化
    C#总结项目《影院售票系统》编写总结二
    C#总结项目《影院售票系统》编写总结一
    java多线程与线程并发四:线程范围内的共享数据
    java多线程与线程并发三:线程同步通信
    java多线程与线程并发二:线程互斥
  • 原文地址:https://www.cnblogs.com/bing0818/p/4895293.html
Copyright © 2011-2022 走看看