(1)主程序main.py與模塊程序mod1.py在同一目錄下。
成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的鄂托克前網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
--src
|--mod1.py
|--main.py
直接在main.py中導(dǎo)入模塊mod1.py,即 import mod1 或 from mod1 import *
(2)主程序main.py所在目錄是模塊程序mod.py所在目錄的父目錄。
--src
|--mod1.py
|--main.py
---mod2
?|--mod2.py
先需要在mod2文件夾中建立空文件__init__.py
然后在main.py中導(dǎo)入模塊mod2.py,即 import mod2.mod2 或 from mod2.mod2 import *
(3)主程序main.py導(dǎo)入上層目錄中的模塊或其他目錄(平級)下的模塊。
--src
|--mod1.py
---mod2
?|--mod2.py
---sub
?|--main.py
先需要在mod2文件夾中建立空文件__init__.py,而src文件夾下不需要建立
然后進入主程序main.py所在的路徑,執(zhí)行python main.py
在main.py中導(dǎo)入模塊mod2.py,即 import mod2.mod2 或 from mod2.mod2 import *
執(zhí)行前在main.py中加入:
import sys
sys.path.append("..")
import mod1
import mod2.mod2
這個問題涉及到包和模塊管理。包名和模塊名一般是小寫。你的文件是下面的結(jié)構(gòu),需要創(chuàng)建空文件 b/__init__.py,將b目錄變成package。a/a.py
12
from b.c import indexindex()
b/c.py
12
def index(): print("hello")
b/__init__.pya/a.py 里面有兩種引用方式,相對引用和絕對引用:# 如果a.py是 library,兩種引用方式都可以
1
from ..b.c import index
# 如果a.py是 executable,必須使用絕對引用
1
from b.c import index
如果使用絕對引用,需要確保b所在目錄在PYTHONPATH (sys.path)里面,比如可以這樣執(zhí)行:
1
env PYTHONPATH=. python a/a.py
python的內(nèi)建函數(shù)即是python自帶的函數(shù),這種函數(shù)不需要定義,并且不同的內(nèi)建函數(shù)具有不同的功能,可以直接使用。
以下是部分內(nèi)建函數(shù)用法及說明
1、abs(),返回數(shù)字的絕對值。
2、all(),如果集合中所有元素是true或集合為空集合,返回True。
3、any(),如果集合中有一項元素是true,返回True;空集合為False
4、ascii(), 返回一個表示對象的字符串。
5、bin(),將整數(shù)轉(zhuǎn)換為前綴為“0b”的二進制字符串。
6、bool(),返回一個布爾值,即True或者之一False。
7、bytearray(),返回一個新的字節(jié)數(shù)組。
8、callable(對象)判斷對象參數(shù)是否可被調(diào)用(可被調(diào)用指的是對象能否使用()括號的方法調(diào)用)
9、chr(),返回表示Unicode代碼點為整數(shù)i的字符的字符串。與ord()函數(shù)相反。
推薦學(xué)習(xí)《python教程》
10、classmethod,將方法轉(zhuǎn)換為類方法。
11、compile,將源代碼編譯為代碼或AST對象。代碼對象可以由exec()或執(zhí)行eval()。 source可以是普通字符串,字節(jié)字符串或AST對象。
12、dic(),創(chuàng)建一個字典
13、divmod(a,b),將兩個數(shù)作為參數(shù),并在使用整數(shù)除法時返回由商和余數(shù)組成的一對數(shù)
14、enumerate(iterable,start = 0)
enumerate是枚舉、列舉的意思
對于一個可迭代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值
enumerate多用于在for循環(huán)中得到計數(shù)
15、eval,將一個字符串變?yōu)樽值?/p>
16、exec(object [, globals[, locals]])exec語句用來執(zhí)行儲存在字符串或文件中的Python語句
17、filter(功能,可迭代)
filter函數(shù)用于過濾序列
filter()把傳入的函數(shù)依次作用于每個元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。
1、導(dǎo)入整個模塊:
一般格式為:
import
模塊1[模塊2[,...]]
模塊名就是程序文件的前綴,不含.py,可一次導(dǎo)入多個模塊,導(dǎo)入模塊后,調(diào)用模塊中的函數(shù)或類時,需要以模塊名為前綴,這樣代碼讀起來更容易理解。
例:
import
math
math.sin(0.5)
0.4794255
2、與form聯(lián)用導(dǎo)入整個模塊:
一般格式為:
form
模塊名
import*
這種方式導(dǎo)入模塊后,調(diào)用模塊中的函數(shù)或類,僅使用函數(shù)名或類名,代碼簡潔,但可讀性差,不容易理解。
例:
form
math
import*
cos(0.5)
0.8775825
3、與form聯(lián)用導(dǎo)入一個或多個對象:
一般格式為:
form
模塊名
import
對象1[,對象2[,對象...]]
這種方式只導(dǎo)入模塊中的一個或多個對象,調(diào)用模塊中的對象時,僅使用對象名
例:
form
math
import
sin,cos,exp
sin(0.5)
0.4794255
cos(0.5)
0.8775825
exp(1)
2.7182818
有如下目錄:
即python文件夾下有file1, file2, pfile.py, data.py,文件夾file1下又有file1_1, pfile1.py, 文件夾file2下有pfile2.py,文件夾file1_1下又有pfile1_1.py。
在文件pfile.py中導(dǎo)入pfile1.py, pfile2.py或 pfile1_1.py,并使用其中的函數(shù)(假設(shè)函數(shù)名分別文fun1(), fun2(), fun1_1()):
需要注意的是,這種導(dǎo)入方式下,如果要用導(dǎo)入的文件中的函數(shù)或者類,需要在其前面加上文件名,即 "文件名.函數(shù)名" 的形式 。
有些教程里面說,需要在下一級目錄下新建一個空的python文件命名為 __init__.py,但我在運行時發(fā)現(xiàn)不建一個文件也會導(dǎo)入成功。
如果要在pfile1.py中調(diào)用pfile.py 和 pfile2.py,因為當(dāng)前路徑是 '/home/puxitong/python/file1/' ,而 pfile.py和pfile1.py在路徑'/home/puxitong/python/' 及其子路徑下,這里的思路是將上一級目錄 '/home/puxitong/python/' 添加在系統(tǒng)路徑中,可以直接訪問pfile.py,然后將pfile2.py 按照下一級路徑導(dǎo)入方式進行導(dǎo)入:
如果要在pfile1_1.py中導(dǎo)入pfile.py, pfile1.py, pfile2.py呢? 原理是一樣的,即將文件pfile.py所在路徑添加到系統(tǒng)路徑中,可直接導(dǎo)入pfile.py, 再按照下級文件導(dǎo)入方式導(dǎo)入pfile1.py和pfile2.py:
導(dǎo)入 import module_name
調(diào)用 module_name.function_name()
在這種情況中,不會出現(xiàn)下面兩種方式的缺點,即具有相同函數(shù)名的問題,因為一個文件中不存在兩個相同的文件名。但缺點是能不清晰顯示出使用到的函數(shù),調(diào)用的時候也需要重復(fù)寫模塊名。
導(dǎo)入 from module_name import function_name1 , (function_name2...)
調(diào)用 function_name()
在這種情況中,雖然能清楚的表示出使用到的函數(shù),如果是多個不同的模塊,但其中的函數(shù)名有重疊時,后導(dǎo)入的模塊函數(shù)為能使用的函數(shù),即產(chǎn)生覆蓋函數(shù)。
導(dǎo)入 from module_name import *
調(diào)用 function_name()
這種方法不推薦使用,因為它集合了前兩種方式的缺點,即導(dǎo)入不清晰,調(diào)用全部函數(shù)會更容易造成覆蓋函數(shù)。