Python: Address Book 3.1

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Python: Address Book

Δημοσίευσηαπό pmav99 » 25 Αύγ 2011, 22:01

για την εκτέλεση εντολών του συστήματος, δες το module subprocess. Μέθοδος call με shell=False αν θυμάμαι καλά, αλλά τσέκαρε το documentation.

H "Αctions" γιατί είναι ξεχωριστή κλάση? Ενέργειες πάνω στο αντικείμενο DataBase δεν εκτελούν οι μεθόδοι της? (προσθέτους επαφές στη βάση, αφαιρούν επαφές από τη βάση κτλ)
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Python: Address Book

Δημοσίευσηαπό Ilias95 » 25 Αύγ 2011, 22:08

pmav99 έγραψε:για την εκτέλεση εντολών του συστήματος, δες το module subprocess. Μέθοδος call με shell=False αν θυμάμαι καλά, αλλά τσέκαρε το documentation.

H "Αctions" γιατί είναι ξεχωριστή κλάση? Ενέργειες πάνω στο αντικείμενο DataBase δεν εκτελούν οι μεθόδοι της? (προσθέτους επαφές στη βάση, αφαιρούν επαφές από τη βάση κτλ)


Σωστά. Πρέπει να μεταφερθούν οι μέθοδοι της στην κλάση Database. Let's do it...
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Python: Address Book

Δημοσίευσηαπό Ilias95 » 25 Αύγ 2011, 23:03

Για να τρέξεις εντολές με την subprocess.call() πρέπει πρώτα να χωρίσεις την εντολή σε arguments με shlex.split(command).
Όμως έτσι δεν μπορώ να περάσω τις regular expressions της command line, όπως του αστερίσκου (*) του οποίου η χρήση είναι απαραίτητη.
Έτσι το άφησα ως έχει προς το παρών μιας και δεν βρήκα τρόπο να το δηλώσω σαν regular expression. Ούτως ή άλλος δεν νομίζω ότι είναι και τόσο μεγάλο πρόβλημα.
Κατά τ' άλλα μετέφερα όλες της μεθόδους της Actions() στην Database() και ακόμα όλα καλά. :D
Πλησιάζει στο να γίνει "όμορφο"... :P
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Python: Address Book

Δημοσίευσηαπό pmav99 » 25 Αύγ 2011, 23:37

Μάζεψε τα imports στην αρχή.

Γιατί χρησιμοποιείς nested functions? Τι κερδίζεις?
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Python: Address Book

Δημοσίευσηαπό Ilias95 » 25 Αύγ 2011, 23:41

Τι εννοείς να τα μαζέψω; Κάτι τέτοιο ας πούμε;:
import os, readline, pickle
Nested functions τι είναι; Η details() και η menu();
Αν ναι, έχει ιδιαίτερη σημασία; Είναι ανεξάρτητες απ' τις κλάσεις...

Edit: Κατάλαβα για τα imports. Ναι όντως σηκώνει κάποιο συμμάζεμα αλλά κάποια πρέπει να είναι μέσα στην κλάση.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Python: Address Book

Δημοσίευσηαπό pmav99 » 25 Αύγ 2011, 23:47

Γιατί πρέπει να είναι μέσα στην κλάση? Ίσα ίσα... To πολύ πολύ να κάνει 0.1sec παραπάνω να ξεκινήσει...

3 nested functions:
Κώδικας: Επιλογή όλων
def edit_contact(self, i):
"""Επεξεργασία της επαφής."""
def input_text(prompt, default):
def startup_text():
readline.insert_text(default)

H startup_text είναι μια γραμμή. Μπορείς να την βάλεις inline.

Η input_text μπορεί να είναι απλή function, εκτός της κλάσης δηλαδή.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Python: Address Book

Δημοσίευσηαπό pmav99 » 25 Αύγ 2011, 23:51

Κώδικας: Επιλογή όλων
s = "Ένα πολύ μεγάλο και μακρύ string "
s += "που με εμποδίζει να γράψω όμορφο και "
s += "ευανάγνωστο κώδικα σύμφωνα με το PEP 08"
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Python: Address Book

Δημοσίευσηαπό Ilias95 » 26 Αύγ 2011, 00:09

Διορθώθηκαν και τα imports. Ναι, λάθος μου δεν χρειάζεται να είναι στην κλάση. Τα μάζεψα όλα μαζί.
Έβγαλα και την input_text() έξω απ' την κλάση, αλλά η startup_text() πρέπει να μείνει ως έχει καθώς η readline.set_startup_hook() απαιτεί function σαν όρισμα.
Anything else? :D

Edit: Για να κάνουμε και τα strings τώρα... :D :clap:
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Python: Address Book

Δημοσίευσηαπό pmav99 » 26 Αύγ 2011, 00:15

η set_startup_hook() απαιτεί function. Ok. Αυτό σημαίνει ότι πρέπει ο ορισμός της να είναι στο σώμα της μεθόδου? Απλά κάπου στο namespace πρέπει να είναι. Τις συγκεκριμένες μπορείς να τις βγάλεις και εκτός του σώματος της κλάσης. Απλή συνάρτηση είναι. Δεν έχει κάποια σχέση με τη database.

Κώδικας: Επιλογή όλων
def startup_text():
readline.insert_text(default)

def input_text(prompt, default):
readline.set_startup_hook(startup_text)
try:
return input(prompt)
finally:
readline.set_startup_hook(None)


Αυτό που έχεις κάνει με το try/finally δεν το καταλαβαίνω. Αφού δίνεις return δεν εκτελείται το finally (δεν το έχω τρέξει).
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Python: Address Book

Δημοσίευσηαπό Ilias95 » 26 Αύγ 2011, 00:49

Διορθώθηκαν και τα strings.

Όσον αφορά την παραπάνω συνάρτηση μου την είχε δώσει ο sv1jsb, μέλος του φορουμ, όταν είχα ρωτήσει για το πως μπορώ να πετύχω αυτό το αποτέλεσμα.
Οι παρατηρήσεις μου λοιπόν. Αν μετακινήσεις την startup_text() έξω απ' την συνάρτηση δεν δουλεύει!!!
Επίσης σχετικά με το try-finally. Δοκίμασα να βγάλω το finally και κράτησα μόνο το return.
Το αποτέλεσμα είναι μόλις τελειώνω με την επεξεργασία μιας επαφής, να εμφανίζεται συνέχεια η τελευταία είσοδος του χρήστη που είναι το όνομα της κατηγορίας.
Δηλαδή ενώ κανονικά από κει και πέρα έχει επιλογές 1, 2 ,3 για να πλοηγηθεί, εμφανίζετε από προεπιλογή σαν κείμενο το όνομα της κατηγορίας που είχε δώσει!
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι