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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章