Προς το περιεχόμενο

Ενας Οδηγός για την Python που έγραψα...πως σας φαίνεται?


El_Sonador

Προτεινόμενες αναρτήσεις

Καλησπέρα σε ολους

πρίν αρκετό καιρό ξεκινησα να γραφω σημειώσεις..μεχρι που κατάλαβα οτι οι σημεώσεις αυτές γίνανε {με λιγες μετατροπές}ενας πολύ καλός οδηγός για εισαγωγή στην Python

εχοντας γράψει συνολικά 3 κεφάλαια {απο τα 5 που υπολογίζω} θα ήθελα να μου πείτε την γνώμη σας...

τα κεφάλαια 1 , 2 , 3 έχουν ανεβεί στο παρακάτω Blog

http://tech-grex.blogspot.gr/2013/05/python-3_16.html

 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Καλησπέρα, με μια πολύ γρήγορη ματιά, το format είναι μάλλον άσχημο... Θα σου πρότεινα να το κάνεις με sphinx (πρακτικά δηλαδή να μεταφέρεις το κείμενο σε Restructured Text) και να το ανεβάσεις στο readthedocs ή, εναλλακτικά και αν έχεις όρεξη και σε ενδιαφέρει πρωτίστως το pdf, να χρησιμοποιήσεις LaTeX. Εγώ θα το έκανα σε sphinx.

 

Είτε με την μία είτε με την άλλη επιλογή, να είσαι σίγουρος ότι το περιεχόμενο πραγματικά θα αναδειχθεί.

Επεξ/σία από pmav99
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ευχαριστώ πολύ φιλέ για τα καλά σου λόγια

οταν λές να κάνω το κείμενο Restructured Text εννοείς να γραψω σε html το κείμενο? {LaTeX δεν γνωρίζω :) }

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Όχι, εννοώ να το γράψεις σε reStructuredText

https://www.google.gr/search?q=restructured+text&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a&channel=fflb

 

και στη συνέχεια μέσω του sphinx

http://sphinx-doc.org/

 

θα έχεις αρχεία html που θα μπορείς να ανεβάσεις όπου θέλεις. Δωρεάν hosting προσφέρει το https://readthedocs.org/

 

Αν μάλιστα, ανεβάσεις τα αρχεία reST σε κάποιο site όπως το https://github.com/ ή το https://bitbucket.org τότε, αν κάποιος το θέλει, θα μπορεί εύκολα να συνεισφέρει στον οδηγό.

 

Η άλλη εναλλακτική είναι τα wikibooks. Δες πχ εδώ https://el.wikibooks.org/wiki/Linux_%CE%B3%CE%B9%CE%B1_%CE%B1%CF%81%CF%87%CE%AC%CF%81%CE%B9%CE%BF%CF%85%CF%82

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

με τα ορθογραφικά το παλευω...διορθώνω σιγα σιγα .....

 

 

 

Στο  Κεφαλαιο 1 :

 

σελ.7 στους τελεστές της Python δεν ειναι οπίοι αλλα οποίοι.Το ελένξει ειναι ελεγξει ενω το αληθεις αληθής.Σελ. 10 ειναι μήνυμα και οχι μύνημα. Επισης μετατροπή ακαιρεων πρεπει να γινει ακεραιων σελ.13 ειναι ελεγχος και οχι ελενχος.Σελιδες 15+ διορθωσε το Βρονχος σε βροχος. Επισης μπορεις να βάλεις και σελιδοποίηση στο word και μετα να το κάνεις pdf.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επίσης άλλο βασικό γιατί ήταν το πρώτο πράγμα που μου έκανε εντύπωση.

 

Βλέπω ότι ο οδηγός έχει "Serif" fonts. Δηλαδή fonts με "ουρίτσες" όπως τα Times New Roman. Γενικότερα όταν διαβάζεις σε οθόνη τα "Serif" fonts είναι κακή επιλογή. Είναι καλύτερο να επιλέξεις ένα "Sans Serif" font όπως Arial, Helvetica κτλ...

 

Μπορείς να έχεις μια δεύτερη έκδοση για κάποιο έντυπο με Serif fonts. Στο χαρτί τα Serif είναι καλύτερα απο τα Sans Serif.

 

Κατα τ'άλλα έχεις σοβαρά προβλήματα με το formatting που το κάνει αρκετά δυσανάγνωστο.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 

Μπραβο, πολυ καλη αρχη. Εχεις ταλεντο και ικανοτητα σαν technical writer.

 

Μερικές παρατηρήσεις:

 

1) Στα αρχικά παραδείγματα χρησιμοποιώντας το IDE, νομίζω είναι καλύτερα να μην χρησιμοποιείς το print. Για παράδειγμα αντί :

 

>> print “Hello Word”

 

η εντολή

 

>> “Hello Word”

 

θα έχει το ίδιο αποτέλεσμα

 

2) Πρόσεξε την εξήγηση που δίνεις για την μεταβλητή. Γράφεις το εξής:

 

στις γλώσσες προγραμματισμού μεταβλητή είναι ένα μικρό κομμάτι μνήμης

ram η όπoια αποθηκεύει κάποια δεδομένα για να χρησιμοποιηθούν από το πρόγραμμα ... Μια μεταβλητή διακρίνεται σε ακαίραια , δεκαδική , αλφαριθμητική …

 

Στην python η μεταβλητή δεν είναι κομμάτι της μνήμης αλλά απλά ένα όνομα που δείχνει σε κάποιο κομμάτι της μνήμης.

 

Επίσης στο κομματάκι αυτό που μιλάς για μεταβλητές, πρέπει να τονίσεις το ότι μπορούμε να αλλάξουμε το object στο οποίο κάνει point χωρίς περιορισμό όσον αφορά το type, μια ιδιότητα που χαρακτηρίζει τη python σαν dynamic language.

 

3) Νομίζω οτι η παραβολή των τελεστών δεν πρέπει να είναι στο σημείο που τους τοποθετείς. Χρειάζονται δικό τους κεφάλαιο.

 

4) Εκεί που εξηγείς πως κάνουμε access ένα χαρακτήρα η ένα substring από ένα string, νομίζω πρέπει να μιλήσεις πρώτα για τα lists για να καταλάβει ο αναγνώστης την λογική πίσω από a[1:], a[:4] a[:] κλπ

 

5) Εκεί που γράφεις

 

Εκτύπωση είδικά διαμορφωμένου μυνήματος ανάλογα με τιμή μιας μεταβλητής

 

print “my name is ”,a,” and I am “, b , “years old”

 

ίσως είναι καλύτερα να εισαγάγεις τον αναγνώστη στο πιο pythonic:

 

print “my name is {0} and I am {1} years old”.format(my_name, my_age)

 

Επίσης να εξηγήσεις την διαφορά των δυο statements

 

 

6) Νομίζω οτι οσον αφορά τα function πρέπει να επεκταθείς περισότερο. Εξήγησε τα παρακάτω:

 

def func(*args)

def func(**args)

func(name='john')

 

κλπ

 

7) Στο κεφάλαιο για OOP, εξήσησε ότι η python διαφέρει από C++ / C# / Java στο ότι και οι functions είναι objects. Επίσης οτι μια class μπορεί να συμπεριφερθει σαν function ( overloading __call__).

Δώσε εμφαση στο οτι δεν ειναι αναγκη να κανουμε declare ολα τα member attributes στον constructor αλλα μπορουμε σε οποιδηποτε σημειο να τα ορισουμε / διαγραψουμε

 

8) Εξήγησε τι κάνουν οι getattr settattr, MethodType, type

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@DeltaLOver δεν ειναι μονο για την Python αυτο που λες για τις μεταβλητές. Ετσι οριζεται γενικα μια μεταβλητη στον Προγραμματισμο.Μια τοποθεσία μνήμης που έχει ενα συμβολικο ονομα μεσω του οποίου αναφέρεσαι στην τιμή που υπάρχει αποθηκευμένη.

 

Και στην C τον ιδιο ορισμο έχουμε δεν ειναι δηλαδη θέμα γλώσσας πως οριζει τις μεταβλητές. Και στην C++ το ιδιο. Επισης δεν μπορει να γράψει οτι η μεταβλητη ειναι ενα μικρο κομματι μνήμης ..... και οι πίνακες μεταβλητές ειναι αλλα μπορει να έχεις εναν πινακα 3 στοιχειων και έναν πινακα 1000.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν θέλεις μπορείς να δεις πως έχουν χειριστεί το θέμα και άλλες αντίστοιχες προσπάθειες όπως πχ του myle από το taspython (source code σε LaTeX) ή η μετάφραση που είχαν κάνει στο ubuntu.gr του a byte of python

http://wiki.ubuntu-gr.org/byte-of-python-el

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@DeltaLOver δεν ειναι μονο για την Python αυτο που λες για τις μεταβλητές. Ετσι οριζεται γενικα μια μεταβλητη στον Προγραμματισμο.Μια τοποθεσία μνήμης που έχει ενα συμβολικο ονομα μεσω του οποίου αναφέρεσαι στην τιμή που υπάρχει αποθηκευμένη.

 

Και στην C τον ιδιο ορισμο έχουμε δεν ειναι δηλαδη θέμα γλώσσας πως οριζει τις μεταβλητές. Και στην C++ το ιδιο. Επισης δεν μπορει να γράψει οτι η μεταβλητη ειναι ενα μικρο κομματι μνήμης ..... και οι πίνακες μεταβλητές ειναι αλλα μπορει να έχεις εναν πινακα 3 στοιχειων και έναν πινακα 1000.

 

Δεν ειναι το ιδιο.

 

Σε γλωσσες οπως C, C++, Java κλπ. μια μεταβλητη αντιπροσωπευει ενα memory location..

 

Οταν δηλαδη κανεις:

 

int i = 9;

 

και μετα:

 

int j = i;

 

εχεις δυο τελειως ξεχωριστες μεταβλητες, την i και j

 

Στην Python ειναι διαφορετικο.

 

Στην πραγματικοτητα η Python ΔΕΝ ΕΧΕΙ ΜΕΤΑΒΛΗΤΕΣ. Εχει ονοματα τα οποια δειχνουν σε καποιο object

 

δηλαδη μπορεις να κανεις:

 

i = 9

i = type(A, (object,), {})

i = 'test'

 

χωρις exceptions. Δηλαδη το ονομα i δειχνει αρχικα σε εναν integer, μετα σε ενα object με type Α και μετα σε ενα string. Καταλαβαινεις λοιπον οτι το ι δεν ειναι μεταβλητη.

 

Επισης αν κανεις :

 

i = 9

j = i

 

εχεις μονο μια 'μεταβλητη' (δηλαδη ενα object) η οποια εχει δυο ονοματα.   Αν μετα συνεχισεις και κανεις

 

i = 9

j = i

j =10

 

τωρα το i ειναι ακομα 9 ενω το j ειναι 10, τωρα λοπον εχεις δυο objects, αν τωρα κανεις

 

i='test'

παλι εχεις δυο objects αφου αυτο που αρχικα περιειχε το integere 9 παει out of scope ....

 

 

Αυτη ειναι θεμελιωδης διαφορα μεταξυ static και dynamic programming.

 

Δες και εδω:

 

http://www.cse.msu.edu/~hoffm386/

 

 

Variables are different.

In C++, variables are memory locations with names. Declaring a variable puts a name to that memory location and associates a type with that memory location.

        int x, y;        x = 7;        y = x;    

In Python the expression y = x gives two names (x and y) to the same object, but in C++ that same expression copies the value of x into the location named by y.

This difference can be illustrated as follows. In this example, we can see how two names for the same object allow changing the value using one name to be observed when displaying the other.

In Python we can name a list A and then also name it B. The 'is' operator shows that A and B name the same object. When you modify B by changing the first element in the list, that change is reflected when you display A:

        >>> A = [2,3]        >>> B = A        >>> B is A        True        >>> B[0]=100        >>> A        [100, 3]    

Illustrating something similar in C++ takes a bit more. In this case, we will use the C++ array which is has some similarity to a Python list except that an array's length is fixed -- it cannot change. In C++ it is not possible to assign one array to another. Instead, you have to loop through the arrays assigning one element at a time. The same is true for output.

        int main()        {            int A[2] = {2,3};  // declare array A of length 2 and assign its elements to have values 2 and 3            int B[2];          // declare array B of length 2, but don't assign its elements (yet)            for (int i = 0; i < 2; i++)  // loop through both arrays A and B assigning to each element                B[i] = A[i];             //        of B the corresponding value of A                B[0]= 100;   // change the first element of B            for (int i = 0; i < 2; i++)  // loop through A and B printing out each element            cout << "A,B: " << A[i] << ", " << B[i]; // output would look like: A,B: 2,100 A,B: 3,3        }    

In the case of C++, the values of A are not changed when B is changed.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δηλαδη σε χαμηλοτερο επιπεδο ο υπολογιστης δεν δεσμεύει μνήμη για το i που λες εσυ? Αυτη η μνήμη δεν έχει το i σαν identifier ?

Ασφαλως η Python κανει allocate μνημη για object σε καποιο σημειο οπως επισης και το ονομα i κανει refer σε αυτο το object.

 

Στην C / C++ ειναι ευκολο να κανουμε dereference μια variable, κυριως γιατι ακριβως η variable ειναι ενας ευκολος τροπος να εκφρασουμε ενα κομματι της μνημης στο οποιο ζει η μεταβλητη μας. Δεν ειναι καθολου το ιδιο οσον αφορα την Python οπου ειναι δυσκολο να κανεις κατι τετοιο (το κανουμε κυριως σε bindings με C modules) αλλα και περαν αυτου η ιδια ακριβως 'μεταβλητη' ειναι απολυτα πιθανον να γυρισει διαφορετικο pointer σε διαδοχικα calls πραγμα που δεν γινεται φυσικα σε statical environments (προσεξε μην μπερδευτεις με pointers ενω η τιμη ενος C ποιντερ, μπορει να αλλαξει, η address του ιδιου pointer παντα θα ειναι η ιδια)

 

Δες εδω:

 

http://stackoverflow.com/questions/15011674/is-it-possible-to-dereference-variable-ids-in-python

 

 

 Η διαφορα με C/C++/C# κλπ εχει να κανει με το οτι το i δεν ξερει τον τυπο του object στον οποιο κανει refer. Ως εκ τουτου τo binding ειναι φυσικα (πολυ) lazy, γινεται δηλαδη μονο σε run time και αυτος ειναι ο λογος που η python χαρακτηριζεται απο το λεγομενο Duck Typing. Επειδη ακριβως η 'μεταβλητη' ειναι στην πραγματικοτητα μονο ενα 'ονομά', μπορουμε ανα πασα στιγμη να ζητησουμε οτι functionality θελουμε απο ενα object, κατι που δεν γινεται σε static environments (εκτος φυσικα μεσω καποιου reflective mechanism οπως στην C# η object module οπως ειναι το IDispatch στο COM).  

 

Για να το καταλαβεις καλυτερα σκεψου αν η Python επιτρεπει l-values.  Πχ στην C++ μπορεις να κανεις overload το assignment operator, επιτρεπωντας σε ενα  variable να συμπεριφερθει σαν l-value, αυτο φυσικα δεν επιτρεπεται python.

Εδω μπορεις να διαβασεις λεπτομερειες πανω στο θεμα αυτο:

 

http://docs.python.org/2/reference/simple_stmts.html#grammar-token-assignment_stmt

 

 

 

 

 

 

 

 

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

A οκ. Ναι ενταξει σωστα τα εγραψες και πολυ καλα εκανες για την Python και τις μεταβλητες απλα εγω δεν εχω ασχοληθει με Python για να ξέρω πως χειριζεται τις μεταβλητές  :P

 

η τιμή ενος C pointer μπορει να αλλαξει απο την στιγμη που τον βάλεις να δειχνει σε άλλη τοποθεσια μνήμης

 

Το καταλαβαινω απο την στιγμη που δεν υπάρχει κάποιος τύπος δεδομένων και έτσι κάποια δήλωση μεταβλητής στην Python. ;)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...