【head first python】2.共享你的代码 函数模块

#coding:utf-8
#注释代码!
#添加两个注释,一个描述模块,一个描述函数

‘‘‘这是nester.py模块,提供了一个名为print_lol()的函数,
这个函数的作用是打印列表,其中可能包含
(也可能不包含)嵌套列表。‘‘‘
def print_lol(the_list):
    ‘‘‘这个函数取一个位置参数,名为the_list,这可以是任何python列表
    (也可以是包含嵌套列表的列表),所指定列表的每个数据项
    回(递归地)输出到屏幕上,每个数据项各占一行。‘‘‘
    for item in the_list:
        if isinstance(item,list):
            print_lol(item)
        else:
            print item
print_lol(movies)

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

#试着使用
movies = movies = [‘The Holy Grail‘, 1975, ‘The Life of Brain‘, 1979,
          ["Graham Chapman",["Michael Palin","John Cleese","Terry Gilliam","Eric Idle"]]]
print_lol(movies)

【准备发布】

1.为模块创建一个文件夹nester

2.在文件夹中创造一个setup.py文件

#coding:utf-8
from distutils.core import setup
#从python发布工具中导入setup函数

#这些是setup函数的参数
setup(
    name                    =‘nester‘,
    version                    =‘1.0.0‘,
    py_moudles                =[‘nester‘],
    author                    =‘HETAO‘,
    author_email            =‘[email protected]‘,
    url                        =‘https://home.cnblogs.com/u/Archimedes/‘,
    description                =‘A simple printer of nested lists‘,
    )

构建发布

1.构建一个发布文件

2.将发布安装到python本地副本中

这时nester文件夹中会出现两个新的文件夹,他们是由发布工具创建的

【导入模块并使用】

Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import nester
>>>

可以看到导入成功了,接下来试着使用它

Python 2.7 (r27:82525, Jul  4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import nester
>>> movies = movies = [‘The Holy Grail‘, 1975, ‘The Life of Brain‘, 1979,
          ["Graham Chapman",["Michael Palin","John Cleese","Terry Gilliam","Eric Idle"]]]

>>> print_lol(movies)

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    print_lol(movies)
NameError: name ‘print_lol‘ is not defined  #python没有找到你的函数!!!
>>> 

这是我们就要认识到一个东西叫做【模块的命名空间】

命名空间i就像是姓氏,正确的使用方式是nester.print_lo(movies)

>>> nester.print_lol(movies)
The Holy Grail
1975
The Life of Brain
1979
Graham Chapman
Michael Palin
John Cleese
Terry Gilliam
Eric Idle
>>> 

这样就好了

注:如果使用from nester import print_lol 就可以把指定函数增加到当前命名空间,也就是说不用使用nester这个命名空间限定了。

但这种做法并不被提倡,因为在这时候要注意如果当前命名空间中已经定义了一个同名的函数print_lol,那么之前这个函数就会被引入的函数所覆盖而带来麻烦。

【注册PYPI网站】

要在PYPI上发布,就要先注册一个账号(https://pypi.python.org)

截止 【【P49】】

时间: 2024-10-04 13:04:37

【head first python】2.共享你的代码 函数模块的相关文章

02 共享你的代码 函数模块

通过 python 模块共享代码, 可以向整个python社区开放你的代码, 如果创建, 安装和发布你的共享模块呢? 注释 多行注释, 用3个双引号""" this is a comment. """单行注释 # 函数转化为模块 模块就是一个包含python代码的文本文件, 对模块的主要需求就是要求文件名以.py结尾.例如:def checkList(the_list): for each_item in the_list: if isinsta

python __slots__ 使你的代码更加节省内存

在默认情况下,Python的新类和旧类的实例都有一个字典来存储属性值.这对于那些没有实例属性的对象来说太浪费空间了,当需要创建大量实例的时候,这个问题变得尤为突出. 因此这种默认的做法可以通过在新式类中定义了一个__slots__属性从而得到了解决.__slots__声明中包含若干实例变量,并为每个实例预留恰好足够的空间来保存每个变量,因此没有为每个实例都创建一个字典,从而节省空间. 现在来说说python中dict为什么比list浪费内存? 和list相比,dict 查找和插入的速度极快,不会

共享一个在线代码片段收集服务

目的:用于个人收集代码片段或者网页片段. 使用前需注册或使用Google帐号登录. 主界面: 创建代码段: 创建文章片段: 查看代码片段: 网址在这里:http://codebag.urtracker.cn 欢迎有需的同学来使用. 共享一个在线代码片段收集服务,布布扣,bubuko.com

React-Native 开发 android & ios App,共享一份代码

React-Native 开发的App, 所有组件ios & android 共用, 共享一份代码 包括一些自定义的组件, 如NavigationBar, TabBar, SegmentedControl, 使用字体图标, 具有一定的参考意义 主要专注于布局, 共享组件/代码, 以及一些React自带的组件, 如: ScrollView, TouchableOpacity, View, Text, ListView, Image, WebView 和 Api的使用, 这并不是一个完整版, 只是业

深入一步探索Python计算身份证校验位的代码写法【map -&gt; imap】

根据身份证末位的校验位计算方法,写出了python版的. 根据别人写的一个修改得到: 用到map, zip, sum #!/usr/bin/env python def check_bit( string ): s = map( int, string ) a = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] b = sum( map( lambda x: x[0]*x[1], zip(a, s) ) ) c = b % 11 d =

Python连接MySQL的实例代码

Python连接MySQL的实例代码 MySQLdb下载地址:http://sourceforge.net/projects/mysql-python/ 下载解压缩后放到%Python_HOME%/Lib/site-packages目录中,python会自动找到此包. MySQLdb基本上是MySQL C API的Python版,遵循Python Database API Specification v2.0. 其他: 1. 平台及版本 linux 内核2.6,gcc 3.4.4,glibc 2

Python 官方代码threading模块的一个死锁的bug

Python的threading模块有一个比较严重的bug:那就是可能会让线程的等待提前结束或者延迟,具体的原因是因为线程的wait操作判断超时时依赖于实时时间,即通过time.time()获取到的时候,为了显示这个问题,请看下面的例子: from threading import Thread from threading import Event import time e = Event() stop = False class MyThread(Thread): def __init__

python 遍历文件夹文件代码

import os def tree(top): for path, names, fnames in os.walk(top): for fname in fnames: yield os.path.join(path, fname) for name in tree('C:\Users\XXX\Downloads\Test'): print name python 遍历文件夹文件代码

用python做自动化测试--对Java代码做单元测试 (1)

大多数时间我们说的python,指的是C实现的python, 在这篇文章里,我们要说的是java实现的python,她的名字叫Jython, 大家可以到到官方网站http://www.jython.org/ 看看,最近2年很活跃,发布新版本比较多,其实我在jython 2.1版本的时候就开始接触过,但当时看到社区不活跃,没继续学习应用下去.最近公司有几个项目需要对外发布java 实现的API, java毕竟没那么熟悉,写起API接口测试的代码来速度还是没那么快, 还是高大上的python来的快,