Latest web development tutorials

โมดูลหลาม

โมดูลช่วยให้คุณสามารถจัดระเบียบเหตุผลรหัสหลามของคุณ

การกำหนดรหัสที่เกี่ยวข้องเข้าไปในโมดูลที่จะทำให้รหัสของคุณง่ายต่อการใช้ที่เข้าใจมากขึ้น

โมดูลหลามเป็นวัตถุที่มีคุณลักษณะแบบสุ่มชื่อที่ใช้ในการผูกหรือการอ้างอิง

เพียงแค่ใส่โมดูลเป็นรหัสหลามเพื่อบันทึกไฟล์ โมดูลสามารถกำหนดฟังก์ชั่นการเรียนและตัวแปร โมดูลสามารถมีรหัสปฏิบัติการ

ตัวอย่าง

โมดูล ANAME เรียกว่าในรหัสหลามทั่วไปสามารถพบได้ในไฟล์ที่เรียกว่า aname.py ตัวอย่างต่อไปนี้เป็น support.py โมดูลที่เรียบง่าย

def print_func( par ):
   print "Hello : ", par
   return


คำสั่งนำเข้า

ต้องการใช้แฟ้มแหล่งที่มางูใหญ่เพียงแค่ทำการคำสั่งนำเข้าอีกในแฟ้มต้นฉบับไวยากรณ์เป็นดังนี้:

import module1[, module2[,... moduleN]

เมื่อล่ามพบคำสั่งนำเข้าถ้าโมดูลจะถูกนำเข้าในเส้นทางการค้นหาปัจจุบัน

เส้นทางการค้นหาเป็นล่ามแรกจะค้นหารายชื่อของไดเรกทอรีทั้งหมด ตามที่คุณต้องการที่จะนำเข้า support.py โมดูลคุณจะต้องใส่คำสั่งที่ด้านบนของสคริปต์:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 导入模块
import support
 
# 现在可以调用模块里包含的函数了
support.print_func("Zara")

ตัวอย่างของการส่งออกดังกล่าวข้างต้น:

Hello : Zara

โมดูลจะถูกนำเข้าครั้งเดียวไม่ว่ากี่ครั้งที่คุณดำเนินการนำเข้า โมดูลนี้จะช่วยป้องกันการนำเข้าที่จะดำเนินการซ้ำแล้วซ้ำอีก



จาก ... คำสั่งนำเข้า

งูหลามช่วยให้คุณสามารถนำงบจากส่วนที่ระบุจากโมดูลเข้าไปใน namespace ปัจจุบัน ไวยากรณ์เป็นดังนี้:

from modname import name1[, name2[, ... nameN]]

ยกตัวอย่างเช่นการที่จะนำเข้าฟังก์ชั่น fibonacci โมดูลตอแหลใช้คำสั่งต่อไปนี้:

from fib import fibonacci

คำสั่งนี้ไม่ปดโมดูลทั้งหมดลงใน namespace ที่ปัจจุบันก็จะปดเลน fibonacci นำเข้าสู่การดำเนินงานตารางสัญลักษณ์เดียวทั่วโลกของโมดูลประกาศนี้



จาก ... นำเข้าคำสั่ง *

เนื้อหาทั้งหมดของโมดูลที่มีอยู่ทั้งหมดลงใน namespace ปัจจุบันเป็นไปได้เพียงแค่ใช้คำสั่งต่อไปนี้:

from modname import *

นี้มีวิธีที่ง่ายที่จะนำเข้าโมดูลในโครงการทั้งหมด อย่างไรก็ตามคำสั่งนี้ไม่ควรมากเกินไปที่จะใช้



โมดูลการวางตำแหน่ง

เมื่อคุณนำเข้าโมดูลหลาม parser โมดูลตำแหน่งเพื่อค้นหาคือ:

  • ไดเรกทอรีปัจจุบัน
  • ถ้าไม่ได้อยู่ในไดเรกทอรีปัจจุบันงูหลามจะค้นหาแต่ละ directory ในเปลือก PYTHONPATH ตัวแปร
  • ถ้าคุณไม่สามารถหางูใหญ่จะมองไปที่เส้นทางเริ่มต้น ภายใต้ระบบปฏิบัติการยูนิกซ์เส้นทางเริ่มต้นมักจะเป็น / usr / local / lib / หลาม /

เส้นทางการค้นหาโมดูลถูกเก็บไว้ใน sys.path โมดูลตัวแปรระบบ ตัวแปรที่มีไดเรกทอรีปัจจุบัน PYTHONPATH และไดเรกทอรีการติดตั้งเริ่มต้นโดยกระบวนการตัดสินใจ



ตัวแปร PYTHONPATH

ในฐานะที่เป็นตัวแปรสภาพแวดล้อม PYTHONPATH โดยติดอยู่ในรายชื่อของหลายไดเรกทอรีที่ PYTHONPATH เปลือกไวยากรณ์ PATH ตัวแปรเดียวกัน

บนระบบ Windows ที่ PYTHONPATH ทั่วไปดังนี้

set PYTHONPATH=c:\python20\lib;

บนระบบ UNIX ที่ PYTHONPATH ทั่วไปดังนี้

set PYTHONPATH=/usr/local/lib/python


Namespaces และขอบเขต

ตัวแปรที่เป็นชื่อของวัตถุที่มีการจับคู่ (ระบุ) namespace เป็นตัวแปรที่มีชื่อของ (กุญแจ) ของพวกเขาและวัตถุที่เกี่ยวข้องเป็น (ค่า) ของพจนานุกรม

นิพจน์งูใหญ่สามารถเข้าถึงตัวแปร namespace namespace ประเทศและทั่วโลก ถ้าตัวแปรท้องถิ่นที่มีชื่อเดียวกับตัวแปรทั่วโลกตัวแปรท้องถิ่นจะแทนที่ตัวแปรทั่วโลก

แต่ละฟังก์ชั่นมี namespace ของตัวเอง กฎขอบเขตเป็นวิธีการเรียนและการทำงานได้ตามปกติ

งูหลามชาญฉลาดเดาตัวแปรเป็นในประเทศหรือทั่วโลกก็จะสันนิษฐานได้ว่าตัวแปรใด ๆ ในการกำหนดฟังก์ชั่นเป็นท้องถิ่น

ดังนั้นถ้าคุณได้รับมอบหมายให้ตัวแปรทั่วโลกในการทำงานของคุณจะต้องใช้คำสั่งทั่วโลก

การแสดงออก VarName ทั่วโลกบอกหลาม VarName เป็นตัวแปรทั่วโลกเพื่อให้งูหลามไม่พบตัวแปรนี้ใน namespace ท้องถิ่น

ตัวอย่างเช่นเรากำหนดเงินตัวแปรใน namespace โลก จากนั้นเราภายในฟังก์ชั่นที่กำหนดให้กับตัวแปรเงินแล้วงูหลามจะถือว่าเงินที่เป็นตัวแปรท้องถิ่น อย่างไรก็ตามเราไม่ได้ประกาศตัวแปรท้องถิ่นก่อนที่จะเข้าถึงเงินผลที่ได้คือว่าจะมีความผิดพลาด UnboundLocalError การยกเลิกคำสั่งความคิดเห็นทั่วโลกสามารถแก้ปัญหานี้

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
Money = 2000
def AddMoney():
   # 想改正代码就取消以下注释:
   # global Money
   Money = Money + 1
 
print Money
AddMoney()
print Money


dir () ฟังก์ชัน

dir () ฟังก์ชั่นเป็นรายการของสตริงแถวลำดับที่ดีเนื้อหาเป็นโมดูลกำหนดชื่อ

กลับรายการของโมดูลทั้งหมดเพื่อรองรับตัวแปรและฟังก์ชั่นที่กำหนดไว้ในโมดูล ตัวอย่างง่ายๆดังต่อไปนี้:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 导入内置math模块
import math
 
content = dir(math)
 
print content;

ตัวอย่างของการส่งออกดังกล่าวข้างต้น:

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

นี่สตริงพิเศษ __name__ ตัวแปรชื่อจุดของโมดูล __ จุด file__ ที่จะนำเข้าชื่อไฟล์ของโมดูล



Globals () และชาวบ้าน () ฟังก์ชัน

ทั้งนี้ขึ้นอยู่กับสายท้องถิ่น Globals () และชาวบ้าน () ฟังก์ชั่นที่สามารถใช้ในการแสดงชื่อ namespace ระดับโลกและระดับท้องถิ่น

ถ้าคุณเรียกชาวบ้านที่อยู่ภายในฟังก์ชั่น () ผลตอบแทนที่สามารถเข้าถึงฟังก์ชั่นทั้งหมดในชื่อ

ถ้าคุณเรียก Globals () ภายในฟังก์ชันจะส่งกลับทั้งหมดชื่อฟังก์ชั่นในการเข้าถึงพลังงานทั่วโลก

ฟังก์ชั่นทั้งสองกลับเป็นประเภทพจนานุกรม ดังนั้นชื่อที่เราใช้กุญแจ () ฟังก์ชั่นการกำจัด



โหลด () ฟังก์ชัน

เมื่อโมดูลถูกนำมาใช้เป็นส่วนหนึ่งโมดูลสคริปต์ด้านบนของรหัสที่จะดำเนินการเพียงครั้งเดียว

ดังนั้นถ้าคุณต้องการที่จะดำเนินการอีกครั้งโมดูลในส่วนด้านบนของรหัสที่คุณสามารถใช้โหลด () ฟังก์ชัน ฟังก์ชั่นนี้จะได้รับอีกครั้งก่อนที่จะนำเข้าโมดูลที่นำเข้า ไวยากรณ์เป็นดังนี้:

reload(module_name)

นี่ชื่อ module_name ของโมดูลที่จะวางโดยตรงแทนของสตริง ตัวอย่างเช่นคุณต้องการแทนที่โมดูลสวัสดีดังต่อไปนี้:

reload(hello)


แพ็คหลาม

แพคเกจที่เป็นโครงสร้างไดเรกทอรีลำดับชั้นซึ่งกำหนดแพคเกจเด็กโดยโมดูลและแพคเกจย่อยและแพ็กเกจย่อยภายใต้ส่วนประกอบอื่น ๆ ของสภาพแวดล้อมที่ใช้งูหลาม

พิจารณาไฟล์ pots.py ในสมุดโทรศัพท์ ไฟล์นี้มีรหัสที่มาต่อไปนี้:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
def Pots():
   print "I'm Pots Phone"
   

ในทำนองเดียวกันเรามีสองฟังก์ชั่นที่แตกต่างกันเพื่อบันทึกไฟล์:

  • โทรศัพท์ / Isdn.py ที่มีฟังก์ชั่น Isdn ()
  • โทรศัพท์ / G3.py ที่มีฟังก์ชั่น G3 ()

ตอนนี้สร้าง __init__.py แฟ้มในสมุดโทรศัพท์:

  • โทรศัพท์ / __ init__.py

เมื่อคุณนำเข้าโทรศัพท์เพื่อให้สามารถใช้ฟังก์ชั่นทั้งหมดที่คุณจำเป็นต้องใช้งบนำเข้าอย่างชัดเจนในปีที่ผ่าน __init__.py ดังต่อไปนี้:

from Pots import Pots
from Isdn import Isdn
from G3 import G3

เมื่อคุณเพิ่มรหัสเพื่อ __init__.py แพคเกจโทรศัพท์นำเข้าเมื่อชั้นเรียนเหล่านี้ทั้งหมดที่มีอยู่ใน

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 导入 Phone 包
import Phone
 
Phone.Pots()
Phone.Isdn()
Phone.G3()

ตัวอย่างของการส่งออกดังกล่าวข้างต้น:

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

ตัวอย่างเช่นเรามีเพียงหนึ่งฟังก์ชั่นในแต่ละไฟล์ แต่ในความเป็นจริงคุณสามารถใส่จำนวนมากของฟังก์ชั่น นอกจากนี้คุณยังสามารถกำหนดระดับหลามในไฟล์เหล่านี้และจากนั้นสร้างแพคเกจสำหรับการเรียนเหล่านี้