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)

kider.py

如果要发布的话,最好将函数快代码添加上注释。在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‘]

modulePath

 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    = ‘[email protected]‘,
 8     url        = ‘http://www.rampage.com‘,
 9     description    = ‘KiDe\‘s first test module‘,
10     )      

setup.py

》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)

UseKider

为啥不能直接通过 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)

kider.py

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

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

Invoke

时间: 2024-12-13 04:22:52

Python(2):创建函数模块的相关文章

Python 动态创建函数【转】

知乎上也有相似的问题 偶然碰到一个问题,初想是通过动态创建Python函数的方式来解决,于是调研了动态创建Python函数的方法. 定义lambda函数 在Python中定义lambda函数的写法很简单, func = lambda: "foobar" 可以认为lambda函数是最常用的一种方式. 定义局部函数 Python中函数可以在代码块中进行定义,比如decorator就是通过这种方式实现的, def decorator(func): def _(*args, **kwargs)

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

模块与包 一.模块 1.模块是怎么诞生的. 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到 不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Module). 2.模块的作用. 提高了代码的可维护性.其次是编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序的时候,也经常引用其他模块,

Head First Python 第二章 函数模块&第三章 文件与异常&第四章 持久存储&第五章 处理数据

第三章 1.共享模块 模块和发布工具箱全世界共享模块 编写函数,以.py为文件后缀名,第三方库都在PyPI *注释代码:三引号(单双都可以) 发布过程P40 使用发布工具,函数模块变成了一个“发布”,可以使用import导入其他程序 2.如果函数模块功能不满意 添加参数以供api选择比添加函数工作量小! 首先考虑BIF内置函数 ----------------------------------------------------------- 第四章 1.文件 open()语句,readlin

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

函数模块 一.函数模块的作用(为什么要有函数模块) 1.函数模块可以减少代码量 2.函数模块方便阅读 3.函数模块维护性强二.函数模块的本质以及调用方法 1.函数模块的本质就是一个.py结尾的文件,该文件内写入大量函数 2.必须用import来引用函数模块,在调用函数模块时必须以"模块名.函数名"来调用函数模块中的函数. 3.有的时候我们只需要用到模块中的某个函数,也可以用"from 模块名 improt 函数1,函数2"的方式来引用该模块,但只是一次引用,不建议使

【Python】[03]函数模块

注释代码 在Python中,常用的注释技术是使用一个三重引号来建立多行注释,如果使用了一个三重引号,而没有将它赋值给一个变量,三重引号之间的所有内容都被认为是一个注释. 如果在一行的任意位置加了"#"符号,从这一点直到当前行末尾的所有内容都是注释,但是如果"#"出现在三重引号之间,那么"#"就只是注释内容的一部分. 接下来,发布Python代码到PYPI 首先,为模块创建一个文件夹命名为nester,将上个博客中最后保存的nester.py文件复

Head First Python之2函数模块

模块就是一个包含Python代码的文本文件,以.py结尾. 第三方模块都在PyPI(python package index)上,可使用PyPI发布你的模块,供他人使用. 注释代码 # coding=utf-8 """ nester.py模块 模块描述放在这里 """ def print_lol(li): """ 描述函数放在这里 :param li: list :return: None ""&

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

正则表达式 一.正则表达式的本质 1.正则表达式的本质(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行. 2.正则表达式简介 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分 强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的

python基础13 ---函数模块4(configparser模块)

configparser模块 一.configparser模块 1.什么是configparser模块:configparser模块操作配置文件,配置文件的格式与windows ini和linux的cf文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值),其配置文件(INI文件)由节(section).键.值组成. 2.configparser模块简介. ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号"[ ]"内包含的为sect

python学习笔记之——函数模块

1.函数参数说明: def login(name,info,passwd = '123456') 函数参数可以有默认值,调用函数时: 1.如果只传二个参数,则有默认值的一定要放到最后: def login(name,passwd = '123456',info='welcome to you') 2.如果传二个参数,一定要指明形参: login(user) login(user,passwd) login(user,info='欢迎') login(user,info='欢迎',passwd='