专栏首页Java开发者杂谈Python(2):创建函数模块

Python(2):创建函数模块

说明:

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

Step1:新建一个py文件

首先我们将前面一章所写的打印列表的函数保存为一个.py文件,假设我这里保存为 kider.py。

1 """
2 这是一个打印列表的函数,如果列表中有嵌套的列表也会展开打印出来
3 """
4 def print_list(movies):
5     if isinstance(movies, list):
6         for movie in movies:
7             print_list(movie)
8     else:
9         print(movies)

如果要发布的话,最好将函数快代码添加上注释。在python里面,三引号 """ 中的字符串表注释,这个是多行注释 ,单行注释使用 # 。 这时候如果想使用该模块,最原始的办法是将前面的kider.py文件放入到本机的python模块地址。

如何知道本机的python模块放在哪,只需在IDLE(python控制台)中输入:

import sys

sys.path

sys.path的输出就是本机的python模块所在的文件

1 >>> import sys
2 >>> sys.path
3 ['', '/usr/local/lib/python3.5/dist-packages/redis-2.10.5-py3.5.egg', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/home/zyq/.local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']

 Step2:将py文件作为模块安装到本地 但其实我们不需要将自己写的python模块放入本机的python模块地址,可以直接通过命令来安装python模块到本机: 主要步骤如下: 》1.新建一个和准备安装的python文件同名的目录,这里取名为 kider,并且将前面的kider.py文件放入该目录下 》2. 在该目录下建立一个setup.py文件,并且编辑文件的内容大致如下:

 1 from distutils.core import setup
 2 setup(
 3     name              = 'kider',
 4     version         = '1.0.0',
 5     py_modules     = ['kider'],
 6     author        = 'KiDe',
 7     author_email    = '929557120@qq.com',
 8     url        = 'http://www.rampage.com',
 9     description    = 'KiDe\'s first test module',
10     )      

》3. 进入kider目录,并且使用 python3 setup.py sdist 来进行编译,编译完成之后可以发现多了很多文件和目录 》4. 使用 sudo python3 setup.py install 命令安装到本地的python模块。 》5. 接下来可以在程序中按如下方式使用python模块了:

1 import kider  
2 movies = ["haha", [1, 2, "Ha"], "movie2"];
3 kider.print_list(movies)

为啥不能直接通过 print_list来使用刚刚发布的python模块?

  这是因为默认的在python shell中的命名空间是 __main__, 如果想要使用print_list 因为他是属于 kider 命名空间的,所以应该带上该名称空间。 不过当然你也可以使用和setup.py中的同样的语法,将命名空间中的方法引入进来,这样你就可以直接使用方法名: form kider import print_list   但是这样存在一个风险,就是会覆盖当前名称空间的同名函数。

PS:注意到install之后其实在新生成的 __pycache__ 文件夹中多了一个 pyc文件,该文件可以当做是编译后的class文件,可以删除,但是如果删除,在执行的时候就可能损失掉对应的优化性能。

Step3:可选的把模块上传到pypi 现在可以把模块上传到pypi(python package index)上了: 》1. 首先需要去官网上注册一个账号  http://pypi.python.org 》2. python3 setup.py register   如果完成了第一步,那么该步骤选则选项1, 否则其实该部也可以选择2 进行直接新账号创建注册 》3. pyhton3 setup.py sdist upload  这一步进行将模块代码上传 假设选择了将代码上传到高大上的pypi,那么肯定需要对原来函数的功能进行改进,增加两个参数,一个可以指定是否需要缩进,一个可以指定缩进时tab的个数。最终版本的代码如下:

 1 """ this is KiDe's python module """
 2 
 3 """ 这个函数打印传入的参数,如果传入的参数是一个列表,则会依次打印列表中的项。
 4     支持多重嵌套的列表,会逐行依次打印出每一个嵌套列表中的所有子项。
 5 """
 6 # 第一个参数是输入的准备用来输出的对象,第二个参数表示如果对象中有子列表是否对子项采用缩进,第三个参数表示如果采用缩进,缩进的tab数量
 7 def print_list(args, level=0, indent=False):
 8     if isinstance(args, list):
 9         for arg in args:
10             print_list(arg, level+1, indent)
11     else:
12         if indent:
13             for tab_stop in range(level):
14                 print("\t", end='')
15         print(args)

对于python指定了缺省值的参数可以省略,比如可以直接指定第三个参数而不指定第二个参数的值,此时的调用方式如下:

1 >>> import kider
2 >>> kider.print_list(['aa', 'bb', 'cc'], indent=True)
3     aa
4     bb
5     cc

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux下python升级步骤

      首先下载源tar包   可利用linux自带下载工具wget下载,如下所示: 1 # wget http://www.python.org/ftp/...

    SecondWorld
  • ActiveMQ专题2: 持久化

    ​ 前面一篇AMQ专题中,我们发现对于Topic这种类型的消息,即使将deliveryMode设置为持久化,只要生产者在消费者之前启动。消息生产者发布的消息还是...

    SecondWorld
  • 算法之数组和问题

    算法题之数组和求解 数组和问题 ​ 加上给定一个数组和值x。设计一个算法使得如果数组中存在两个元素的和为x,则输出两个元素的值组成的数组(不区分先后),否则输出...

    SecondWorld
  • 机器推理系列文章概览:七大NLP任务最新方法与进展

    导读:自然语言处理的发展进化带来了新的热潮与研究问题,研究者们在许多不同的任务中推动机器推理(Machine Reasoning)能力的提升。基于一系列领先的科...

    AI科技大本营
  • 机器推理系列文章概览:七大NLP任务最新方法与进展

    从规则方法、统计方法到目前的深度学习方法,自然语言处理(NLP)研究一直处于不断发展和进化的状态之中,并在过去五年取得了令人瞩目的成果。对于一个拥有充分标注语料...

    大数据文摘
  • 用几张图看懂大数据技术

    我们做政企客户的解决方案支撑工作,一直在跟客户提到“大数据”,通过大数据就能将数据转化成推动精准营销、精准管理的利器。但实际,我们对大数据的理解有多少,今天我们...

    希望的田野
  • Python入门2

    定义:列表是最常用的python数据类型,一个列表中可以存储多个不同类型的数据。 语法:[]可以是number、string、bool等

    潇洒坤
  • Linux下安装Python3.x.x

    linux一般都自带了python,然而2014年以前的linux自带的python都是2.x.x甚至更早的版本。

    py3study
  • [博客小程序]评论通知功能实现(二)——实战过程中的坑

    当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发...

    Bug生活2048
  • python3 实现对比conf 文件差

    py3study

扫码关注云+社区

领取腾讯云代金券