Τα πάντα για την Python

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

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

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 29 Νοέμ 2014, 17:28

@Tassos10
Εγκατέστησε το κατάλληλο πακέτο για python3, εσύ έχεις για python2.
Στο ubuntu πχ. θα έχει κάποιο όνομα σαν python3-networkx.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Tassos10 » 01 Δεκ 2014, 01:24

@Ilias95
Με βοήθησε αυτό ευχαριστώ. ;)
Είναι ένα σπαστικό μπέρδεμα αυτό με τα πακέτα και τις εγκατάσεις από ότι βλέπω ( διότι σε python 3.2 κατάφερα να το εγκαταστήσω, αλλά μετά στο laptop σε python 3.4.2 δεν λειτουργούσε ο ίδιος τρόπος ), τέλος πάντων.

Κάτι βασικό που παιδεύομαι και ίσος υπάρχει κάτι καλύτερο.
Σε ένα project που ασχολούμαι χρειάζεται κάπου ένας πίνακας ( κάπου βλέπω να τους λέτε και matrix κάπως - δε ξέρω καθόλου τον λόγο - ), τέλος πάντων ένας πίνακας π.χ. 10 x 10 , 10 γραμμών που η κάθε γραμμή να έχει άλλες 10 θέσεις. Αυτή την υλοποίηση εγώ την κάνω με μια λίστα π.χ. :
Μορφοποιημένος Κώδικας: Επιλογή όλων
list = [ [ ] * 10 ] * 10

Όπως βλέπετε στην κάθε θέση της λίστας υπάρχει μια άλλη λίστα. ( Σωστά ; )

Μήπως έχετε να μου προτείνεται κάποια καλύτερη δομή ώστε να κατασκευάσω το παραπάνω ή ίσος και κάποια βιβλιοθήκη που θα με διευκόλυνε όπως π.χ. την numpy που ανέφερα σε προηγούμενο post ;

Η παραπάνω δομή που αναφέρω με πίνακα 10 x 10 π.χ. είναι στάνταρ ( το λέω σε περίπτωση ερωτημάτων "μήπως δε χρειάζεται να κάνεις κάτι τέτοιο..." κτλπ ). Χρειάζεται να κάνω κάτι τέτοιο, αλλά το θέμα είναι μήπως κάποιος γκουρού από εδώ ή που έχει τύχει έστω να ασχοληθεί με κάτι παρόμοιο, μήπως γνωρίζει κάτι για την συγκεκριμένη εργασία που μπορεί να με βοηθήσει να την υλοποιήσω καλύτερα και ίσος ευκολότερα χάρις τις ευελιξίες που πολλές φορές προσφέρει η python.

Ευχαριστώ. :)
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-50-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.2.0-49-generic
3 Intel Core2 Quad CPU Q9400 2.66GHz ‖ RAM 3954 MiB ‖ ASRock G31M-S
4 nVidia G92 [GeForce 9800 GT] [10de:0614] {nvidia}
5 eth0: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 02)
Tassos10
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 472
Εγγραφή: 29 Μαρ 2010, 10:43
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 01 Δεκ 2014, 01:52

Το αν χρειάζεσαι κάποια διαφορετική δομή εξαρτάται και απ' το τι ακριβώς θες να κάνεις.
Ο standard τρόπος είναι αυτός που χρησιμοποιείς (λίστες μέσα σε λίστα).

Εγώ θα έκανα μια άλλη παρατήρηση. Μην χρησιμοποιείς ποτέ δεσμευμένα ονόματα γιατί πολύ πιθανόν να προκύψουν unexpected errors.

Πχ. στο παράδειγμα σου:
Κώδικας: Επιλογή όλων
>>> a = list()
>>> a
[]
>>> list = [[]] * 10  # το πρώτο * 10 είναι περιττό
>>> list
[[], [], [], [], [], [], [], [], [], []]
>>> b = list()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
>>>

Το παραπάνω συμβαίνει γιατί τα πάντα στην python είναι αντικείμενα.
Άλλαξε το όνομα σε l ή _list ή κάτι άλλο.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Tassos10 » 01 Δεκ 2014, 02:46

Ναι ναι καταρχήν σε ευχαριστώ πάρα πολύ για την ευγενική σου παρατήρηση, θεώρησες πως μπορεί να έκανα κάτι τέτοιο λάθος και μου το επισήμανες, να σε καλά. Νομίζω όμως πως από αυτό το στάδιο λαθών έχω ξεφύγει ( αν και πάντα πιστεύω κάποιος μπορεί να πέσει ακόμη και σε πολύ χαζά λάθη ανεξάρτητα της εμπειρίας ), ξέρω πως γενικά δεν είναι σωστό και ούτε επιτρέπετε να δηλώνουμε δεσμευμένα ονόματα, απλώς τώρα έκανα ένα πάρα πολύ γρήγορο και απλό παράδειγμα που με συγχωρείτε ( με το δίκιο σας όπως είπα μου κάνετε μια τέτοια πολύ σωστή παρατήρηση ).

Πάντως με βοήθησες στο να συμπεράνω καλύτερα το χαζό που έκανα :
Μορφοποιημένος Κώδικας: Επιλογή όλων
>>> e = [[] * 5] * 5

>>> e1 = [ [] ] * 5

>>> print(e)
[[], [], [], [], []]
>>> print(e1)
[[], [], [], [], []]

Όντως αφού δηλώνω πως το περιεχόμενο είναι λίστα κάνει το περιεχόμενο επί πόσες φορές, ήταν πλεονασμός αυτό που έκανα. :mrgreen: ( Και ίσος τελικά τώρα που το σκέφτομαι έτσι όπως το έκανα να μπερδεύει κιόλας. )

Όμως αυτό :
Μορφοποιημένος Κώδικας: Επιλογή όλων
a = [ []*3 ] * 5
>>> print(a)
[ [], [], [], [], [] ]


Ή καλύτερα :
Μορφοποιημένος Κώδικας: Επιλογή όλων
a = [ [0]*3 ] * 5
>>> print(a)
[ [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0] ]

>>> a[2][2] = 1 # Αν κάνω αυτό όμως, κοιτάτε τι κάνει.. πάει ΠΑΝΤΟΎ και βάζει στη 3 θέση των εσωτερικών λιστών άσο (1) .. :/
>>> print(a)
[ [0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1] ]


Αν θέλω δηλαδή να πω, μια λίστα που η κάθε θέση της να έχει μια άλλη λίστα που όλες αυτές οι εσωτερικές λίστες να αποτελούνται από τόσα στοιχεία -συγκεκριμένα- ( π.χ. 3 τώρα είπα ), πως γίνεται τώρα να πάω σε αυτή την λίστα και να πω, συγκεκριμένα στη θέση - λίστα 5 πήγαινε και βάλε σε αυτή την λίστα στην συγκεκριμένη θέση ( της εσωτερικής λίστας ) μια τιμή ;

Όπως πήγα να το κάνω εγώ μου έβγαλε λάθος αποτέλεσμα. :(
Ήθελα να πάω στην θέση της λίστας "a" και σε αυτή την θέση, εφόσον και εκεί υπάρχει μια λίστα, πήγαινε και βάλε σε αυτή την εσωτερική λίστα στην 3 θέση ( δείκτης 2 ) μια τιμή. Αυτό το θέλω μόνο για μια λίστα - θέση της λίστας, όχι όπως βλέπετε να πάει και να το κάνει σε όλες. :(
Ήθελα δηλαδή κάτι τέτοιο :
Κώδικας: Επιλογή όλων
[ [0, 0, 0], [0, 0, 0], [0, 0, 1], [0, 0, 0], [0, 0, 0] ]
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-50-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.2.0-49-generic
3 Intel Core2 Quad CPU Q9400 2.66GHz ‖ RAM 3954 MiB ‖ ASRock G31M-S
4 nVidia G92 [GeForce 9800 GT] [10de:0614] {nvidia}
5 eth0: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 02)
Tassos10
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 472
Εγγραφή: 29 Μαρ 2010, 10:43
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Tassos10 » 14 Δεκ 2014, 23:16

Δύο βασικές νομίζω ερωτήσεις :
1) Όλα στην python είπατε πως αποθηκεύονται δυναμικά στο heap ;

2) Είναι απαραίτητο όταν δημιουργώ λίστες κτλπ στο τέλος να κάνω και διαγραφή ( π.χ. del my_list ) ώστε να απελευθερωθεί ο χώρος μνήμης που καταλαμβάνουν ή δεν είναι απαραίτητο ; Η python αναλαμβάνει κατά τον τερματισμού του προγράμματος να απελευθερώσει και ότι μνήμη δεσμεύεσαι ;


Ευχαριστώ.
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-50-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.2.0-49-generic
3 Intel Core2 Quad CPU Q9400 2.66GHz ‖ RAM 3954 MiB ‖ ASRock G31M-S
4 nVidia G92 [GeForce 9800 GT] [10de:0614] {nvidia}
5 eth0: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 02)
Tassos10
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 472
Εγγραφή: 29 Μαρ 2010, 10:43
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 15 Δεκ 2014, 01:19

1. Ναι, όλα τα αντικείμενα της python αποθηκεύονται στο heap.

2. Όχι. Γι' αυτό λέμε ότι η python όπως άλλες γλώσσες (ευτυχώς) έχει δυναμική διαχείριση μνήμης. Ο garbage collector θα κάνει την δουλειά για σένα όταν χρειαστεί. Μάλιστα όχι κατά τον τερματισμό όπως λες, αλλά κατά την διάρκεια εκτέλεσης του προγράμματος όταν δημιουργούνται σκουπίδια (αντικείμενα στα οποία δεν υπάρχει κανένας δείκτης). Όταν τερματιστεί ένα πρόγραμμα έτσι κι αλλιώς απελευθερώνει όση μνήμη έχει δεσμεύσει.

Μάλιστα στην java η System.gc() (η μέθοδος που καλεί τον garbage collector της java) δεν σου εγγυάται ότι όντως θα γίνει εκείνη την στιγμή η εκκαθάριση. Πολύ πιθανόν να την κάνει όταν κρίνει αυτός σκόπιμο. Δεν ξέρω αν ισχύει και στην python αυτό.

ΥΓ. Το προηγούμενο post το ξέχασα με το πέσιμο του server, θα απαντήσω μόλις βρω χρόνο γιατί είναι μεγαλύτερο. :P
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό akounadis » 15 Δεκ 2014, 12:31

Δε χρειάστηκε ποτέ να νοιαστώ για τις χαμηλού επιπέδου λεπτομέρειες όπως η διαχείριση της μνήμης που χρησιμοποιείται από τα προγράμματα.
Στα πρώτα προγράμματα το υπολόγιζα και το έψαχνα. Με το καιρό το ξέχασα.
Intel Core i7-7700HQ CPU @ 2.80GHz ‖ RAM 7617 MiB ‖ Dell Inc. 065C71 - Dell Inc. Inspiron 15 7000 Gaming
Intel Device [8086:591b] {i915} ⋮ nVidia Device [10de:1c8c] {nouveau}
wlp3s0: Intel Wireless 3165 [8086:3165] (rev 79) ⋮ enp2s0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
Συναντήσεις φίλων του Ubuntu-gr σε πόλεις της Ελλάδας
Άβαταρ μέλους
akounadis
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1050
Εγγραφή: 23 Δεκ 2009, 17:40
Τοποθεσία: Πειραιάς
Launchpad: akounadis
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Tassos10 » 22 Δεκ 2014, 01:27

Πω πωω.. απίστευτη διευκόλυνση και ειδικά ο garbage collector που περιγράφεις ( και ευχαριστώ πολύ, πάρα πολύ καλή ωραία και αναλυτική η περιγραφή σου ) παραπάνω είναι το κάτι άλλο, πολύ σημαντικό που διευκολύνει πάρα πολύ!
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-50-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.2.0-49-generic
3 Intel Core2 Quad CPU Q9400 2.66GHz ‖ RAM 3954 MiB ‖ ASRock G31M-S
4 nVidia G92 [GeForce 9800 GT] [10de:0614] {nvidia}
5 eth0: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 02)
Tassos10
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 472
Εγγραφή: 29 Μαρ 2010, 10:43
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό fagana » 04 Ιουν 2015, 22:31

Γειά σας παιδιά.Θα ήθελα να ρωτήσω ως αρχάριος τι βιβλία πρέπει να πάρω για να μάθω python.
Επίσης θα ήθελα να μάθω πιο καλά που είναι να προγραμματίζεις σε κονσόλα ή σε ide περιβάλλον;
Αυτά προς το παρόν.
Άβαταρ μέλους
fagana
babeTUX
babeTUX
 
Δημοσιεύσεις: 5
Εγγραφή: 11 Απρ 2013, 17:03
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 04 Ιουν 2015, 22:40

Δεν έχω διαβάσει κανένα καλό βιβλίο python για αρχάριους αλλά πολλοί προτείνουν αυτό: http://learnpythonthehardway.org/book/
Φαίνεται καλά οργανωμένο, οπότε αξίζει να το δοκιμάσεις.

fagana έγραψε:Επίσης θα ήθελα να μάθω πιο καλά που είναι να προγραμματίζεις σε κονσόλα ή σε ide περιβάλλον;

Όπου σε βολεύει.
Όταν λες σε κονσόλα τι εννοείς; Κάποιον cli text editor όπως vim;
Αν ναι, σίγουρα αυτό θα αυξήσει την παραγωγικότητα σου, αλλά έχει μεγαλύτερη καμπύλη εκμάθησης.
Μπορείς να το αφήσεις για αργότερα. Προς το παρόν οποιοδήποτε απλό IDE σου κάνει.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

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