สำหรับโค้ดที่ฉันกำลังเขียน ฉันกำลังรัน scipy.curve_fit()
หลายหมื่นครั้ง ฉันสังเกตเห็นในซอร์สโค้ด curve_fit()
ที่เกี่ยวข้อง โดยเฉพาะใน บรรทัด 430 และ 431 ใน แหล่งที่มา (ในฟังก์ชัน leastsq()
) มีคำสั่ง import
สองคำสั่ง:
from numpy.dual import inv
from numpy.linalg import LinAlgError
ฉันโทร curve_fit()
อยู่ในวง ฉันสงสัยว่าโมดูลที่โหลดโดยคำสั่ง import
เหล่านี้จะถูกเก็บไว้เมื่อการวนซ้ำเสร็จสมบูรณ์หรือหากโมดูลอยู่นอกขอบเขตและจำเป็นต้องโหลดซ้ำในการวนซ้ำทุกครั้ง
หมายเหตุ: คำสั่ง import
จะถูกเรียกก็ต่อเมื่อคำสั่ง if full_output:
ในบรรทัด 427 ของซอร์สโค้ดประเมินเป็นจริง full_output=1
คือสิ่งที่ส่งผ่านไปยัง leastsq()
โดย curve_fit()
ดังนั้นคำสั่ง import
จึงถูกเรียกจริงๆ
หมายเหตุเพิ่มเติม: ฉัน ไม่ได้ถามเกี่ยวกับการนำเข้าโมดูลหลายครั้ง (มาก) แต่หากโมดูลที่นำเข้าในลูปยังคงสามารถเข้าถึงได้ด้วยโค้ดหลังจากการวนซ้ำเสร็จสมบูรณ์ (หรือหลังจากการวนซ้ำแต่ละครั้งของ วนซ้ำ)
หมายเหตุเพิ่มเติม:
>>>for x in range(0,1):
... import os
...
>>> os
<module 'os' from '/home/lars/env/common/lib64/python2.7/os.pyc'>
ใช้งานได้ แต่ถ้าฉันกำหนดฟังก์ชันแทน:
def a(b):
if a==True:
import scipy
แล้ว
for i in range(10):
a(True)
scipy
NameError: name 'scipy' is not defined
เกิดอะไรขึ้นกับสิ่งนั้น?