導航:首頁 > 編程語言 > python模塊初始化

python模塊初始化

發布時間:2022-10-17 19:02:19

A. python 編程, 類初始化問題

1.self.__class__
self是當前,類的實例的變數,self.__class__用於獲得對應的類的本身的變數。

2.前面通過
class Circle:
定義而來一個類,叫做Circle
其中,定義了類的變數:
all_circles = []
表示是:一個名叫all_circles的列表,並且初始化賦值為[],表示一個空的列表。

3.all__這是什麼用法?
是你看錯了。
實際是:
all_circles
這是一個單個的變數而已;
這個變數,是之前類Circle中的變數all_circles。

關於這部分內容,建議你去看看我所總結的:
【整理】Python中:self和init__的含義 + 為何要有self和__init__

【整理】Python中變數的作用域(variable scope)
就懂了。
裡面有截圖解釋的,便於你理解。

(此處不給貼地址,請自己用google搜標題,即可找到帖子地址)

B. Python怎麼深入模塊進行學習

6.1. 深入模塊
除了包含函數定義外,模塊也可以包含可執行語句。這些語句一般用來初始化模塊。他們僅在 第一次 被導入的地方執行一次。[1]
每個模塊都有自己私有的符號表,被模塊內所有的函數定義作為全局符號表使用。因此,模塊的作者可以在模塊內部使用全局變數,而無需擔心它與某個用戶的全局變數意外沖突。從另一個方面講,如果你確切的知道自己在做什麼,你可以使用引用模塊函數的表示法訪問模塊的全局變數,modname.itemname。
模塊可以導入其他的模塊。一個(好的)習慣是將所有的 import 語句放在模塊的開始(或者是腳本),這並非強制。被導入的模塊名會放入當前模塊的全局符號表中。
import 語句的一個變體直接從被導入的模塊中導入命名到本模塊的語義表中。例如:
>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
這樣不會從局域語義表中導入模塊名(如上所示, fibo 沒有定義)。
甚至有種方式可以導入模塊中的所有定義:
>>> from fibo import *
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
這樣可以導入所有除了以下劃線( _ )開頭的命名。
需要注意的是在實踐中往往不鼓勵從一個模塊或包中使用 * 導入所有,因為這樣會讓代碼變得很難讀。不過,在互動式會話中這樣用很方便省力。

C. python模塊內全局變數 什麼時候初始化

腳本初載入時,python會順序執行所有可以執行的東西。 如果是函數與類定義,它就順序將定義放到全局表裡。

這里全局變最也是一樣。python從import語句開始執行,執行到這句話today 就被初始化了。

如果這個模塊被其它模塊import ,那個在import 的時候, today會被載入。

不過跨模塊的全局變數,在python里有些古怪。要小心使用。

D. python的初始化方法有什麼用

1.
在程序執行時一定執行一次的操作

2.
python中初始化init 參數第一個必須要加 self

3.
對變數進行賦值 繼承: 子類繼承父類

E. python import 模塊時怎麼給此模塊初始化函數賦值

class A:
def __init__(self,newid= None):
self.newid=newid
這個一看就是一個類的初始化屬性,你初始化的時候只要import這個對象。
from a import A
obj = A(newid)
這樣就傳給那個初始化函數了。
這些都是python比較基礎的東西,還是建議你找本書看看,至少python的基本語法,類,內置函數這些要高明白。

如果解決了您的問題請採納!
如果未解決請繼續追問

F. Python該怎麼入門

Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣。它使你能夠專注於解決問題而不是去搞明白語言本身。
易學:Python極其容易上手,因為Python有極其簡單的說明文檔 [9] 。
易讀、易維護:風格清晰劃一、強制縮進
用途廣泛
速度快:Python 的底層是用 C 語言寫的,很多標准庫和第三方庫也都是用 C 寫的,運行速度非常快。 [7]
免費、開源:Python是FLOSS(自由/開放源碼軟體)之一。使用者可以自由地發布這個軟體的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。
高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內存一類的底層細節。
可移植性:由於它的開源本質,Python已經被移植在許多平台上(經過改動使它能夠工作在不同平台上)。這些平台包括linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基於linux開發的android平台。
解釋性:一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。
運行程序的時候,連接/轉載器軟體把你的程序從硬碟復制到內存中並且運行。而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼運行 程序。

G. python import 模塊時怎麼給此模塊初始化函數賦值

class A:
def __init__(self,newid= None):
self.newid=newid
這個一看就是一個類的初始化屬性,你初始化的時候只要import這個對象。
from a import A
obj = A(newid)
這樣就傳給那個初始化函數了。
這些都是python比較基礎的東西,還是建議你找本書看看,至少python的基本語法,類,內置函數這些要高明白。

如果解決了您的問題請採納!
如果未解決請繼續追問

H. python的安裝包最後一直初始化怎麼解決

當遇到無法導入某個python模塊時,可能會是沒有安裝某個模塊,也有可能是某模塊在載入過程中失敗,也有可能是陷入了循環導入的問題。本文詳細解釋了這個問題。
1. 模塊未安裝或者路徑不對
ImportError: No mule named myMole

有兩種可能,一是該模塊沒有安裝,一般可以用
pip install %mole_name%

來解決。注意有時候模塊安裝包名並不等於要導入的模塊名。這種情況下可以通過pip search | list命令來嘗試找到正確的包。
另一種情況就是包雖然安裝了,但當前運行的程序載入的路徑有錯。python運行時將從以下位置嘗試載入python moles:
* 當前目錄
* 環境變數$PYTHONPATH所指示的值,這是一個由「:」分隔的字元串,各個子字元串都是文件系統的一個路徑。
* 標准庫目錄,如dist-site-packages下的模塊。
* 在.pth文件中指定的路徑,如果存在.pth文件的話。
可以使用以下方式來查看python運行時的包含路徑:
?

12

import sysprint(sys.path)

在運行出錯的腳本裝頭部加上這一段代碼,然後在控制台中查看列印出來的python類庫路徑,檢查安裝包是否已包含在上述路徑中。
***可以通過下面的方式將未包含在路徑中的模塊臨時包含進來:***
sys.path.append("path/to/mole")

另外,還可以在shell窗口中查看當前的python包含路徑:
echo $PYTHONPATH
2. 無法導入已存在的模塊
如果要導入的模塊包含了native代碼,並且native代碼載入(初始化)失敗時,就會導致這種錯誤。使用ssl,
gevent等涉及native的模塊時,如果對應的native程序並未安裝,則會出現這樣的錯誤。
另一種錯誤情況是,使用相對路徑導入時,父模塊還未導入成功。見下面的代碼:
?

12345

main.pymypackage/ __init__.pymymole.pymyothermole.py

mymole.py如下所示:
?

123456789101112

#!/usr/bin/env python3 # Exported functiondef as_int(a): return int(a) # Test function for mole def _test(): assert as_int('1') == 1 if __name__ == '__main__': _test()

以及myothermole代碼如下所示:
?

1234567891011121314

#!/usr/bin/env python3 from .mymole import as_int # Exported functiondef add(a, b): return as_int(a) + as_int(b) # Test function for mole def _test(): assert add('1', '1') == 2 if __name__ == '__main__': _test()

如果執行mypackage/myothermole,則會報以下錯誤:
Traceback (most recent call last):
File "myothermole.py", line 3, in
<mole>
from .mymole import as_int
SystemError: Parent mole
'' not loaded, cannot perform relative import
[這篇文章](#Relative imports in
Python 3)給出了更詳細的解答。
3. 循環導入
這種錯誤稱之為"circular (or cyclic) imports"。是python獨有的一種導入錯誤,在象java這樣的語言中就不存在。
假設有如下兩個文件,a.py和b.py:
?

1234567

#a.pyprint "a in"import sysprint "b imported: %s" % ("b" in sys.moles, )import bprint "a out"print b.x

以及:
?

12345

#b.pyprint "b in"import aprint "b out"x = 3

執行python a.py,將得到以下結果:
?

123456789101112131415

$ python a.pya in b imported: Falseb ina inb imported: Truea outTraceback (most recent call last): File "a.py", line 4, in <mole> import b File "/home/shlomme/tmp/x/b.py", line 2, in <mole> import aFile "/home/shlomme/tmp/x/a.py", line 7, in <mole> print b.xAttributeError: 'mole' object has no attribute 'x'

出現這種情況的原因是產生了循環導入。循環導入,以及在導入過程中python進行了加鎖操作,最終導致在模塊b未導入完成時就引用了其中的名字。
判斷導入錯誤是否是因為循環導入引起的,主要看堆棧中是否出現兩次重復的導入。比如上述堆棧中a.py出現兩次,因此可以判斷是這個文件引起的循環導入。
要解決這個問題,可以把模塊看成一種資源,對所有要引入的模塊進行編號,再按靜態資源排序法順次導入,就可以避免循環導入。

I. Python中的init.py有什麼作用

你指的應該是是__init__.py文件,以下下詳細解釋:


__init__.py該文件的作用就是相當於把自身整個文件夾當作一個包來管理,每當有外部import的時候,就會自動執行裡面的函數。

它具有以下幾個作用:


1. 標識該目錄是一個python的模塊包(mole package)

如果你是使用python的相關IDE來進行開發,那麼如果目錄中存在該文件,該目錄就會被識別為 mole package 。


2. 簡化模塊導入操作

假設我們的模塊包的目錄結構如下:

.

└── mypackage
├── subpackage_1
│ ├── test11.py
│ └── test12.py
├── subpackage_2
│ ├── test21.py
│ └── test22.py
└── subpackage_3
├── test31.py
└── test32.py


如果我們使用最直接的導入方式,將整個文件拷貝到工程目錄下,然後直接導入:


from mypackage.subpackage_1 import test11

from mypackage.subpackage_1 import test12

from mypackage.subpackage_2 import test21

from mypackage.subpackage_2 import test22

from mypackage.subpackage_3 import test31

from mypackage.subpackage_3 import test32

這樣的話,看起來就會很麻煩,查找的時候也會麻煩,此時__init__.py就起到了簡化的作用。


2.1init.py 是怎麼工作的?

實際上,如果目錄中包含了__init__.py時,當用 import 導入該目錄時,會執行__init__.py裡面的代碼。我們在mypackage目錄下增加一個__ init __.py文件來做一個實驗:

.
└── mypackage
├── __init__.py
├── subpackage_1
│ ├── test11.py
│ └── test12.py
├── subpackage_2
│ ├── test21.py
│ └── test22.py
└── subpackage_3
├── test31.py
└── test32.py

mypackage/__init__.py裡面加一個print,如果執行了該文件就會輸出

print("You have imported mypackage")

下面直接用交互模式進行 import

>>> import mypackage
You have imported mypackage

很顯然,__init__.py在包被導入時會被執行。

2.2 控制模塊導入

我們再做一個實驗,在 mypackage/init.py 添加以下語句:

from subpackage_1 import test11

我們導入 mypackage 試試:

>>> import mypackageTraceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/home/taopeng/Workspace/Test/mypackage/__init__.py", line 2, in <mole>
from subpackage_1 import test11ImportError: No mole named 'subpackage_1'

報錯了。。。怎麼回事?
原來,在我們執行import時,當前目錄是不會變的(就算是執行子目錄的文件),還是需要完整的包名。

from mypackage.subpackage_1 import test11

綜上,我們可以在init.py 指定默認需要導入的模塊

2.3 偷懶的導入方法

有時候我們在做導入時會偷懶,將包中的所有內容導入

from mypackage import *

這是怎麼實現的呢?__all__變數就是干這個工作的。
__all__關聯了一個模塊列表,當執行from xx import *時,就會導入列表中的模塊。我們將__init__.py修改為 :

__all__ = ['subpackage_1', 'subpackage_2']

這里沒有包含subpackage_3,是為了證明__all__起作用了,而不是導入了所有子目錄。

>>> from mypackage import *

>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'subpackage_1', 'subpackage_2']

>>>

>>> dir(subpackage_1)['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__']

子目錄的中的模塊沒有導入!!!
該例子中的導入等價於:from mypackage import subpackage_1, subpackage_2
因此,導入操作會繼續查找 subpackage_1 和 subpackage_2 中的__init__.py並執行。(但是此時不會執行 import *)
我們在 subpackage_1 下添加__init__.py文件:

__all__ = ['test11', 'test12']# 默認只導入test11

from mypackage.subpackage_1 import test11

再來導入試試

>>> from mypackage import *

>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'subpackage_1', 'subpackage_2']

>>>

>>> dir(subpackage_1)['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'test11']

如果想要導入子包的所有模塊,則需要更精確指定。

>>> from mypackage.subpackage_1 import *

>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'test11', 'test12']


3. 配置模塊的初始化操作

在了解了__init__.py的工作原理後,應該能理解該文件就是一個正常的python代碼文件。
因此可以將初始化代碼放入該文件中。



閱讀全文

與python模塊初始化相關的資料

熱點內容
浙江標准網路伺服器機櫃雲主機 瀏覽:587
設置網路的伺服器地址 瀏覽:600
java圖形界面設計 瀏覽:751
純前端項目怎麼部署到伺服器 瀏覽:538
瓜子臉程序員 瀏覽:505
如何保證伺服器優質 瀏覽:94
小微信aPP怎麼一下找不到了 瀏覽:299
演算法纂要學術價值 瀏覽:975
程序員你好是什麼意思 瀏覽:801
倩女幽魂老伺服器如何玩 瀏覽:561
電子鍾單片機課程設計實驗報告 瀏覽:999
看加密頻道 瀏覽:381
程序員算不算流水線工人 瀏覽:632
三星電視我的app怎麼卸載 瀏覽:44
簡述vi編譯器的基本操作 瀏覽:507
讓程序員選小號 瀏覽:91
加強數字貨幣國際信息編譯能力 瀏覽:584
購買的app會員怎麼退安卓手機 瀏覽:891
程序員的種類及名稱 瀏覽:293
美國程序員薪資 瀏覽:13