Python - Modul

Sebuah modul memungkinkan Anda untuk mengatur kode Python Anda secara logis. Pengelompokan kode terkait ke dalam modul membuat kode lebih mudah dipahami dan digunakan. Modul adalah objek Python dengan atribut bernama sewenang-wenang yang dapat Anda ikat dan rujuk.

Sederhananya, modul adalah file yang terdiri dari kode Python. Sebuah modul dapat mendefinisikan fungsi, kelas dan variabel. Modul juga dapat menyertakan kode yang dapat dijalankan.

Contoh

Kode Python untuk modul bernama aname biasanya berada dalam file bernama aname.py . Berikut adalah contoh modul sederhana, support.py

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

The impor Pernyataan

Anda dapat menggunakan file sumber Python apa pun sebagai modul dengan menjalankan pernyataan import di beberapa file sumber Python lainnya. The impor memiliki sintaks berikut -

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

Ketika interpreter menemukan pernyataan import, itu mengimpor modul jika modul tersebut ada di jalur pencarian. Jalur pencarian adalah daftar direktori yang ditelusuri penerjemah sebelum mengimpor modul. Misalnya, untuk mengimpor modul support.py, Anda perlu meletakkan perintah berikut di bagian atas skrip -

#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Zara")

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Hello : Zara

Sebuah modul dimuat hanya sekali, berapa kali pun ia diimpor. Ini mencegah eksekusi modul terjadi berulang kali jika terjadi beberapa impor.

The dari ... impor Pernyataan

Pernyataan from Python memungkinkan Anda mengimpor atribut tertentu dari modul ke namespace saat ini. The dari ... impor memiliki sintaks berikut -

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

Misalnya, untuk mengimpor fungsi fibonacci dari fib modul, gunakan pernyataan berikut -

from fib import fibonacci

Pernyataan ini tidak mengimpor seluruh fib modul ke dalam namespace saat ini; itu hanya memperkenalkan item fibonacci dari fib modul ke dalam tabel simbol global dari modul pengimpor.

The dari ... import * Pernyataan

Dimungkinkan juga untuk mengimpor semua nama dari modul ke namespace saat ini dengan menggunakan pernyataan import berikut -

from modname import *

Ini menyediakan cara mudah untuk mengimpor semua item dari modul ke namespace saat ini; Namun, pernyataan ini harus digunakan dengan hemat.

Menemukan Modul

Saat Anda mengimpor modul, interpreter Python mencari modul dalam urutan berikut -

  • Direktori saat ini.

  • Jika modul tidak ditemukan, Python akan mencari setiap direktori dalam variabel shell PYTHONPATH.

  • Jika semuanya gagal, Python memeriksa jalur default. Di UNIX, jalur default ini biasanya / usr / local / lib / python /.

Jalur pencarian modul disimpan dalam sys modul sistem sebagai sys.pathvariabel. Variabel sys.path berisi direktori saat ini, PYTHONPATH, dan default yang bergantung pada penginstalan.

The PYTHONPATH Variabel

PYTHONPATH adalah variabel lingkungan, terdiri dari daftar direktori. Sintaks PYTHONPATH sama dengan sintaks variabel shell PATH.

Ini adalah PYTHONPATH khas dari sistem Windows -

set PYTHONPATH = c:\python20\lib;

Dan ini adalah PYTHONPATH khas dari sistem UNIX -

set PYTHONPATH = /usr/local/lib/python

Namespaces dan Scoping

Variabel adalah nama (pengenal) yang dipetakan ke objek. Sebuah namespace adalah kamus nama variabel (kunci) dan objek mereka yang sesuai (nilai-nilai).

Pernyataan Python dapat mengakses variabel di namespace lokal dan di namespace global . Jika variabel lokal dan global memiliki nama yang sama, variabel lokal membayangi variabel global.

Setiap fungsi memiliki namespace lokalnya sendiri. Metode kelas mengikuti aturan pelingkupan yang sama seperti fungsi biasa.

Python membuat tebakan terpelajar tentang apakah variabel bersifat lokal atau global. Ini mengasumsikan bahwa variabel apa pun yang diberi nilai dalam suatu fungsi adalah lokal.

Oleh karena itu, untuk menetapkan nilai ke variabel global dalam suatu fungsi, Anda harus menggunakan pernyataan global terlebih dahulu.

Pernyataan VarName global memberi tahu Python bahwa VarName adalah variabel global. Python berhenti mencari ruang nama lokal untuk variabel.

Misalnya, kami mendefinisikan uang variabel di namespace global. Di dalam fungsi Uang , kami menetapkan nilai Uang , oleh karena itu Python menganggap Uang sebagai variabel lokal. Namun, kami mengakses nilai uang variabel lokal sebelum menyetelnya, jadi hasilnya adalah UnboundLocalError. Tidak mengomentari pernyataan global memperbaiki masalah.

#!/usr/bin/python

Money = 2000
def AddMoney():
   # Uncomment the following line to fix the code:
   # global Money
   Money = Money + 1

print Money
AddMoney()
print Money

Fungsi dir ()

Fungsi built-in dir () mengembalikan daftar string yang diurutkan berisi nama yang ditentukan oleh modul.

Daftar ini berisi nama semua modul, variabel dan fungsi yang didefinisikan dalam sebuah modul. Berikut adalah contoh sederhana -

#!/usr/bin/python

# Import built-in module math
import math

content = dir(math)
print content

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

['__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']

Di sini, variabel string khusus __name__ adalah nama modul, dan __file__ adalah nama file darimana modul dimuat.

The GLOBALS () dan penduduk setempat () Fungsi

Fungsi global () dan lokal () dapat digunakan untuk mengembalikan nama di ruang nama global dan lokal bergantung pada lokasi dari mana mereka dipanggil.

Jika local () dipanggil dari dalam suatu fungsi, itu akan mengembalikan semua nama yang bisa diakses secara lokal dari fungsi itu.

Jika global () dipanggil dari dalam suatu fungsi, itu akan mengembalikan semua nama yang dapat diakses secara global dari fungsi itu.

Jenis kembalian dari kedua fungsi ini adalah kamus. Oleh karena itu, nama dapat diekstraksi menggunakan fungsi keys ().

The reload () Fungsi

Saat modul diimpor ke dalam skrip, kode di bagian tingkat atas modul hanya dijalankan satu kali.

Oleh karena itu, jika Anda ingin menjalankan ulang kode tingkat atas dalam sebuah modul, Anda dapat menggunakan fungsi reload () . Fungsi reload () mengimpor modul yang sebelumnya diimpor lagi. Sintaks dari fungsi reload () adalah ini -

reload(module_name)

Di sini, module_name adalah nama modul yang ingin Anda muat ulang dan bukan string yang berisi nama modul. Misalnya, untuk memuat ulang modul hello , lakukan hal berikut -

reload(hello)

Paket dengan Python

Paket adalah struktur direktori file hierarki yang mendefinisikan satu lingkungan aplikasi Python yang terdiri dari modul dan subpaket dan sub-subpaket, dan seterusnya.

Pertimbangkan file Pots.py tersedia di direktori Telepon . File ini memiliki baris kode sumber berikut -

#!/usr/bin/python

def Pots():
   print "I'm Pots Phone"

Dengan cara serupa, kami memiliki dua file lain yang memiliki fungsi berbeda dengan nama yang sama seperti di atas -

  • File Phone / Isdn.py memiliki fungsi Isdn ()

  • File telepon / G3.py memiliki fungsi G3 ()

Sekarang, buat satu file lagi __init__.py di direktori Telepon -

  • Phone/__init__.py

Agar semua fungsi Anda tersedia saat Anda mengimpor Telepon, Anda perlu memasukkan pernyataan impor eksplisit di __init__.py sebagai berikut -

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

Setelah Anda menambahkan baris ini ke __init__.py, Anda memiliki semua kelas ini tersedia saat Anda mengimpor paket Telepon.

#!/usr/bin/python

# Now import your Phone Package.
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

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

Dalam contoh di atas, kami telah mengambil contoh dari satu fungsi di setiap file, tetapi Anda dapat menyimpan banyak fungsi di file Anda. Anda juga dapat menentukan kelas Python yang berbeda dalam file tersebut dan kemudian Anda dapat membuat paket Anda dari kelas tersebut.