[英]Python module importing itself with leading underscore but there is no corresponding .py file
在 PyBluez 源代碼中,我注意到了一些我以前從未見過的東西。 這個名為 widcomm.py 的文件以以下內容開頭:
from .btcommon import *
import socket
import struct
import threading
import os
import _widcomm
在上一個目錄中,沒有 _widcomm.py 或另一個 widcomm.py。 我讀過帶有前導下划線的模塊可能是“私有的”或加速的,但我找不到任何關於似乎用下划線導入自身的模塊的任何信息。
下面幾行你會得到這個有趣的功能:
def dbg (*args):
return
sys.stdout.write (*args)
sys.stdout.write ("\n")
我認為return
的代碼永遠無法執行,這是否正確? 據我所知,這個功能毫無用處。
這里到底發生了什么?
關於晦澀的退貨聲明。
您可以在鏈接的 github 上按下責備按鈕,您將在此處看到以下評論:
禁止調試消息
在該返回下方,有將參數打印到標准輸出的調試消息。 所以返回是為了不執行返回之前的那些消息。 就像您猜到的那樣,@mkrieger1 評論說,只要返回到位,這些語句就永遠不會執行。
根據這個 Python 包的安裝文件,
ext_modules.append(Extension('bluetooth._widcomm',
include_dirs=["%s\\Inc" % WC_BASE],
define_macros=[('_BTWLIB', None)],
library_dirs=["%s\\Release" % WC_BASE],
libraries=["WidcommSdklib", "ws2_32", "version", "user32",
"Advapi32", "Winspool", "ole32", "oleaut32"],
sources=["widcomm\\_widcomm.cpp",
"widcomm\\inquirer.cpp",
"widcomm\\rfcommport.cpp",
"widcomm\\rfcommif.cpp",
"widcomm\\l2capconn.cpp",
"widcomm\\l2capif.cpp",
"widcomm\\sdpservice.cpp",
"widcomm\\util.cpp"]))
_widcomm
導入是指從_widcomm.cpp
和相關 C++ 源文件構建的擴展模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.