设python中有模块m、如果希望同时导入m中的所有成员_python-模块
先做幾個練習題
練習計算一個四乘四矩陣的所有元素的和,以及對角線之和
#encoding=utf-8
a=[[1,2,3,4],
[2,5,2,3],
[1,5,3,2],
[5,3,2,5]
]
#encoding=utf-8
a=[[1,2,3,4],
[2,5,2,3],
[1,5,3,2],
[5,3,2,5]
]
total_sum=0
diagonal_sum=0
‘‘‘
for i in a:
print "i:",i
for j in range(len(i)):
print i[j],
total_sum+=i[j]
print total_sum
‘‘‘
#正對角線之和
for i in range(len(a)):
diagonal_sum+=a[i][i]
print diagonal_sum
c:\Python27\Scripts>python task_test.py
14
#反對角線之和
for i in range(len(a)):
diagonal_sum+=a[i][len(a)-i-1]
print diagonal_sum
.c:\Python27\Scripts>python task_test.py
16
第二題:輸入數(shù)組,最大的與第一個元素交換,最小的與最后一個元素交換,輸出數(shù)組。
#encoding=utf-8
a=[]
while True:
try:
content=raw_input("input the interger number:")
if content.strip()==‘over‘:
break
else:
a.append(int(content))
except:
print "input error, input again!"
print a
max_num=max(a)
min_num=min(a)
a[a.index(max_num)] = a[0]
a[0]=max_num
a[a.index(min_num)] = a[-1]
a[-1]=min_num
print a
第三題:有n個整數(shù),使其前面各數(shù)順序向后移m個位置,最后m個數(shù)變成最前面的m個數(shù)
#encoding=utf-8
a=[1,2,3,4,5,6,7,8,9,0]
m=3
print "a:",a
print "m",m
a_first=a[-m:]
a_second=a[:-m]
print a_first
print a_second
print "a:",a_first+a_second
c:\Python27\Scripts>python task_test.py
a: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
m 3
[8, 9, 0]
[1, 2, 3, 4, 5, 6, 7]
a: [8, 9, 0, 1, 2, 3, 4, 5, 6, 7]
找到模塊或包的三種方法:
把包或模塊放到與當前文件同一個目錄下
#encoding=utf-8
import a
print a.add(1,3)
c:\Python27\Scripts>python task_test.py
4
把包或模塊的路勁放到path里
#encoding=utf-8
import sys
print "sys.path:",sys.path
sys.path.append("d:\\")
print "sys.path:",sys.path
import a
c:\Python27\Scripts>python task_test.py
sys.path: [‘c:\\Python27\\Scripts‘, ‘C:\\Windows\\SYSTEM32\\python27.zip‘, ‘C:\\Python27\\DLLs‘, ‘C:\\Python27\\lib‘, ‘C:\\Python27\\lib\\plat-win‘, ‘C:\\Python27\\lib\\lib-tk‘, ‘C:\\Python27‘, ‘C:\\Python27\\lib\\site-packages‘]
sys.path: [‘c:\\Python27\\Scripts‘, ‘C:\\Windows\\SYSTEM32\\python27.zip‘, ‘C:\\Python27\\DLLs‘, ‘C:\\Python27\\lib‘, ‘C:\\Python27\\lib\\plat-win‘, ‘C:\\Python27\\lib\\lib-tk‘, ‘C:\\Python27‘, ‘C:\\Python27\\lib\\site-packages‘, ‘d:\\‘]
4
把sys加入path部分注釋掉:
c:\Python27\Scripts>python task_test.py
Traceback (most recent call last):
File "task_test.py", line 8, in
import a
ImportError: No module named a
把模塊放到lib下的C:\Python27\Lib\site-packages
#encoding=utf-8
import a
print a.add(1,3)
c:\Python27\Scripts>python task_test.py
4
當導入一個模塊時,Python解析器會去搜索該模塊存在的位置,其搜索順序為:
?當前目錄
?如果不在當前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每個目錄。
?如果都找不到,python會查安裝路徑lib下的site-packages。Unix下,默認路徑一般是/usr/local/python/。 模塊搜索路徑存儲在system模塊的sys.path變量中。變量里包含當前目錄,PYTHONPATH由安裝過程決定的默認目錄。
包:文件夾下有一個__init__.py的文件,
模塊:就是一個python文件
From import把包里的命名空間引入到當前的命名空間,缺點該命名空間里的同名函數(shù)會被本地的同名函數(shù)覆蓋
Globals(), locals()
根據(jù)調用地方的不同,globals()和locals()函數(shù)可被用來返回全局和局部命名空間里的名字。
如果在函數(shù)內部調用locals(),返回的是所有能在該函數(shù)里訪問的命名。
如果在函數(shù)內部調用globals(),返回的是所有在該函數(shù)里能訪問的全局名字。
兩個函數(shù)的返回類型都是字典。所以名字們能用keys()函數(shù)摘取。
#encoding=utf-8
xiaxiaoxu="xiaxiaoxu"
def func():
print "calling func()..."
aStr="bar"
anInt=23
print "func()‘s globals:",globals().keys()
print "func()‘s locals:",locals().keys()
print "__main__‘s globals:",globals().keys()
print "__main__‘s locals:",locals().keys()
func()
c:\Python27\Scripts>python task_test.py
__main__‘s globals: [‘__builtins__‘, ‘__file__‘, ‘__package__‘, ‘func‘, ‘__name__‘, ‘xiaxiaoxu‘, ‘__doc__‘]
__main__‘s locals: [‘__builtins__‘, ‘__file__‘, ‘__package__‘, ‘func‘, ‘__name__‘, ‘xiaxiaoxu‘, ‘__doc__‘]
calling func()...
func()‘s globals: [‘__builtins__‘, ‘__file__‘, ‘__package__‘, ‘func‘, ‘__name__‘, ‘xiaxiaoxu‘, ‘__doc__‘]
func()‘s locals: [‘aStr‘, ‘anInt‘]
包的概念
在創(chuàng)建許許多多模塊后,我們可能希望將某些功能相近的文件組織在同一文件夾下,這里就需要運用包的概念了。包是一個分層的文件目錄結構,它定義了一個由模塊及子包和子包下的子包等組成的Python的應用環(huán)境。
包對應于文件夾,使用包的方式跟模塊也類似,唯一需要注意的是,當文件夾被當作包使用時,文件夾中需要包含__init__.py文件,主要是為了避免將文件夾名當作普通的字符串。__init__.py的內容可以為空,一般用來進行包的某些初始化工作或者設置__all__值,__all__是在from package-name import *這語句使用的,表示全部導出定義過的模塊。如果希望調用同一個package中的module,則直接import即可
創(chuàng)建包,在同一目錄下
#encoding=utf-8
import xia.cal
print xia.cal.add(2,3)
c:\Python27\Scripts>python task_test.py
5
__init__.py中的__all__限制了這句話from xx import *的使用范圍
__all__ = [‘bar‘, ‘baz‘]在一個模塊中,用這個限制調用的范圍
使用文件:
a1.py:
#encoding=utf-8
__all__ = [‘bar‘, ‘baz‘]
waz = 5
bar = 10
def baz(): return ‘baz‘
task_test.py:
#encoding=utf-8
from a1 import *
print bar
print baz
print waz
運行task_test.py:
c:\Python27\Scripts>python
task_test.py
10
baz at 0x0000000002EE5AC8>
Traceback
(most recent call last):
File "task_test.py", line 8, in
print waz
NameError:
name ‘waz‘ is not defined
a1.py中改為:
#encoding=utf-8
__all__
= [‘bar‘, ‘baz‘,‘waz‘]
#encoding=utf-8
__all__=[‘bar‘,‘baz‘,‘waz‘]
waz=5
bar=10
def baz():
return ‘baz‘
c:\Python27\Scripts>python
task_test.py
10
baz at 0x0000000002C85AC8>
5
使用包,建立一個testmodule的目錄,目錄中有3個文件:a.py、x.py、__init__.py
a.py:
waz?=?5
bar?=?10
def?baz():?return?‘baz‘
x.py:
name=‘gloryroad‘
def?sub(a,b):
return?a-b
__init__:
__all__?=?[‘x‘]
b.py:
from?testmodule?import?*
print?a.bar
print?a.baz
print?a.waz
c:\Python27\Scripts>python
b.py
Traceback
(most recent call last):
File "b.py", line 3, in
print a.bar
NameError:
name ‘a‘ is not defined
x.py改為:
__init__:
__all__ = [‘a]‘]
c:\Python27\Scripts>python
b.py
10
baz at 0x0000000002FFDAC8>
5
包方法1:有一個gloryroad目錄,有個子目錄submodule,兩個目錄中有如下幾個文件: gloryroad a.py含有函數(shù)add(a,b)(當然可以包含多個函數(shù)或屬性) gloryroad /submodule/b.py含有函數(shù)multiple (a,b)
現(xiàn)在在gloryroad目錄下創(chuàng)建文件__init__.py ,里面不寫任何內容
現(xiàn)在在gloryroad目錄的submodule下創(chuàng)建文件__init__.py ,里面不寫任何內容
經過如上處理后,在gloryroad目錄的同級目錄下,生成task_test.py。
#encoding=utf-8
import gloryroad.a
import gloryroad.submodule.b
print gloryroad.a.add(10,30)
print gloryroad.submodule.b.multiple(10,5)
c:\Python27\Scripts>python
task_test.py
40
50
總結
以上是生活随笔為你收集整理的设python中有模块m、如果希望同时导入m中的所有成员_python-模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hotkeyapp.exe是什么进程 有
- 下一篇: hotsync.exe是什么进程 有什么