1樓:
如果你是問在 module 中定義多個函式並選擇性地暴露其中乙個的話,答案是「嚴格來說不可以」。你可以用單下劃線來定義 module 的私有成員,從而防止它們被自動匯入:
#file 'test.py'
deffoo
'foo'
def_bar
'_bar'
此時 from test import * 只會匯入 foo,而 import test 只會匯入 test.foo 。但是你仍舊無法阻止別人顯式地 from test import _bar 。
詳細原因參見 乙個 Pythonic 的類應不應該在 __init__ 中檢查引數有效性? 中的答案。
又或者你可以只在 module 裡定義單一乙個函式,所需其他函式均在此類中定義。
#file 'test.py'
deffoo
():def
bar():
'bar in foo'
bar()
又或者既然 class 可以寫成 callable 的,那也可以當作函式用:
#file 'test.py'
defFoo
(object
):def
__call__
(self
"foo"
#__main__:
>>> from test import *
>>> f = Foo()
>>> f()
fooPython 裡面 module 不能成為 callabe object,所以如果要讓 module 能當函式用,必須自己去改被 import 進去的 namespace 的模組列表:
#test.py
import
sysdef
foo():
"foo"
sys.
modules
[__name__]=
foo#__main__:
>>> import test
>>> test()
foo這樣做太過 hacky,請不要這樣做。
當然還有更 hacky 的方法:CPython 判斷某 object 是否 callable,是檢視其型別之 _typeobject 成員的 tp_call 函式指標是否為 NULL(見 cpython: 8d4cace71113 Objects/abstract.
c )。那麼就可以利用 ctypes 級別修改 module 依賴的 PyTypeObject,使其 tp_call 指標指向有意義的函式,從而讓 module 也變得 callable,詳見 http://www.
slideshare.net/r1chardj
0n3s/dont-do-this-24000445
第70頁開始的內容。但是也請不要這樣做。
用python寫乙個函式,可以判斷兩個陣列是否環型相等。跪拜大佬幫忙解答一下?
薛衣人 defequal arr1 arr2 if arr1 isNone or arr2 isNone return False count1 arr1 count x forxin sorted set arr1 count2 arr2 count x forxin sorted set arr...
可以用一句話寫乙個悲傷的故事嗎?
聽潮 去看大聖歸來,旁邊有個小孩兒問他媽媽 這個不是動畫片麼?為什麼有這麼多大人來看?他媽媽回答 因為他們一直在等大聖歸來啊,等啊等啊,就長大了. 我來講個故事啊。乙個剛做完雙側股骨頭置換手術的60來歲的病人在醫院陪護另乙個60多歲馬上要做胰腺癌手術的病人。這兩個人乙個是我媽,乙個是我爸。 花花 真...
兩隻貓可以用乙個貓砂盆,水盆,飯盆嗎?
簡單點兒 我家兩隻貓,大貓是公公,十個月,小貓是妹妹,五個月。小貓乙個半月時帶回家的,那時大貓還沒經歷喵生中最重要的手術。它們倆共用貓砂盆 水盆和飯盆。主要原因嘛,我覺得還是因為大貓性格好。就連它那麼愛吃的肉肉,都會剩下最後一兩口給小貓吃,從沒跟它搶過。我家大貓簡直是個寶藏貓咪。 西門不吹雪 看兩隻...