Get started learning Python with DataCamp's free Intro to Python tutorial. Learn Data Science by completing interactive coding challenges and watching videos by expert instructors. Start Now!

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join 11 million other learners and get started learning Python for data science today!

Good news! You can save 25% off your Datacamp annual subscription with the code LEARNPYTHON23ALE25 - Click here to redeem your discount

Μονάδες και Πακέτα


Σε προγραμματισμό, ένα module είναι ένα κομμάτι λογισμικού που έχει συγκεκριμένη λειτουργικότητα. Για παράδειγμα, κατά την κατασκευή ενός παιχνιδιού ping pong, ένα module μπορεί να είναι υπεύθυνο για τη λογική του παιχνιδιού, ενώ ένα άλλο module σχεδιάζει το παιχνίδι στην οθόνη. Κάθε module αποτελείται από διαφορετικό αρχείο, το οποίο μπορεί να επεξεργάζεται ξεχωριστά.

Writing modules

Τα modules στην Python είναι απλά αρχεία Python με κατάληξη .py. Το όνομα του module είναι το ίδιο με το όνομα του αρχείου. Ένα module Python μπορεί να έχει ένα σύνολο από συναρτήσεις, κλάσεις ή μεταβλητές ορισμένες και υλοποιημένες. Το παραπάνω παράδειγμα περιλαμβάνει δύο αρχεία:

mygame/

  • mygame/game.py

  • mygame/draw.py

Το Python script game.py υλοποιεί το παιχνίδι. Χρησιμοποιεί τη συνάρτηση draw_game από το αρχείο draw.py, ή με άλλα λόγια, το draw module που υλοποιεί τη λογική για το σχεδίασμα του παιχνιδιού στην οθόνη.

Τα modules εισάγονται από άλλα modules χρησιμοποιώντας την εντολή import. Σε αυτό το παράδειγμα, το script game.py μπορεί να μοιάζει κάπως έτσι:

Το module draw μπορεί να μοιάζει κάπως έτσι:

Σε αυτό το παράδειγμα, το module game εισάγει το module draw, το οποίο του επιτρέπει να χρησιμοποιήσει τις συναρτήσεις που υλοποιούνται σε αυτό το module. Η συνάρτηση main χρησιμοποιεί τη τοπική συνάρτηση play_game για να εκτελέσει το παιχνίδι και στη συνέχεια σκιαγραφεί το αποτέλεσμα του παιχνιδιού χρησιμοποιώντας μια συνάρτηση υλοποιημένη στο module draw που ονομάζεται draw_game. Για να χρησιμοποιήσουμε τη συνάρτηση draw_game από το module draw, πρέπει να προσδιορίσουμε σε ποιο module υλοποιείται η συνάρτηση, χρησιμοποιώντας τον τελεστή της τελείας. Για να αναφερθούμε στη συνάρτηση draw_game από το module game, πρέπει να εισάγουμε το module draw και να καλέσουμε draw.draw_game().

Όταν η οδηγία import draw εκτελείται, ο διερμηνευτής Python ψάχνει για ένα αρχείο στον κατάλογο στον οποίο εκτελέστηκε το script με το όνομα του module και την κατάληξη .py. Σε αυτήν την περίπτωση, θα ψάξει για draw.py. Αν βρεθεί, θα εισαχθεί. Αν δεν βρεθεί, θα συνεχίσει να ψάχνει για ενσωματωμένα modules.

Ίσως έχετε παρατηρήσει ότι όταν εισάγετε ένα module, δημιουργείται ένα αρχείο .pyc. Αυτό είναι ένα μεταγλωττισμένο αρχείο Python. Η Python κάνει μεταγλώττιση αρχείων σε bytecode Python έτσι ώστε να μην χρειάζεται να αναλύει τα αρχεία κάθε φορά που φορτώνονται τα modules. Αν υπάρχει ένα αρχείο .pyc, φορτώνεται αντί του αρχείου .py. Αυτή η διαδικασία είναι διάφανη για τον χρήστη.

Importing module objects to the current namespace

Ένας namespace είναι ένα σύστημα όπου κάθε αντικείμενο έχει ένα όνομα και μπορεί να προσπελαστεί στην Python. Εισάγουμε τη συνάρτηση draw_game στον namespace του κύριου script χρησιμοποιώντας την εντολή from.

Ίσως έχετε παρατηρήσει ότι σε αυτό το παράδειγμα, το όνομα του module δεν προηγείται του draw_game, επειδή έχουμε καθορίσει το όνομα του module χρησιμοποιώντας την εντολή import.

Τα πλεονεκτήματα αυτής της σημειογραφίας είναι ότι δεν χρειάζεται να αναφέρετε συνεχώς το module. Ωστόσο, ένας namespace δεν μπορεί να έχει δύο αντικείμενα με το ίδιο όνομα, οπότε η εντολή import μπορεί να αντικαταστήσει ένα υπάρχον αντικείμενο στον namespace.

Importing all objects from a module

Μπορείτε να χρησιμοποιήσετε την εντολή import * για να εισάγετε όλα τα αντικείμενα σε ένα module όπως αυτό:

Αυτό μπορεί να είναι λίγο επικίνδυνο καθώς οι αλλαγές στο module μπορεί να επηρεάσουν το module που το εισάγει, αλλά είναι πιο σύντομο και δεν σας απαιτεί να καθορίσετε κάθε αντικείμενο που θέλετε να εισάγετε από το module.

Custom import name

Τα modules μπορούν να φορτωθούν με οποιοδήποτε όνομα επιθυμείτε. Αυτό είναι χρήσιμο όταν εισάγετε ένα module υπό προϋποθέσεις για να χρησιμοποιήσετε το ίδιο όνομα στο υπόλοιπο του κώδικα.

Για παράδειγμα, αν έχετε δύο modules draw με ελαφρώς διαφορετικά ονόματα, μπορείτε να κάνετε το εξής:

Module initialization

Την πρώτη φορά που ένα module φορτώνεται σε ένα εκτελούμενο script Python, αρχικοποιείται εκτελώντας τον κώδικα στο module μία φορά. Αν ένα άλλο module στον κώδικα σας εισάγει το ίδιο module ξανά, δεν θα φορτωθεί ξανά, επομένως οι τοπικές μεταβλητές μέσα στο module λειτουργούν ως "singleton", που σημαίνει ότι αρχικοποιούνται μόνο μία φορά.

Μπορείτε στη συνέχεια να το χρησιμοποιήσετε αυτό για να αρχικοποιήσετε αντικείμενα. Για παράδειγμα:

Extending module load path

Υπάρχουν μερικοί τρόποι για να πείτε στον διερμηνευτή Python πού να ψάξει για modules, εκτός από τον προεπιλεγμένο τοπικό κατάλογο και τα ενσωματωμένα modules. Μπορείτε να χρησιμοποιήσετε τη μεταβλητή περιβάλλοντος PYTHONPATH για να καθορίσετε πρόσθετους καταλόγους για αναζήτηση modules όπως αυτό:

Αυτό εκτελεί game.py και επιτρέπει στο script να φορτώσει modules από τον κατάλογο foo, καθώς και τον τοπικό κατάλογο.

Μπορείτε επίσης να χρησιμοποιήσετε τη συνάρτηση sys.path.append. Εκτελέστε την πριν την εντολή import:

Τώρα ο κατάλογος foo έχει προστεθεί στη λίστα των διαδρομών όπου αναζητούνται modules.

Exploring built-in modules

Δείτε την πλήρη λίστα των ενσωματωμένων modules στη βιβλιοθήκη προτύπων της Python εδώ.

Δύο πολύ σημαντικές συναρτήσεις είναι χρήσιμες όταν εξετάζουμε modules στην Python - οι συναρτήσεις dir και help.

Για να εισάγουμε το module urllib, το οποίο μας επιτρέπει να δημιουργούμε και να διαβάζουμε δεδομένα από URLs, εισάγουμε το module:

Μπορούμε να αναζητήσουμε ποιες συναρτήσεις υλοποιούνται σε κάθε module χρησιμοποιώντας τη συνάρτηση dir:

Όταν βρούμε τη συνάρτηση στο module που θέλουμε να χρησιμοποιήσουμε, μπορούμε να διαβάσουμε περισσότερα για αυτήν με τη συνάρτηση help, χρησιμοποιώντας τον διερμηνευτή της Python:

Writing packages

Τα packages είναι namespaces που περιέχουν πολλαπλά packages και modules. Είναι απλά κατάλογοι, αλλά με ορισμένες απαιτήσεις.

Κάθε package στην Python είναι ένας κατάλογος ο οποίος ΠΡΕΠΕΙ να περιέχει ένα ειδικό αρχείο που ονομάζεται __init__.py. Αυτό το αρχείο, το οποίο μπορεί να είναι κενό, δηλώνει ότι ο κατάλογος στον οποίο βρίσκεται είναι ένα package Python. Έτσι, μπορεί να εισαχθεί με τον ίδιο τρόπο όπως ένα module.

Αν δημιουργήσουμε έναν κατάλογο με το όνομα foo, ο οποίος υποδηλώνει το όνομα του package, μπορούμε να δημιουργήσουμε ένα module μέσα σε αυτό το package που ονομάζεται bar. Στη συνέχεια, προσθέτουμε το αρχείο __init__.py μέσα στον κατάλογο foo.

Για να χρησιμοποιήσουμε το module bar, μπορούμε να το εισάγουμε με δύο τρόπους:

ή:

Στο πρώτο παράδειγμα παραπάνω, πρέπει να χρησιμοποιήσουμε το πρόθεμα foo κάθε φορά που προσπελαύνουμε το module bar. Στο δεύτερο παράδειγμα, όχι, γιατί έχουμε εισάγει το module στον namespace του module μας.

Το αρχείο __init__.py μπορεί επίσης να αποφασίσει ποια modules το package εξάγει ως API, ενώ κρατά άλλα modules εσωτερικά, παρακάμπτοντας τη μεταβλητή __all__ έτσι:

Exercise

Σε αυτήν την άσκηση, εκτυπώστε μια αλφαβητικά ταξινομημένη λίστα όλων των συναρτήσεων στο module re που περιέχουν τη λέξη find.

import re # Your code goes here find_members = [] import re # Your code goes here find_members = [] for member in dir(re): if "find" in member: find_members.append(member) print(sorted(find_members)) test_object('find_members') success_msg('Great work!')

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join over a million other learners and get started learning Python for data science today!

Previous Tutorial Next Tutorial Take the Test
Copyright © learnpython.org. Read our Terms of Use and Privacy Policy