【Python学习/教程2】-函数模块

Python提供了一组技术,可以很容易的实现共享,包括模块和一些开发工具:

模块允许你合理组织代码来实现最优共享。

发布工具允许你想全世界共享你的模块。

我们可以将上一节的函数

def print_lol(the_list):

     for movie in the_list:
        if isinstance(movie,list):

           print_lol(movie)

        else :

            print(movie)

将这个写入text中,并将后缀名改为.py


Python包索引(Python Package Index, PyPI)为Internet上的第三方Python模块提供了一个集中的存储库。准备好之后,就可以使用PyPI来发布你的模块,从而使你的代码可供其他人使用。

在上传之前,这个代码还不完备,因为他少了必要的注释

Python中,多行注释是

"""                 """

比如说:

""" def print_lol(the_list):

     for movie in the_list:
        if isinstance(movie,list):

           print_lol(movie)

        else :

            print(movie) """

#为单行注释

#定义了movies变量
movies=["The Holy Grail",1975,"The Life of Brian",1979,["Graham Chapman",["Michael Paline","John Cleese","Terry Gilliam","Eric Idle","Terry Jones"]]]

"""
这个函数是用来循环遍历列表中的列表的。
"""
def print_lol(the_list):

     for movie in the_list:
        if isinstance(movie,list):

           print_lol(movie)

        else :

            print(movie)
		
#调用上面的函数
print_lol(movies)

点击这个.py文件可以直接运行(一闪而逝,输出了之后就不停留了。)

准备发布

    在Python中,所谓“发布”是指一个文件集合,这些文件联合在一起允许你构建、打包和发布你的模块。

    1:首先为模块新建一个文件夹,并将.py文件放入到文件夹中

    2:在新文件夹中创建一个名为setup.py的文件。

            这个文件包含有关发布的元数据。编辑这个文件增加以下代码:

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

setup(
	name		=	'test'
	version		=	'1.0.0'
	py_modules	=	['test']
	author		=	'紫极岚'
	author_email=  	'[email protected]'
	url			= 	'https://blog.csdn.net/qq_22570497'
	description =	'一个简单的遍历列表的函数'
)

构建发布

    3:构建一个发布文件。

    发布工具包含有构建一个发布所需的所有功能。在文件夹中打开一个终端窗口,

    键入一行命令 python setup.py sdist

    (如果你想运行此语句必须先配置python的环境变量,就是在环境变量的path后面加上 ;你的python安装路径     就可以了。)

    4:将发布安装到你的Python本地副本中

         python setup.py install

导入模块并使用

import test

使用python关键字 Import引入,test后面不需要加上后缀名.py

import语句告诉Python将test.py模块包含在程序中。之后我们就可以使用这个模块中的函数了

>>> import test
>>> 
movies=["The Holy Grail",1975,"The Life of Brian",1979,
["Graham Chapman",
["Michael Paline","John Cleese","Terry Gilliam","Eric Idle","Terry Jones"]
]]
>>> 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的模块实现命名空间

Python中所有代码都有一个命名空间关联。

主Python程序中(以及IDLE shell中)的代码与一个名为_main_的命名空间关联。将代码放在其单独的模块中时,Python会自动创建一个与模块同名的命名空间。所以,你的模块中的代码会与一个名为test的命名空间关联。

我们用test.print_lol(movies)调用即可

from test import print_lol 这样会把指定的函数增加到当前的命名空间来,这样的话调用就不用加前面的命名空间了。

这里需要特别注意如果你原来的代码中有print_lol函数那么引入的函数会覆盖你本来的函数。

最终版本的Python模块

#定义了movies变量
movies=["The Holy Grail",1975,"The Life of Brian",1979,["Graham Chapman",["Michael Paline","John Cleese","Terry Gilliam","Eric Idle","Terry Jones"]]]

"""
这个函数是用来循环遍历列表中的列表的。
如果def print_lol(the_list,level):直接这么写的话level参数是必须的
这样更新代码会导致API更新,不传level就不能用
写成level=0这个level参数就不是必填的了。
如果level为负数,则关闭缩进功能
"""
#这里注意False的F要大写
def print_lol(the_list,flag=False,level=0):
	for movie in the_list:
		if isinstance(movie,list):
			print_lol(movie,flag,level+1)
		else:
			if flag:
				for num in range(level):
				#tab换行,tab的个数为level的个数
					print("\t",end='')
				print(movie)
			else:
				print(movie)
		
#调用上面的函数
print_lol(movies)





猜你喜欢

转载自blog.csdn.net/qq_22570497/article/details/80745204