บทช่วยสอน โมดูล Python3 ที่ดีที่สุดในปี 2024 ในบทช่วยสอนนี้ คุณสามารถเรียนรู้ คำสั่งนำเข้า,จาก ... คำสั่งนำเข้า,จาก ... นำเข้าคำสั่ง *,โมดูลเชิงลึก,__name__ แอตทริบิวต์,dir () ฟังก์ชัน,โมดูลมาตรฐาน,บรรจุภัณฑ์,นำเข้าจากแพคเกจ *,
ในส่วนก่อนหน้าของสคริปต์หลามล่ามในการเขียนโปรแกรมเราถ้าคุณออกและเข้ามาจากล่ามหลามแล้ววิธีการทั้งหมดและตัวแปรที่คุณกำหนดจะได้หายไป
งูใหญ่มีวิธีการทำเช่นนี้คำนิยามเหล่านี้เก็บไว้ในแฟ้มสคริปต์หรือบางส่วนเช่นล่ามโต้ตอบแฟ้มนี้จะเรียกว่าโมดูล
โมดูลเป็นความหมายของไฟล์ทั้งหมดของคุณที่มีฟังก์ชั่นและตัวแปรที่มีชื่อต่อท้าย .py โมดูลสามารถนำเข้าสู่โปรแกรมอื่น ๆ ที่จะใช้ฟังก์ชั่นโมดูลและหน้าที่อื่น ๆ นี้คือการใช้ห้องสมุดมาตรฐานหลาม
นี่คือตัวอย่างของโมดูลห้องสมุดหลามมาตรฐานที่ใช้
#!/usr/bin/python3 # 文件名: using_sys.py import sys print('命令行参数如下:') for i in sys.argv: print(i) print('\n\nPython 路径为:', sys.path, '\n')
ดำเนินการตามผลมีดังนี้
$ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
ต้องการใช้แฟ้มแหล่งที่มางูใหญ่เพียงแค่ทำการคำสั่งนำเข้าอีกในแฟ้มต้นฉบับไวยากรณ์เป็นดังนี้:
import module1[, module2[,th. moduleN]
เมื่อล่ามพบคำสั่งนำเข้าถ้าโมดูลจะถูกนำเข้าในเส้นทางการค้นหาปัจจุบัน
เส้นทางการค้นหาเป็นล่ามแรกจะค้นหารายชื่อของไดเรกทอรีทั้งหมด ตามที่คุณต้องการที่จะนำเข้าสนับสนุนโมดูลคุณจะต้องสั่งซื้อที่ด้านบนของสคริปต์:
รหัสไฟล์ support.py คือ:
#!/usr/bin/python3 # Filename: support.py def print_func( par ): print ("Hello : ", par) return
test.py แนะนำโมดูลการสนับสนุน:
#!/usr/bin/python3 # Filename: test.py # 导入模块 import support # 现在可以调用模块里包含的函数了 support.print_func("w3big")
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
$ python3 test.py Hello : w3big
โมดูลจะถูกนำเข้าครั้งเดียวไม่ว่ากี่ครั้งที่คุณดำเนินการนำเข้า โมดูลนี้จะช่วยป้องกันการนำเข้าที่จะดำเนินการซ้ำแล้วซ้ำอีก
เมื่อเราใช้คำสั่งนำเข้าเมื่องูหลามล่ามเป็นวิธีการหาแฟ้มที่สอดคล้องกันหรือไม่
นี้เกี่ยวข้องกับเส้นทางการค้นหาหลามเส้นทางการค้นหาที่ประกอบด้วยชุดของชื่อไดเรกทอรีหลามล่ามจะเปลี่ยนจากไดเรกทอรีเหล่านี้เพื่อค้นหาสำหรับโมดูลแนะนำ
นี้ดูเหมือนว่าตัวแปรสภาพแวดล้อมในความเป็นจริงอาจถูกกำหนดโดยการกำหนดเส้นทางการค้นหาสภาพแวดล้อมลักษณะตัวแปร
เส้นทางการค้นหาเป็นคอมไพเลอร์หลามหรือการติดตั้งกำหนดติดตั้งห้องสมุดใหม่ก็ควรจะแก้ไข เส้นทางการค้นหาจะถูกเก็บไว้ในตัวแปรเส้นทางโมดูล SYS ทำทดสอบอย่างง่ายในล่ามโต้ตอบใส่รหัสต่อไปนี้:
>>> import sys >>> sys.path ['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] >>>
sys.path คือรายการของการส่งออกเป็นครั้งแรกซึ่งเป็นสตริงที่ว่างเปล่า '' ที่หมายถึงไดเรกทอรีปัจจุบัน (ถ้าพิมพ์ออกมาจากสคริปต์คุณได้ชัดเจนมากขึ้นสามารถดูที่ directory) ที่เราดำเนินการล่ามหลาม ไดเรกทอรี (ถ้าสคริปต์ไดเรกทอรีที่สคริปต์ที่มีการเรียกใช้)
ดังนั้นถ้าชอบฉันอยู่ในไดเรกทอรีปัจจุบันที่มีชื่อเดียวกับชื่อไฟล์ที่จะนำเข้าสู่โมดูลโมดูลจะได้รับการแนะนำให้รู้จักกับบล็อกออก
เข้าใจแนวคิดของเส้นทางการค้นหาที่คุณสามารถปรับเปลี่ยน sys.path ในสคริปต์ที่จะแนะนำบางอย่างไม่ได้อยู่ในเส้นทางการค้นหาของโมดูล
ตอนนี้ในไดเรกทอรีปัจจุบันหรือล่ามไดเรกทอรี sys.path ในการที่จะสร้างไฟล์ fibo.py เป็นดังนี้
# 斐波那契(fibonacci)数列模块 def fib(n): # 定义到 n 的斐波那契数列 a, b = 0, 1 while b < n: print(b, end=' ') a, b = b, a+b print() def fib2(n): # 返回到 n 的斐波那契数列 result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a+b return result
จากนั้นป้อนล่ามหลามใช้คำสั่งต่อไปนี้เพื่อนำเข้าโมดูลนี้:
>>> import fibo
นี้ไม่ได้กำหนดไว้ใน FIBO โดยตรงในชื่อของฟังก์ชันที่ถูกเขียนลงในตารางสัญลักษณ์ปัจจุบัน แต่ชื่อโมดูล FIBO เขียนมี
คุณสามารถใช้ชื่อโมดูลเพื่อฟังก์ชั่นการเข้าถึง:
>>> fibo.fib(1000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 >>> fibo.fib2(100) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] >>> fibo.__name__ 'fibo'
หากคุณตั้งใจที่จะใช้ฟังก์ชั่นที่คุณมักจะสามารถกำหนดให้ชื่อท้องถิ่น:
>>> fib = fibo.fib >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
งูหลามช่วยให้คุณสามารถนำงบจากส่วนใดส่วนหนึ่งของ namespace ปัจจุบันจากโมดูลไวยากรณ์เป็นดังนี้:
from modname import name1[, name2[, th. nameN]]
ยกตัวอย่างเช่นการที่จะนำเข้า FIBO โมดูลของฟังก์ชั่นตอแหลใช้คำสั่งต่อไปนี้:
>>> from fibo import fib, fib2 >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
คำสั่งนี้ไม่ได้เป็นโมดูล FIBO ทั้งหมดลงใน namespace ที่ปัจจุบันก็จะ Fibo ฟังก์ชั่นโกหกเลนนำมาใช้ใน
เนื้อหาทั้งหมดของโมดูลที่มีอยู่ทั้งหมดลงใน namespace ปัจจุบันเป็นไปได้เพียงแค่ใช้คำสั่งต่อไปนี้:
from modname import *
นี้มีวิธีที่ง่ายที่จะนำเข้าโมดูลในโครงการทั้งหมด อย่างไรก็ตามคำสั่งนี้ไม่ควรมากเกินไปที่จะใช้
นอกเหนือไปจากโมดูลนิยามวิธีการที่อาจรวมถึงรหัสปฏิบัติการ รหัสเหล่านี้โดยทั่วไปจะใช้ในการเริ่มต้นโมดูล รหัสนี้เป็นเพียงครั้งแรกที่มีการนำมาจะถูกดำเนินการ
โมดูลแต่ละคนมีตารางสัญลักษณ์ที่เป็นอิสระของตัวเองภายในโมดูลที่จะใช้สำหรับการทำงานทั้งหมดเป็นตารางสัญลักษณ์ทั่วโลก
ดังนั้นผู้เขียนของโมดูลได้อย่างปลอดภัยสามารถใช้ตัวแปรทั่วโลกเหล่านี้ในโมดูลโดยไม่ต้องกังวลเกี่ยวกับผู้ใช้อื่น ๆ ที่จะมีส่วนร่วมในดอกไม้ตัวแปรทั่วโลก
จากด้านอื่นเมื่อคุณรู้ว่าจริงๆสิ่งที่คุณทำคุณยังสามารถเข้าถึงฟังก์ชั่นโมดูลโดย modname.itemname ตัวแทนดังกล่าว
โมดูลสามารถนำเข้าโมดูลอื่น ๆ ในโมดูล (หรือสคริปต์หรือที่อื่น ๆ ) นำเข้าใช้งานที่สำคัญที่สุดที่จะนำเข้าโมดูลของหลักสูตรนี้เป็นเพียงการประชุมมากกว่าการบังคับ ชื่อของโมดูลที่นำเข้าจะถูกวางไว้ในตารางสัญลักษณ์ของการดำเนินการปัจจุบันของโมดูล
นอกจากนี้ยังมีวิธีการของนำเข้า, นำเข้าสามารถนำมาใช้โดยตรงภายในชื่อโมดูล (ฟังก์ชั่นของตัวแปร) ลงในโมดูลการดำเนินงานในปัจจุบันของคุณ ตัวอย่างเช่น:
>>> 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
นี้จะนำเข้าชื่อทั้งหมดที่อยู่ใน แต่ผู้ที่มีขีดเดียว (_) ชื่อไม่ได้อยู่ในกรณีนี้ ในกรณีส่วนใหญ่โปรแกรมเมอร์งูใหญ่ไม่ได้ใช้วิธีนี้เพราะชื่อแนะนำจากแหล่งอื่น ๆ มีแนวโน้มที่จะครอบคลุมความหมายที่มีอยู่
เมื่อโมดูลที่มีการแนะนำโปรแกรมอื่นแรกโปรแกรมหลักจะทำงาน ถ้าเราต้องการที่จะได้รับการแนะนำในโมดูลโมดูลไม่ดำเนินการบล็อกโปรแกรมที่เราสามารถใช้แอตทริบิวต์ __name__ เพื่อให้บล็อกนี้จะดำเนินการเฉพาะในโมดูลเวลาทำงานของตัวเอง
#!/usr/bin/python3 # Filename: using_name.py if __name__ == '__main__': print('程序自身在运行') else: print('我来自另一模块')
เรียกใช้การส่งออกต่อไปนี้:
$ python using_name.py
โปรแกรมตัวเองทำงานอยู่
$ python >>> import using_name 我来自另一模块 >>>
รายละเอียด: โมดูลแต่ละคนมีแอตทริบิวต์ __name__ เมื่อค่าของมันคือ '__main__' ก็แสดงว่าโมดูลเองกำลังทำงานมิฉะนั้นก็จะถูกนำ
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回: </p> <pre> >>> import fibo, sys >>> dir(fibo) ['__name__', 'fib', 'fib2'] >>> dir(sys) ['__displayhook__', '__doc__', '__excepthook__', '__loader__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe', '_home', '_mercurial', '_xoptions', 'abiflags', 'api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getobjects', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettotalrefcount', 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions']
ถ้าไม่มีข้อโต้แย้งจะได้รับแล้ว dir () ฟังก์ชันจะแสดงชื่อของทั้งหมดที่กำหนดไว้ในปัจจุบัน:
>>> a = [1, 2, 3, 4, 5] >>> import fibo >>> fib = fibo.fib >>> dir() # 得到一个当前模块中定义的属性列表 ['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys'] >>> a = 5 # 建立一个新的变量 'a' >>> dir() ['__builtins__', '__doc__', '__name__', 'a', 'sys'] >>> >>> del a # 删除变量名a >>> >>> dir() ['__builtins__', '__doc__', '__name__', 'sys'] >>>
งูหลามตัวเองด้วยบางส่วนของห้องสมุดมาตรฐานของโมดูลในเอกสารอ้างอิงห้องสมุดหลามจะได้รับการแนะนำให้รู้จักกับ (ว่าเป็นผู้อยู่เบื้องหลัง "ไลบรารีเอกสารอ้างอิง")
บางโมดูลที่ถูกสร้างขึ้นโดยตรงใน parser ที่ภาษาเหล่านี้แม้ว่าจะไม่ได้มีคุณลักษณะบางอย่างในตัว แต่เขาก็สามารถที่จะใช้อย่างมีประสิทธิภาพมากแม้สายระดับระบบจะไม่มีปัญหา
องค์ประกอบเหล่านี้สามารถกำหนดค่าในรูปแบบที่แตกต่างกันขึ้นอยู่กับระบบปฏิบัติการที่แตกต่างกันเช่นโมดูล winreg เท่านั้นที่จะสามารถใช้ได้กับระบบ Windows
มันควรจะตั้งข้อสังเกตว่ามีความเป็น SYS โมดูลพิเศษซึ่งถูกสร้างขึ้นในทุก parser หลาม ตัวแปร sys.ps1 และ sys.ps2 กำหนดพรอมต์สตริงที่สอดคล้องประถมศึกษาและมัธยมศึกษาพรอมต์:
>>> import sys >>> sys.ps1 '>>> ' >>> sys.ps2 'th. ' >>> sys.ps1 = 'C> ' C> print('Yuck!') Yuck! C>
แพคเกจอยู่ในรูปแบบของการจัดการโมดูลหลาม namespace โดยใช้ "ชื่อโมดูลประ."
ยกตัวอย่างเช่นชื่อโมดูลเป็น AB แล้วเขาบอกว่าแพคเกจย่อยโมดูลบี
หากมีการใช้โมดูลคุณไม่ต้องกังวลเกี่ยวกับตัวแปรทั่วโลกในหมู่ปฏิสัมพันธ์โมดูลที่แตกต่างกันเช่นการใช้ชื่อโมดูลประในรูปแบบนี้ไม่ต้องกังวลโมดูลกรณีระหว่างห้องสมุดที่แตกต่างกันในชื่อเดียวกัน
เพื่อให้ผู้เขียนที่แตกต่างกันสามารถให้โมดูล NumPy หรือห้องสมุดหลามกราฟิก
สมมติว่าคุณต้องการที่จะออกแบบโมดูลการประมวลผลเสียงแบบครบวงจรและแฟ้มข้อมูล (หรือเรียกว่า "แพคเกจ")
ความหลากหลายที่มีอยู่ในรูปแบบที่แตกต่างกันไฟล์เสียง (ความโดดเด่นโดยทั่วไปโดยการขยายตัวอย่างเช่น: .wav ,: ไฟล์: .aiff ,: ไฟล์: .au,) ดังนั้นคุณจำเป็นต้องมีชุดของโมดูลที่เพิ่มขึ้นสำหรับ ระหว่างรูปแบบที่แตกต่างกัน
และสำหรับข้อมูลเสียงที่มีการดำเนินงานที่แตกต่างกัน (เช่นผสมเพิ่ม Echo เพิ่มฟังก์ชั่นปรับแต่งเสียงเพื่อสร้างผลสเตอริโอเทียม) ซึ่งคุณยังต้องชุดของวิธีการที่ไม่เคยจบโมดูลในการจัดการการดำเนินงานเหล่านี้
นี่คือโครงสร้างแพ็กเกจที่เป็นไปได้ (ในระบบแฟ้มลำดับชั้น):
sound/ 顶层包 __init__.py 初始化 sound 包 formats/ 文件格式转换子包 __init__.py wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py th. effects/ 声音效果子包 __init__.py echo.py surround.py reverse.py th. filters/ filters 子包 __init__.py equalizer.py vocoder.py karaoke.py th.
ในการนำเข้าแพคเกจเมื่องูหลาม sys.path ไดเรกทอรีบนพื้นฐานของไดเรกทอรีย่อยเพื่อค้นหาแพคเกจนี้มี
เพียงไดเรกทอรีมีไฟล์ชื่อ __init__.py จะได้รับการพิจารณาเป็นแพคเกจส่วนใหญ่จะหลีกเลี่ยงบางส่วนของการละเมิดหยาบคายของชื่อ (ตัวอย่างเช่นที่เรียกว่า String) ประมาทส่งผลกระทบต่อเส้นทางการค้นหาไปยังโมดูลที่ถูกต้อง
ในกรณีที่ง่ายใส่ที่ว่างเปล่า: file: __ init__.py มัน แน่นอนไฟล์นี้ก็อาจจะมีรหัสเริ่มต้นบางอย่างหรือ (จะอธิบายต่อไป) ตัวแปร __all__
ทุกครั้งที่ผู้ใช้สามารถนำเข้าเฉพาะโมดูลเฉพาะภายในแพคเกจเช่น:
import sound.effects.echo
นี้จะนำเข้าโมดูลย่อย: sound.effects.echo เขาจะต้องใช้ชื่อเต็มในการเข้าถึง:
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
วิธีการสำหรับการเปิดตัวโมดูลย่อยอีกเป็น:
from sound.effects import echo
นอกจากนี้ยังจะนำเข้าโมดูลย่อย: ก้องและเขาไม่จำเป็นต้องผู้คำนำหน้ายาวเพื่อที่เขาจะใช้:
echo.echofilter(input, output, delay=0.7, atten=4)
การเปลี่ยนแปลงก็คือการแนะนำโดยตรงในฟังก์ชั่นหรือตัวแปร:
from sound.effects.echo import echofilter
อีกครั้งวิธีนี้จะนำเข้าโมดูลย่อย: ก้องและสามารถใช้ echofilter () ฟังก์ชั่นของเขา
echofilter (นำเข้าส่งออกล่าช้า = 0.7 Atten = 4)
โปรดทราบว่าเมื่อใช้จากรายการที่นำเข้าในรูปแบบแพคเกจนี้เมื่อรายการที่สอดคล้องกันสามารถเป็นได้ทั้งภายในแพคเกจโมดูลย่อย (แพคเกจย่อย) หรือชื่ออื่น ๆ ภายในแพคเกจความหมายเช่นฟังก์ชั่นชั้นเรียนหรือตัวแปร
ไวยากรณ์แรกที่จะนำเข้าชื่อรายการที่กำหนดไว้เป็นแพคเกจถ้าไม่พบก็พยายามที่จะปฏิบัติตามโมดูลที่จะนำเข้า หากไม่พบขอแสดงความยินดี A: EXC: ยกเว้น ImportError จะโยน
ตรงกันข้ามถ้าคุณใช้แบบฟอร์มนี้เป็นการนำเข้า item.subitem.subsubitem นำเข้าแบบฟอร์มการยกเว้นคนสุดท้ายที่มันจะต้องเป็นแพคเกจ แต่สุดท้ายอาจจะเป็นโมดูลหรือแพคเกจ แต่ไม่สามารถจะเป็นชื่อชั้นฟังก์ชั่นหรือตัวแปร .
ลองคิดดูหากเราใช้จาก sound.effects นำเข้า * จะเกิดอะไรขึ้น?
งูหลามจะเข้าสู่ระบบแฟ้มพบแพคเกจที่ทุกโมดูลย่อยหนึ่งโดยหนึ่งทั้งหมดของพวกเขาที่จะเข้ามา
แต่น่าเสียดายที่วิธีการนี้ทำงานบนแพลตฟอร์ม Windows ไม่ดีมากเพราะ Windows เป็นระบบกรณีตาย
บนแพลตฟอร์มนี้ไม่มีใครสามารถรับรองที่เรียกว่าไฟล์ ECHO.py นำเข้าเป็นเสียงสะท้อนก้องหรือโมดูลหรือ ECHO
(ตัวอย่างเช่น Windows 95 เป็นที่น่ารำคาญมากที่จะใช้ตัวอักษรตัวแรกของแต่ละไฟล์จะปรากฏ) และ DOS 8 + 3 ตั้งชื่อการประชุมจะจัดการกับปัญหาของชื่อโมดูลยาวไม่พันกันมากขึ้น
เพื่อแก้ปัญหานี้ปัญหาเดียวเขียนแพคเกจเพื่อให้ดัชนีความถูกต้องของแพคเกจ
นำเข้าคำสั่งต่อกฎ: ถ้าแฟ้มข้อกำหนดแพคเกจที่เรียกว่า __init__.py มีอยู่รายชื่อของตัวแปร __all__ ใช้เวลาจากแพคเกจนำเข้า * ที่จะนำรายชื่อทั้งหมดในรายการนี้เป็นเนื้อหานำเข้าแพคเกจ
ในฐานะผู้เขียนของแพคเกจไม่ลืมหลังปรับปรุงแพคเกจเพื่อให้แน่ใจว่า __all__ อาอัปเดต คุณบอกว่าฉันจะไม่ทำมันฉันจะไม่ใช้นำเข้า * การใช้งานนี้โอเคไม่มีปัญหาทำไมคุณไม่ทำเจ้านาย นี่คือตัวอย่างในไฟล์: เสียง / ผลกระทบ / __ init__.py มีรหัสต่อไปนี้:
__all__ = ["echo", "surround", "reverse"]
ซึ่งหมายความว่าเมื่อคุณใช้การใช้งานนี้จาก sound.effects นำเข้า * คุณจะนำเข้าแพคเกจภายในสามโมดูลย่อย
หาก __all__ จริงๆไม่ได้ถูกกำหนดจากนั้นใช้รูปแบบนี้จาก sound.effects นำเข้า * เวลาก็ไม่ได้นำเข้าโมดูลย่อยใน sound.effects แพคเกจ เขาเพียงแค่ใส่เนื้อหาทั้งหมดของแพคเกจและ sound.effects ของตนที่กำหนดไว้ภายในที่จะเข้ามา (ตามที่กำหนดอาจจะใช้รหัส __init__.py เริ่มต้น)
นี้จะ __init__.py ที่กำหนดทั้งหมดของชื่อที่จะเข้ามา และเขาจะไม่ทำลายโมดูลระบุไว้อย่างชัดเจนทั้งหมดก่อนที่เราจะแนะนำให้รู้จักกับประโยคนี้ ดูที่บางส่วนของรหัสนี้:
import sound.effects.echo import sound.effects.surround from sound.effects import *
ในตัวอย่างนี้ก่อนที่จะดำเนินการจาก th. นำเข้าแพคเกจ sound.effects สะท้อนและเซอร์ราวด์โมดูลจะนำเข้ามาใน namespace ปัจจุบัน (แน่นอนแม้ว่าคุณกำหนด __all__ ไม่มีปัญหา)
ปกติเราไม่สนับสนุนการใช้ * วิธีการนี้จะนำเข้าโมดูลเพราะมักจะใช้วิธีการนี้จะส่งผลให้ลดการอ่าน แต่คือจริงๆการกดแป้นพิมพ์สามารถบันทึกจำนวนมากของความพยายามและโมดูลบางส่วนได้รับการออกแบบที่จะกลายเป็นการนำเข้าเพียงผ่านวิธีการโดยเฉพาะอย่างยิ่ง
โปรดจำไว้ว่าการใช้แพคเกจจาก specific_submodule นำเข้าวิธีการนี้จะไม่เป็นความผิด ในความเป็นจริงนี้เป็นวิธีที่แนะนำ ถ้าคุณต้องการที่จะนำเข้าโมดูลย่อยและโมดูลย่อยอาจมีแพ็กเกจอื่น ๆ ที่มีชื่อเดียวกัน
หากโครงสร้างของแพคเกจที่เป็นแพคเกจย่อย (เช่นตัวอย่างสำหรับแพคเกจเป็นเสียง) และคุณต้องการที่จะนำเข้าแพคเกจพี่น้อง (แพคเกจระดับเดียวกัน) คุณต้องใช้นำเข้าเส้นทางที่แน่นอนที่จะนำเข้า ตัวอย่างเช่นถ้าคุณต้องการใช้แพคเกจ sound.filters.vocoder โมดูล sound.effects โมดูลสะท้อนคุณต้องเขียนจาก sound.effects นำเข้าก้อง
from . import echo from th import formats from thfilters import equalizer
ไม่ว่าจะเป็นการนำเข้าหรือญาตินัยอย่างชัดเจนจากจุดเริ่มต้นของโมดูลปัจจุบัน ชื่อของโมดูลหลักอยู่เสมอ "__main__" โมดูลหลักของแอพลิเคชัน ธ คุณควรใช้อ้างอิงเส้นทางแน่นอน
แพคเกจนอกจากนี้ยังมีคุณสมบัติ __path__ เพิ่มเติม นี่คือรายการของไดเรกทอรีแต่ละที่มีไดเรกทอรีที่มีแพคเกจสำหรับ __init__.py บริการนี้คุณจะต้องมีการดำเนินการก่อนอื่น ๆ ที่กำหนดไว้ใน __init__.py โอ้ ตัวแปรนี้สามารถแก้ไขได้อิทธิพลภายในโมดูลที่รวมอยู่ในแพคเกจและแพคเกจเด็ก
คุณลักษณะนี้ไม่ได้ใช้กันทั่วไปมักใช้ในการขยายแพคเกจภายในโมดูล