Μαθήματα Python - Μετάφραση Διδασκόμενης Ύλης

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

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

Κανόνες Δ. Συζήτησης
Ενημερώστε και την ελληνική κοινότητα του GNOME για σφάλματα που δεν αφορούν μόνο το Ubuntu.
https://www.gnome.gr/contribute/

Re: Μαθήματα Python - Μετάφραση Διδασκόμενης Ύλης

Δημοσίευσηαπό DarkLord » 23 Μάιος 2009, 13:21

definition = λειτουργία
η οποία είναι αποθηκευμένη
DarkLord
babeTUX
babeTUX
 
Δημοσιεύσεις: 81
Εγγραφή: 24 Ιαν 2009, 15:26
Τοποθεσία: Karvasaras
Εκτύπωση

Re: Μαθήματα Python - Μετάφραση Διδασκόμενης Ύλης

Δημοσίευσηαπό dimosfire » 23 Μάιος 2009, 17:16

Ευχαριστώ logari81 για τις διορθώσεις και την παρατηρηση .Οπως καταλαβαινεις ειμαι εντελως αρχάριος.
ubuntu 9.10 (AMD64),Innovator desktop, motherboard MSI K8N NEO4-F,cpu AMD ATHLON64 3500+ 2.20GHz,ram 1GHz, καρτα γραφ.GIGABYTE GEFORCE 6600 256MB,καρτα τηλεορ.κ radio FM PROLINK PIXELVIEW PLAYTV PRO/ΑΓΓΛΙΚΑ-ΚΑΛΑ/ΓΝΩΣΕΙΣ ΠΡΟΓΡ.-ΚΑΘΟΛΟΥ.
dimosfire
babeTUX
babeTUX
 
Δημοσιεύσεις: 141
Εγγραφή: 02 Φεβ 2009, 11:07
Τοποθεσία: ΠΑΤΡΑ
Εκτύπωση

Re: Μαθήματα Python - Μετάφραση Διδασκόμενης Ύλης

Δημοσίευσηαπό atermon » 23 Μάιος 2009, 17:18

Ένα χρήσιμο λεξικό online.

Όσοι αναλάβουν μεταφράσεις, προτείνω να αποθηκεύσουν τοπικά το κείμενο με τη μορφοποίηση wiki από τη σελίδα του βιβλίου (μεταβείτε στο κεφάλαιο προς μετάφραση, επιλέξτε Edit και copy-paste το περιεχόμενο. Ξεκινήστε τη μετάφραση χωρίς να πειράξετε τις ετικέτες μορφοποίησης. Έτσι θα ελαχιστοποιήσουμε το χρόνο ολοκλήρωσης της μετάφρασης και θα διευκολύνουμε τη δουλειά του Μάριου.

Παράδειγμα:

Pytho en: Basics
Κώδικας: Επιλογή όλων
== Literal Constants ==

An example of a literal constant is a number like <tt>5</tt>, <tt>1.23</tt>, <tt>9.25e-3</tt> or a string like <tt>'This is a string'</tt> or <tt>"It's a string!"</tt>. It is called a literal because it is ''literal'' - you use its value literally. The number <tt>2</tt> always represents itself and nothing else - it is a ''constant'' because its value cannot be changed. Hence, all these are referred to as literal constants.

Pytho el: Τα Βασικά
Κώδικας: Επιλογή όλων
Ένα παράδειγμα κυριολεκτικής σταθεράς είναι ένας αριθμός όπως <tt>5</tt>, <tt>1.23</tt>, <tt>9.25e-3</tt> ή μια στοιχειοσειρά όπως <tt>'Αυτή είναι μια στοιχειοσειρά'</tt> ή <tt>"Μια στοιχειοσειρά!"</tt>. Αποκαλείται κυριολεκτική διότι ''κυριολεκτεί'' - η τιμή της ορίζεται κυριολεκτικά. Ο αριθμός <tt>2</tt> αναπαριστά τον εαυτό του και τίποτα άλλο  - είναι ''σταθερά'' διότι η τιμή της δεν μπορεί να αλλάξει. Άρα, όλα αυτά αναφέρονται ως κυριολεκτικές σταθερές.
<Οδηγίες προς νεοεισερχόμενους> | <Οδηγοί χρήσης>
DEBIAN "Sid" 32bit σε Sony VAIO VGN-FE11S
Intel T2400(1,83 GHz) │ 2GB DDR2 │ NVIDIA GeForce Go 7400 │Intel 3945ABG │Intel 82801G(ICH7 Family) │ TFT 15.4" WXGA
Άβαταρ μέλους
atermon
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 711
Εγγραφή: 13 Μάιος 2008, 20:31
Εκτύπωση

Re: Μαθήματα Python - Μετάφραση Διδασκόμενης Ύλης

Δημοσίευσηαπό Μάριος Ζηντίλης » 23 Μάιος 2009, 18:50

Σχετικά με την αναφορά σε παρένθεση της Αγγλικής ορολογίας που πρότεινε ο Ηλίας, σε αντίστοιχα βιβλία η τακτική που χρησιμοποιείται είναι να περιμβάνεται ο αγγλικός όρος σε παρένθεση δίπλα στον ελληνικό την πρώτη φορά που συναντάται στο κείμενο. Πιστεύω είναι καλή μέθοδος και σε συνδυασμό με το γλωσσάρι θα βοηθήσουν στην κατανόηση των κειμένων.
Άβαταρ μέλους
Μάριος Ζηντίλης
punkTUX
punkTUX
 
Δημοσιεύσεις: 220
Εγγραφή: 25 Σεπ 2008, 11:16
Εκτύπωση

Re: Μαθήματα Python - Μετάφραση Διδασκόμενης Ύλης

Δημοσίευσηαπό dimosfire » 23 Μάιος 2009, 19:06

Φαινεται κατανοητό αυτο που αναφέρεις για να ανεβάσουμε την μεταφραση αν υπάρχει όμως δυσκολία θα σε ενοχλήσω πάλι γιατι δεν το εχω κανει πάλι.Ευχαριστώ
ubuntu 9.10 (AMD64),Innovator desktop, motherboard MSI K8N NEO4-F,cpu AMD ATHLON64 3500+ 2.20GHz,ram 1GHz, καρτα γραφ.GIGABYTE GEFORCE 6600 256MB,καρτα τηλεορ.κ radio FM PROLINK PIXELVIEW PLAYTV PRO/ΑΓΓΛΙΚΑ-ΚΑΛΑ/ΓΝΩΣΕΙΣ ΠΡΟΓΡ.-ΚΑΘΟΛΟΥ.
dimosfire
babeTUX
babeTUX
 
Δημοσιεύσεις: 141
Εγγραφή: 02 Φεβ 2009, 11:07
Τοποθεσία: ΠΑΤΡΑ
Εκτύπωση

Re: Μαθήματα Python - Μετάφραση Διδασκόμενης Ύλης

Δημοσίευσηαπό simosx » 24 Μάιος 2009, 02:31

logari81 έγραψε:@dimosfire

Κάποια βασικά στοιχεια:
Function -- Συναρτηση
(Declaration -- Ορισμος) <-- ισως καλύτερα "Δήλωση" όπως ειπε ο cyberpython παρακάτω
Arguments -- Ορίσματα

και μια παρατήρηση: μπορεις σε ορισμενες περιπτωσεις να χρησιμοποιείς και την λέξη "τμημα" αντί για τις λέξεις "μερος" ή "κομμάτι"


Declaration: Δήλωση (do you have something to declare;).
Στην Python όμως υπάρχουν δηλώσεις;

Definition: Ορισμός.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Μαθήματα Python - Μετάφραση Διδασκόμενης Ύλης

Δημοσίευσηαπό Μάριος Ζηντίλης » 24 Μάιος 2009, 08:03

Μεταφραστές: στα Αγγλικά είναι σωστό, αλλά στα Ελληνικά δεν είναι, να γράφουμε συνεχόμενες λέξεις με κεφαλαίο το πρώτο γράμμα. Για παράδειγμα:

Μαθήματα Προγραμματισμού - Μετάφραση Διδασκόμενης Ύλης :P

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

Αμήν :)
Άβαταρ μέλους
Μάριος Ζηντίλης
punkTUX
punkTUX
 
Δημοσιεύσεις: 220
Εγγραφή: 25 Σεπ 2008, 11:16
Εκτύπωση

Re: Μαθήματα Python - Μετάφραση Διδασκόμενης Ύλης

Δημοσίευσηαπό greatst » 24 Μάιος 2009, 17:37

Μάριος Ζηντίλης έγραψε:Μεταφραστές: στα Αγγλικά είναι σωστό, αλλά στα Ελληνικά δεν είναι, να γράφουμε συνεχόμενες λέξεις με κεφαλαίο το πρώτο γράμμα. Για παράδειγμα:

Μαθήματα Προγραμματισμού - Μετάφραση Διδασκόμενης Ύλης :P

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

Αμήν :)


Άλλο το τι προτιμούμε, το τι προτείνουμε, το τι έχει άτυπα/ανεπίσημα καθιερωθεί, κλπ, και άλλο το τι είναι σωστό και λάθος! Το να γράψουμε κάτι όπως τον τίτλο ενός βιβλίου/άρθρου/κλπ με τον ένα ή τον άλλο τρόπο ΔΕΝ είναι ΟΥΤΕ σωστό, ΟΥΤΕ λάθος! Οπότε προφανώς ΔΕΝ είναι και κανόνας που υπάρχει λόγος να "τον κρατήσουμε και εδώ, και στην υπόλοιπη ζωή μας, εις τον αιώνα, των αιώνων" (sic).
προσωπική ιστοσελίδαgreatst in Launchpad

Γνώσεις ⇛ Linux: Όσο ζω μαθαίνω ┃ Προγραμματισμός: Μια χαρά ┃ Αγγλικά: Εξαιρετικά

Mac mini (late 2009) (8GB RAM) με OS X 10.11.6 [και Ubuntu 16.04 Server amd64 και άλλες GNU/Linux εικονικές μηχανές με 2GB RAM, 128MB VRAM+3D_acceleration η κάθε μία].
Άβαταρ μέλους
greatst
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 639
Εγγραφή: 14 Δεκ 2008, 00:41
Τοποθεσία: Κατερίνη
Launchpad: greatst
IRC: greatst
Εκτύπωση

Re: Μαθήματα Python - Μετάφραση Διδασκόμενης Ύλης

Δημοσίευσηαπό simosx » 24 Μάιος 2009, 18:32

greatst έγραψε:
Μάριος Ζηντίλης έγραψε:Μεταφραστές: στα Αγγλικά είναι σωστό, αλλά στα Ελληνικά δεν είναι, να γράφουμε συνεχόμενες λέξεις με κεφαλαίο το πρώτο γράμμα. Για παράδειγμα:

Μαθήματα Προγραμματισμού - Μετάφραση Διδασκόμενης Ύλης :P

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

Αμήν :)


Άλλο το τι προτιμούμε, το τι προτείνουμε, το τι έχει άτυπα/ανεπίσημα καθιερωθεί, κλπ, και άλλο το τι είναι σωστό και λάθος! Το να γράψουμε κάτι όπως τον τίτλο ενός βιβλίου/άρθρου/κλπ με τον ένα ή τον άλλο τρόπο ΔΕΝ είναι ΟΥΤΕ σωστό, ΟΥΤΕ λάθος! Οπότε προφανώς ΔΕΝ είναι και κανόνας που υπάρχει λόγος να "τον κρατήσουμε και εδώ, και στην υπόλοιπη ζωή μας, εις τον αιώνα, των αιώνων" (sic).


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

Έτσι,
Μαθήματα προγραμματισμού - Μετάφραση διδασκόμενης ύλης
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Μαθήματα Python - Μετάφραση Διδασκόμενης Ύλης

Δημοσίευσηαπό dimosfire » 25 Μάιος 2009, 15:50

Υποβάλλω το κεφάλαιο 9 για τις παρατηρήσεις σας.
Κώδικας: Επιλογή όλων
Python en:Functions
Introduction
Functions are reusable pieces of programs. They allow you to give a name to a block of
statements and you can run that block using that name anywhere in your program and any
number of times. This is known as calling the function. We have already used many built-in
functions such as the len and range.
The function concept is probably the most important building block of any non-trivial
software (in any programming language), so we will explore various aspects of functions in
this chapter.
Functions are defined using the def keyword. This is followed by an identifier name for the
function followed by a pair of parentheses which may enclose some names of variables and
the line ends with a colon. Next follows the block of statements that are part of this
function. An example will show that this is actually very simple:
Example:
#!/usr/bin/python
# Filename: function1.py
def sayHello():
print('Hello World!') # block belonging to the function
# End of function
Python en:Functions 45
sayHello() # call the function
sayHello() # call the function again
Output:
$ python function1.py
Hello World!
Hello World!
How It Works:
We define a function called sayHello using the syntax as explained above. This function
takes no parameters and hence there are no variables declared in the parentheses.
Parameters to functions are just input to the function so that we can pass in different values
to it and get back corresponding results.
Notice that we can call the same function twice which means we do not have to write the
same code again.
Function Parameters
A function can take parameters, which are values you supply to the function so that the
function can do something utilising those values. These parameters are just like variables
except that the values of these variables are defined when we call the function and are
already assigned values when the function runs.
Parameters are specified within the pair of parentheses in the function definition, separated
by commas. When we call the function, we supply the values in the same way. Note the
terminology used - the names given in the function definition are called parameters
whereas the values you supply in the function call are called arguments.
Example:
#!/usr/bin/python
# Filename: func_param.py
def printMax(a, b):
if a > b:
print(a, 'is maximum')
elif a == b:
print(a, 'is equal to', b)
else:
print(b, 'is maximum')
printMax(3, 4) # directly give literal values
x = 5
y = 7
printMax(x, y) # give variables as arguments
Output:
Python en:Functions 46
$ python func_param.py
4 is maximum
7 is maximum
How It Works:
Here, we define a function called printMax where we take two parameters called a and b.
We find out the greater number using a simple if..else statement and then print the
bigger number.
In the first usage of printMax, we directly supply the numbers i.e. arguments. In the second
usage, we call the function using variables. printMax(x, y) causes value of argument x to
be assigned to parameter a and the value of argument y assigned to parameter b. The
printMax function works the same in both the cases.
Local Variables
When you declare variables inside a function definition, they are not related in any way to
other variables with the same names used outside the function i.e. variable names are local
to the function. This is called the scope of the variable. All variables have the scope of the
block they are declared in starting from the point of definition of the name.
Example:
#!/usr/bin/python
# Filename: func_local.py
x = 50
def func(x):
print('x is', x)
x = 2
print('Changed local x to', x)
func(x)
print('x is still', x)
Output:
$ python func_local.py
x is 50
Changed local x to 2
x is still 50
How It Works:
In the function, the first time that we use the value of the name x, Python uses the value of
the parameter declared in the function.
Next, we assign the value 2 to x. The name x is local to our function. So, when we change
the value of x in the function, the x defined in the main block remains unaffected.
In the last print function call, we display the value of x in the main block and confirm that
it is actually unaffected.
Python en:Functions 47
Using The global Statement
If you want to assign a value to a name defined at the top level of the program (i.e. not
inside any kind of scope such as functions or classes), then you have to tell Python that the
name is not local, but it is global. We do this using the global statement. It is impossible to
assign a value to a variable defined outside a function without the global statement.
You can use the values of such variables defined outside the function (assuming there is no
variable with the same name within the function). However, this is not encouraged and
should be avoided since it becomes unclear to the reader of the program as to where that
variable's definition is. Using the global statement makes it amply clear that the variable
is defined in an outermost block.
Example:
#!/usr/bin/python
# Filename: func_global.py
x = 50
def func():
global x
print('x is', x)
x = 2
print('Changed global x to', x)
func()
print('Value of x is', x)
Output:
$ python func_global.py
x is 50
Changed global x to 2
Value of x is 2
How It Works:
The global statement is used to declare that x is a global variable - hence, when we assign
a value to x inside the function, that change is reflected when we use the value of x in the
main block.
You can specify more than one global variable using the same global statement. For
example, global x, y, z.
Python en:Functions 48
Using nonlocal statement
We have seen how to access variables in the local and global scope above. There is another
kind of scope called "nonlocal" scope which is in-between these two types of scopes.
Nonlocal scopes are observed when you define functions inside functions.
Since everything in Python is just executable code, you can define functions anywhere.
Let's take an example:
#!/usr/bin/python
# Filename: func_nonlocal.py
def func_outer():
x = 2
print('x is', x)
def func_inner():
nonlocal x
x = 5
func_inner()
print('Changed local x to', x)
func_outer()
Output:
$ python func_nonlocal.py
x is 2
Changed local x to 5
How It Works:
When we are inside func_inner, the 'x' defined in the first line of func_outer is relatively
neither in local scope nor in global scope. We declare that we are using this x by nonlocal
x and hence we get access to that variable.
Try changing the nonlocal x to global x and also by removing the statement itself and
observe the difference in behavior in these two cases.
Default Argument Values
For some functions, you may want to make some of its parameters as optional and use
default values if the user does not want to provide values for such parameters. This is done
with the help of default argument values. You can specify default argument values for
parameters by following the parameter name in the function definition with the assignment
operator (=) followed by the default value.
Note that the default argument value should be a constant. More precisely, the default
argument value should be immutable - this is explained in detail in later chapters. For now,
just remember this.
Example:
Python en:Functions 49
#!/usr/bin/python
# Filename: func_default.py
def say(message, times = 1):
print(message * times)
say('Hello')
say('World', 5)
Output:
$ python func_default.py
Hello
WorldWorldWorldWorldWorld
How It Works:
The function named say is used to print a string as many times as specified. If we don't
supply a value, then by default, the string is printed just once. We achieve this by specifying
a default argument value of 1 to the parameter times.
In the first usage of say, we supply only the string and it prints the string once. In the
second usage of say, we supply both the string and an argument 5 stating that we want to
say the string message 5 times.
Important
Only those parameters which are at the end of the parameter list can be given default
argument values i.e. you cannot have a parameter with a default argument value
before a parameter without a default argument value in the order of parameters
declared in the function parameter list.
This is because the values are assigned to the parameters by position. For example,
def func(a, b=5) is valid, but def func(a=5, b) is not valid.
Keyword Arguments
If you have some functions with many parameters and you want to specify only some of
them, then you can give values for such parameters by naming them - this is called keyword
arguments - we use the name (keyword) instead of the position (which we have been using
all along) to specify the arguments to the function.
There are two advantages - one, using the function is easier since we do not need to worry
about the order of the arguments. Two, we can give values to only those parameters which
we want, provided that the other parameters have default argument values.
Example:
#!/usr/bin/python
# Filename: func_key.py
def func(a, b=5, c=10):
print('a is', a, 'and b is', b, 'and c is', c)
func(3, 7)
Python en:Functions 50
func(25, c=24)
func(c=50, a=100)
Output:
$ python func_key.py
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50
How It Works:
The function named func has one parameter without default argument values, followed by
two parameters with default argument values.
In the first usage, func(3, 7), the parameter a gets the value 3, the parameter b gets the
value 7 and c gets the default value of 10.
In the second usage func(25, c=24), the variable a gets the value of 25 due to the position
of the argument. Then, the parameter c gets the value of 24 due to naming i.e. keyword
arguments. The variable b gets the default value of 5.
In the third usage func(c=50, a=100), we use keyword arguments completely to specify
the values. Notice, that we are specifying value for parameter c before that for a even
though a is defined before c in the function definition.
VarArgs parameters
TODO
Should I write about this in a later chapter since we haven't talked about lists and
dictionaries yet?
Sometimes you might want to define a function that can take any number of parameters,
this can be achieved by using the stars:
#!/usr/bin/python
# Filename: total.py
def total(initial=5, *numbers, **keywords):
count = initial
for number in numbers:
count += number
for key in keywords:
count += keywords[key]
return count
print(total(10, 1, 2, 3, vegetables=50, fruits=100))
Output:
$ python total.py
166
How It Works:
Python en:Functions 51
When we declare a starred parameter such as *param, then all the positional arguments
from that point till the end are collected as a list called 'param'.
Similarly, when we declare a double-starred parameter such as **param, then all the
keyword arguments from that point till the end are collected as a dictionary called 'param'.
We will explore lists and dictionaries in a later chapter.
Keyword- only Parameters
If we want to specify certain keyword parameters to be available as keyword-only and not
as positional arguments, they can be declared after a starred parameter:
#!/usr/bin/python
# Filename: keyword_only.py
def total(initial=5, *numbers, vegetables):
count = initial
for number in numbers:
count += number
count += vegetables
return count
print(total(10, 1, 2, 3, vegetables=50))
print(total(10, 1, 2, 3))
# Raises error because we have not supplied a default argument value
for 'vegetables'
Output:
$ python keyword_only.py
66
Traceback (most recent call last):
File "test.py", line 12, in <module>
print(total(10, 1, 2, 3))
TypeError: total() needs keyword-only argument vegetables
How It Works:
Declaring parameters after a starred parameter results in keyword-only arguments. If these
arguments are not supplied a default value, then calls to the function will raise an error if
the keyword argument is not supplied, as seen above.
If you want to have keyword-only arguments but have no need for a starred parameter, then
simply use an empty star without using any name such as def total(initial=5, *,
vegetables).
Python en:Functions 52
The return Statement
The return statement is used to return from a function i.e. break out of the function. We
can optionally return a value from the function as well.
Example:
#!/usr/bin/python
# Filename: func_return.py
def maximum(x, y):
if x > y:
return x
else:
return y
print(maximum(2, 3))
Output:
$ python func_return.py
3
How It Works:
The maximum function returns the maximum of the parameters, in this case the numbers
supplied to the function. It uses a simple if..else statement to find the greater value and
then returns that value.
Note that a return statement without a value is equivalent to return None. None is a
special type in Python that represents nothingness. For example, it is used to indicate that a
variable has no value if it has a value of None.
Every function implicitly contains a return None statement at the end unless you have
written your own return statement. You can see this by running print(someFunction())
where the function someFunction does not use the return statement such as:
def someFunction():
pass
The pass statement is used in Python to indicate an empty block of statements.
Note
There is a built-in function called max that already implements the 'find maximum'
functionality, so use this built-in function whenever possible.
Python en:Functions 53
DocStrings
Python has a nifty feature called documentation strings, usually referred to by its shorter
name docstrings. DocStrings are an important tool that you should make use of since it
helps to document the program better and makes it easier to understand. Amazingly, we
can even get the docstring back from, say a function, when the program is actually running!
Example:
#!/usr/bin/python
# Filename: func_doc.py
def printMax(x, y):
'''Prints the maximum of two numbers.
The two values must be integers.'''
x = int(x) # convert to integers, if possible
y = int(y)
if x > y:
print(x, 'is maximum')
else:
print(y, 'is maximum')
printMax(3, 5)
print(printMax.__doc__)
Output:
$ python func_doc.py
5 is maximum
Prints the maximum of two numbers.
The two values must be integers.
How It Works:
A string on the first logical line of a function is the docstring for that function. Note that
DocStrings also apply to modules and classes which we will learn about in the respective
chapters.
The convention followed for a docstring is a multi-line string where the first line starts with
a capital letter and ends with a dot. Then the second line is blank followed by any detailed
explanation starting from the third line. You are strongly advised to follow this convention
for all your docstrings for all your non-trivial functions.
We can access the docstring of the printMax function using the __doc__ (notice the
double underscores) attribute (name belonging to) of the function. Just remember that
Python treats everything as an object and this includes functions. We'll learn more about
objects in the chapter on classes.
If you have used help() in Python, then you have already seen the usage of docstrings!
What it does is just fetch the __doc__ attribute of that function and displays it in a neat
manner for you. You can try it out on the function above - just include help(printMax) in
Python en:Functions 54
your program. Remember to press the q key to exit help.
Automated tools can retrieve the documentation from your program in this manner.
Therefore, I strongly recommend that you use docstrings for any non-trivial function that
you write. The pydoc command that comes with your Python distribution works similarly to
help() using docstrings.
Annotations
Functions have another advanced feature called annotations which are a nifty way of
attaching additional information for each of the parameters as well as the return value.
Since the Python language itself does not interpret these annotations in any way (that
functionality is left to third-party libraries to interpret in any way they want), we will skip
this feature in our discussion. If you are interested to read about annotations, please see
the Python Enhancement Proposal No. 3107 (http:/ / www. python. org/ dev/ peps/
pep-3107/ ).
Summary
We have seen so many aspects of functions but note that we still haven't covered all aspects
of it. However, we have already covered most of what you'll use regarding Python functions
on an everyday basis.
Next, we will see how to use as well as create Python modules.
Previous Next
Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? oldid=2379
Contributors: Swaroop, Vages, 7 anonymous edits

και τη μεταφρασή του
Κώδικας: Επιλογή όλων
ΣΥΝΑΡΤΗΣΕΙΣ(FUNCTIONS)

ΕΙΣΑΓΩΓΗ
Οι “ΣΥΝΑΡΤΗΣΕΙΣ”  είναι επαναχρησιμοποιήσιμα μέρη προγραμμάτων.Σου δίνουν τη δυνατότητα να δίνεις ένα όνομα σε ένα τμήμα εντολών ,έτσι ώστε να τρέχεις αυτό το τμήμα οπουδήποτε στο πρόγραμμά σου και όσες φορές θέλεις,χρησιμοποιώντας αυτό το όνομα.Αυτό είναι γνωστό σαν “κλήση” (calling) της συνάρτησης.Εχουμε ήδη χρησιμοποιήσει πολλές ενσωματωμένες συναρτήσεις όπως τη len και τη  range.Η έννοια της συνάρτησης είναι πιθανόν το πιο σπουδαίο ενσωματωμένο μέρος,από κάθε άλλο μη τετριμμένο λειτουργικό (σε όλες τις γλώσσες προγραμματισμού),γι αυτό θα διερευνήσουμε διάφορες πτυχές των συναρτήσεων  σε αυτό το κεφάλαιο.
Οι συναρτήσεις ορίζονται χρησιμοποιώντας τη λέξη κλειδί def , μετά την οποία ακολουθεί ένα όνομα που ταυτοποιεί την εκάστοτε συνάρτηση και κατόπιν ακολουθεί ένα ζευγάρι παρενθέσεων που μπορούν να περικλείουν ονόματα μεταβλητών και η γραμμή τελειώνει με άνω-κατω τελείες.
Παρακάτω υπάρχει ένα απλό παράδειγμα με ένα τμήμα εντολών που αποτελούν μέρος της συνάρτησης με το όνομα say Hello:
#!/usr/bin/python
# Filename: function1.py
def sayHello( ):
print('Hello World!')#τμήμα εντολών που ανήκει στη λειτουργία say Hello

# Tέλος της λειτουργίας
sayHello( ) # καλείς τη λειτουργία
sayHello( ) # καλείς τη λειτουργία πάλι

Αποτέλεσμα:

$ python function1.py
Hello World!
Hello World!

Επεξήγηση:
Oρίζουμε μια συνάρτηση με το όνομα sayHello ακολουθώντας τη σύνταξη όπως εξηγήσαμε παραπάνω.Αυτή η συνάρτηση δεν έχει παραμέτρους γι αυτό δεν έχει καθόλου μεταβλητές ανάμεσα στις παρενθέσεις.Οι παράμετροι στη συνάρτηση είναι μόνο εισαγωγή στη συνάρτηση έτσι ώστε να θέτεις διαφορετικές τιμές στη συνάρτηση και να παίρνεις αντίστοιχα αποτελέσματα.
ΣΗΜΕΙΩΣΗ:Μπορείς να καλείς την ιδια συνάρτηση δύο φορές δηλ. δεν χρειάζεται να γράφεις  κώδικα δύο φορές.


ΠΑΡΑΜΕΤΡΟΙ ΣΥΝΑΡΤΗΣΕΩΝ(FUNCTION PARAMETRES)
Μια συνάρτηση μπορεί να δεχθεί παραμέτρους,οι οποίες είναι τιμές που δίνεις στη συνάρτηση ,έτσι ώστε αυτή να μπορεί να ενεργήσει αξιοποιώντας αυτές τις τιμές.Αυτές οι παράμετροι μοιάζουν με τις μεταβλητές,διαφέροντας ως προς το ότι οι τιμές αυτών των μεταβλητών ορίζονται όταν καλούμε τη συνάρτηση και είναι ήδη ορισμένες όταν τρέχει η συνάρτηση.
Οι παράμετροι καθορίζονται μέσα στο ζευγάρι των παρενθέσεων στον ορισμό της συνάρτησης και διαχωρίζονται με κόμμα.Οταν καλούμε τη συνάρτηση δίνουμε και τις τιμές με τον ίδιο τρόπο.Σημείωση για την ορολογία που χρησιμοποιούμε: οι ονομασίες που δίνονται στον ορισμό της συνάρτησης ονομάζονται παράμετροι(parametres) ενώ αντίθετα οι τιμές που δίνεις όταν καλείς τη συνάρτηση ονομάζονται ορίσματα(arguments).



Παράδειγμα:
#!/usr/bin/python
# Filename: func_param.py
def printMax(a, b):
if a > b:
print(a, 'είναι το μέγιστο')
elif a == b:
print(a, 'είναι ίσο με το', b)
else:
print(b, 'είναι το μέγιστο')
printMax(3, 4) # απευθείας δώσε κυριολεκτικές τιμές
x = 5
y = 7
printMax(x, y) #δώσε μεταβλητές σαν ορίσματα


Αποτέλεσμα:
$ python func_param.py
4 είναι το μέγιστο
7 είναι το μέγιστο

Επεξήγηση:
Εδώ ορίζουμε μια συνάρτηση που ονομάζεται printMax με δυο παραμέτρους την a και b.Bρίσκουμε το μεγαλύτερο νούμερο χρησιμοποιώντας την απλή εντολή if...else και μετά print το μεγαλύτερο νούμερο.
Στην πρώτη χρήση της printMax ,απευθείας δίνουμε τα νούμερα δηλ. ορίσματα(arguments).Στην δεύτερη χρήση της ,καλούμε τη συνάρτηση χρησιμοποιώντας μεταβλητές.printMax(x,y) προκαλεί την τιμή του ορίσματος x να δοθεί στην παράμετρο a και η τιμή του ορίσματος y να δοθεί στην παράμετρο b.H συνάρτηση printMax λειτουργεί με τον ίδιο τρόπο και στις δυο περιπτώσεις.


ΤΟΠΙΚΕΣ ΜΕΤΑΒΛΗΤΕΣ(LOCAL VARIABLES)
Oταν ορίζεις μεταβλητές μέσα σε ένα ορισμό συνάρτησης ,αυτές δεν έχουν καμμία σχέση με άλλες μεταβλητές που έχουν την ίδια ονομασία και χρησιμοποιούνται έξω απο αυτή την συνάρτηση δηλ.τα ονόματα των μεταβλητών χρησιμοποιούνται μόνο τοπικά στη συνάρτηση.Αυτό ονομάζεται εμβέλεια(scope) των μεταβλητών.Ολες οι μεταβλητές έχουν την εμβέλεια  του τμήματος όπου έχουν δηλωθεί ,αρχίζοντας από το σημείο του ονόματος του ορίσματος.
Παράδειγμα:

#!/usr/bin/python
# Filename: func_local.py
x = 50
def func(x):
print('x είναι', x)
x = 2
print('Αλλαξε το τοπικό x σε', x)
func(x)
print('x είναι ακόμα', x)

Αποτέλεσμα:
$ python func_local.py
x είναι 50
Αλλαξε το τοπικό x σε  2
x είναι ακόμα 50

Επεξήγηση:
Στη συνάρτηση ,την πρώτη φορά που χρησιμοποιούμαι την τιμή  με το όνομα x, η Python χρησιμοποιεί την τιμή της παραμέτρου που έχει δηλωθεί στη συνάρτηση.Κατόπιν καθορίζουμε την τιμή 2 για το x .Η ονομασία x είναι τοπική στη συνάρτησή μας .Ετσι όταν αλλάζουμε την τιμή του x στη συνάρτηση,το x που ορίζεται στο κύριο τμήμα δεν επηρεάζεται.Στην τελευταία κλήση της συνάρτησης (print) παρουσιάζουμε την τιμή x στο κύριο τμήμα και επιβεβαιώνουμε ότι δεν έχει επηρεαστεί.


ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ THN ΚΑΘΟΛΙΚΗ ΕΝΤΟΛΗ(GLOBAL STATEMENT)
Εάν θέλεις να καθορίσεις μια τιμή σε ένα όνομα που ορίζεται στο κορυφαίο επίπεδο του προγράμματος (δηλ.όχι μέσα σε κάποιου είδους εμβέλεια όπως σε συναρτήσεις  ή τάξεις),τότε πρέπει να πεις στην Python ότι το όνομα δεν είναι τοπικό(local) αλλά καθολικό (global).Είναι αδύνατον να καθορίσεις μια τιμή σε μια μεταβλητή που ορίζεται εκτός μιας συνάρτησης χωρίς την καθολική εντολή(global statement).
Είναι δυνατόν να χρησιμοποιήσεις τις τιμές τέτοιων μεταβλητών που ορίζονται έξω από τη συνάρτηση (θεωρούμε ως δεδομένο ότι δεν υπάρχουν μεταβλητές με το ίδιο όνομα μέσα στη συνάρτηση).Πάντως δεν προτείνεται και πρέπει να αποφεύγεται μιας και δεν είναι ξεκάθαρο για τον αναγνώστη του προγράμματος για το που βρίσκεται ο ορισμός της μεταβλητής.Χρησιμοποιώντας την καθολική εντολή γίνεται ξεκάθαρο ότι η μεταβλητή βρίσκεται σε ένα μακρινό τμήμα εντολών.

Παράδειγμα:
#!/usr/bin/python
# Filename: func_global.py
x = 50
def func():
global x
print('x is', x)
x = 2
print('Aλλαξε το καθολικό x σε', x)
func()
print('Η τιμή του x είναι', x)

Αποτέλεσμα:
$ python func_global.py
x is 50
Aλλαξε το καθολικό x σε 2
Η τιμή του x είναι 2

Επεξήγηση:
Η καθολική εντολή χρησιμοποιείται για να δηλώσει ότι το x είναι μια καθολική μεταβλητή ,γι αυτό το λόγο όταν καθορίζουμε μια τιμή για το x μέσα στη συνάρτηση αυτή η αλλαγή απεικονίζεται όταν χρησιμοποιούμαι την τιμή του x στο κυρίως τμήμα.
Μπορείς να καθορίσεις περισσότερες από μία καθολικές μεταβλητές χρησιμοποιώντας την ίδια καθολική εντολή.Για παράδειγμα καθολικό x,y,z.


ΧΡΗΣΗ ΜΗ ΤΟΠΙΚΗΣ ΕΝΤΟΛΗΣ (NONLOCAL STATEMENT)
Eχουμε δει μέχρι τώρα πως να εισάγουμε μεταβλητές σε τοπική και καθολική εμβέλεια.Αλλά υπάρχει και ένα άλλο είδος εμβέλειας που ονομάζεται  μη τοπική εμβέλεια (nonlocal scope)  και είναι μεταξύ των δυο ανωτέρων τύπων.Αυτές παρατηρούνται όταν ορίζεις συναρτήσεις μέσα στις συναρτήσεις.Από τότε που όλα στη Python είναι εκτλέσιμος κώδικας ,μπορείς να ορίσεις συναρτήσεις οπουδήποτε.

Παράδειγμα:
#!/usr/bin/python
# Filename: func_nonlocal.py
def func_outer():
x = 2
print('x is', x)
def func_inner():
nonlocal x
x = 5
func_inner()
print('Αλλαξε το τοπικό x σε', x)
func_outer()

Αποτέλεσμα:
$ python func_nonlocal.py
x είναι 2
Αλλαξε το τοπικό x σε 5

Επεξήγηση:
Oταν είμαστε μέσα στην func_inner,το x που ορίζεται στην πρώτη γραμμή του func_outer είναι σχετικά είτε σε τοπική είτε σε καθολική εμβέλεια.Δηλώνουμε ότι χρησιμοποιούμε αυτό το x σε μη τοπικό x και έτσι αποκτούμε πρόσβαση σε αυτή τη μεταβλητή.Προσπάθησε αλλάζοντας το μη τοπικό x σε καθολικό x και μετακινώντας την ίδια την εντολή ,να παρατηρήσεις τη διαφορά στην συμπεριφορά σε αυτές τις δύο περιπτώσεις.




ΠΡΟΤΕΡΟΤΙΜΕΣ ΟΡΙΣΜΑΤΟΣ (DEFAULT ARGUMENT VALUES)
Σε κάποιες συναρτήσεις ίσως να θέλουμε να κάνουμε μερικές παραμέτρους τους προαιρετικές και να χρησιμοποιήσουμε προτεροτιμές εάν ο χρήστης δεν θέλει να δώσει τιμές σε τέτοιες παραμέτρους.Αυτό μπορεί να επιτευχθεί με τη βοήθεια της προτεροτιμής ορίσματος. Μπορούμε να καθορίσουμε προτεροτιμές ορίσματος για παραμέτρους ,ακολουθώντας το όνομα της παραμέτρου στον ορισμό της συνάρτησης με τον χειριστή εκχώρησης (=) να ακολουθείται απο την προτεροτιμή.Σημειώστε ότι η προτεροτιμή ορίσματος πρέπει να είναι μια σταθερά.Για την ακρίβεια η προτεροτιμή ορίσματος πρέπει να είναι αμετάβλητη(αυτό εξηγείται με λεπτομέρειες στα επόμενα κεφάλαια ,τώρα είναι αρκετό να θυμάστε αυτό.

Παράδειγμα:
#!/usr/bin/python
# Filename: func_default.py
def say(μήνυμα, φορές = 1):
print(μήνυμα * φορες)
say('Hello')
say('World', 5)

Αποτέλεσμα:
$ python func_default.py
Hello
WorldWorldWorldWorldWorld

Eπεξήγηση:
Η συνάρτηση με το όνομα say χρησιμοποιείται για να τυπώσει μια στοιχειοσειρά,τόσες φορές όσες έχει καθοριστεί.Εάν δεν έχει δοθεί τιμή ,τότε προτερότιμα η στοιχειοσειρά τυπώνεται μια φορά.Αυτό το πετυχαίνουμε καθορίζοντας το προτερότιμο όρισμα σε 1 στις φορές των παραμέτρων.Στην πρώτη χρήση της συνάρτησης say παρέχουμε μόνο τη στοιχειοσειρά και τυπώνει τη στοιχειοσειρά μόνο μια φορά.Στη δεύτερη χρήση της say παρέχουμε και τη στοιχειοσειρά και ένα όρισμα 5 δηλώνοντας έτσι ότι θέλουμε να πούμε(say)  το μήνυμα στοιχειοσειράς 5 φορές (times).
ΣΗΜΑΝΤΙΚΟ:
Μόνο σε εκείνες τις παραμέτρους ,οι οποίες βρίσκονται στο τέλος της λίστας παραμέτρων ,μπορούν να δοθούν προτεροτιμές ορίσματος δηλ.δεν μπορούμε να έχουμε μια παράμετρο με προτεροτιμή ορίσματος πριν η παράμετρος ,χωρίς την προτεροτιμή ορίσματος ,με τη σειρά των παραμέτρων δηλωθεί στη λίστα παραμέτρων της συνάρτησης.Αυτό συμβαίνει διότι οι τιμές στις παραμέτρους καθορίζονται με τη θέση τους.Για παράδειγμα η def func(a, b=5) ισχύει αλλά η def func(a=5, b) δεν ισχύει. 


ΟΡΙΣΜΑΤΑ ΜΕ ΛΕΞΕΙΣ -ΚΛΕΙΔΙΑ(KEYWORD ARGUMENTS)
Εάν έχουμε κάποιες συναρτήσεις με πολλές παραμέτρους και θέλουμε να καθορίσουμε με ακρίβεια μόνο μερικές από αυτές ,τότε μπορούμε να δώσουμε τιμές για τέτοιες παραμέτρους ονομάζοντας αυτές δηλ.χρησιμοποιούμε την ονομασία(keyword) αντί της θέσης τους(που έχουμε χρησιμοποιήσει σε όλα τα άλλα) για να καθορίσουμε τα ορίσματα στη συνάρτηση.
Ετσι έχουμε δύο πλεονεκτήματα, πρώτον η χρήση της συνάρτησης γίνεται ευκολότερη επειδή δεν χρειάζεται να ανησυχούμε για τη διάταξη των ορισμάτων.Δεύτερον μπορούμε να δώσουμε τιμές μόνο σε εκείνες τις παραμέτρους που θέλουμε,προνοώντας ότι οι άλλες παράμετροι έχουν προτεροτιμές ορίσματος.

Παράδειγμα:
#!/usr/bin/python
# Filename: func_key.py
def func(a, b=5, c=10):
print('a is', a, 'and b is', b, 'and c is', c)

func(3, 7)
func(25, c=24)
func(c=50, a=100)

Αποτέλεσμα:
$ python func_key.py
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50


Eπεξήγηση:
Η συνάρτηση με την ονομασία func έχει μια παράμετρο χωρίς προτεροτιμές ορίσματος και ακολουθείται από δύο παραμέτρους με προτεροτιμές ορίσματος.Στην πρώτη χρήση,func(3, 7) η παράμετρος a παίρνει την τιμή 3,η παράμετρος b παίρνει την τιμή 7 και η c παίρνει την προτεροτιμή του 10.
Στην δεύτερη χρήση func(25, c=24),η μεταβλητή a παίρνει την τιμή του 25 εξαιτίας  της θέσης του ορίσματος.Κατόπιν η παράμετρος c παίρνει την τιμή του 24 εξαιτίας της ονομασίας δηλ.ορίσματα με λέξεις κλειδιά.Η μεταβλητή b παίρνει την προτεροτιμή του 5.
Στην τρίτη χρήση  func(c=50, a=100) ,χρησιμοποιούμαι μόνο ορίσματα με λέξεις κλειδιά για να καθορίσουμε τις τιμές.Σημειώνουμε ότι καθορίζουμε τιμή για την παράμετρο c πριν καθορίσουμε για την a ακόμα κι αν η a είναι ορισμένη πριν από τη c στον ορισμό της συνάρτησης.


ΠΑΡΑΜΕΤΡΟΙ ΜΕ ΑΝΕΞΑΡΤΗΤΕΣ ΜΕΤΑΒΛΗΤΕΣ (VARARGS PARAMETERS)
Ισως θα έπρεπε να γράψουμε για αυτό σε επόμενα κεφάλαια επειδή δεν έχουμε μιλήσει ακόμα για τις λίστες και τα λεξικά.Μερικές φορές ίσως θέλουμε να ορίσουμε μια συνάρτηση η οποία μπορεί να λάβει οποιοδήποτε αριθμό παραμέτρων και αυτό μπορεί να επιτευχθεί χρησιμοποιώντας το σύμβολο αστερίσκο *.

Παράδειγμα:
#!/usr/bin/python
# Filename: total.py
def total(initial=5, *numbers, **keywords):
count = initial
for number in numbers:
count += number
for key in keywords:
count += keywords[key]
return count
print(total(10, 1, 2, 3, vegetables=50, fruits=100))

Αποτέλεσμα:
$ python total.py
166

Επεξήγηση:
Oταν δηλώνουμε παράμετρο αστερίσκος όπως *param,τότε όλα τα θεσιακά ορίσματα από αυτό το σημείο μέχρι το τέλος συγκεντρώνονται σαν λίστα που ονομάζεται 'param'.
Παρόμοια όταν δηλώνουμε παράμετρο διπλό αστερίσκο όπως το **param,τότε όλα τα ορίσματα με λέξεις κλειδιά,από αυτο το σημείο μέχρι το τέλος συγκεντρώνονται σαν λεξικό που ονομάζεται 'param'.Θα εξερευνήσουμε τις λίστες και τα λεξικά σε επόμενο κεφάλαιο.


ΠΑΡΑΜΕΤΡΟΙ ΜΟΝΟΝ ΜΕ ΛΕΞΕΙΣ-ΚΛΕΙΔΙΑ

Αν θέλουμε να καθορίσουμε παραμέτρους με λέξεις -κλειδιά έτσι ώστε να είναι διθέσιμες μόνον σαν λέξεις κλειδιά και όχι σαν θεσιακά ορίσματα τότε αυτές πρέπει να δηλωθούν μετά απο μια παράμετρο αστερίσκο.

Παράδειγμα:
#!/usr/bin/python
# Filename: keyword_only.py
def total(initial=5, *numbers, vegetables):
count = initial
for number in numbers:
count += number
count += vegetables
return count

print(total(10, 1, 2, 3))
print(total(10, 1, 2, 3, vegetables=50))
print(total(10, 1, 2, 3))
# εμφανίζεται λαθος διότι δεν έχουμε δώσει μια προτεροτιμή ορίσματος
for 'vegetables


Αποτέλεσμα:
$ python keyword_only.py
66
Traceback (most recent call last):
File "test.py", line 12, in <module>
print(total(10, 1, 2, 3))
TypeError: total() needs keyword-only argument vegetables

Επεξήγηση:
Δηλώνοντας παραμέτρους μετά από μια παράμετρο αστερίσκο τα αποτελέσματα είναι σε ορίσματα με λέξεις κλειδιά μόνον.Εάν αυτά τα ορίσματα δεν δίνουν μια προτεροτιμή,τότε οι κλήσεις στην συνάρτηση θα δώσουν σφάλμα εάν το όρισμα με λέξη-κλειδι δεν δίνεται,όπως φαινεαι και παραπάνω.
Εάν θέλεις να έχεις ορίσματα με λέξεις -κλειδιά μόνον αλλά δεν χρειάζεσαι μια παράμετρο αστερίσκο,τότε χρησιμοποιείς μόνο του τον αστερίσκο χωρις καμμία ονομασία όπως def total(initial=5, * ,vegetables)


Η ΕΝΤΟΛΗ 'ΕΠΙΣΤΡΟΦΗ' (RETURN STATEMENT)

Η εντολή 'επιστροφή' χρησιμοποιείται για να έχουμε επιστροφή από μια συνάρτηση δηλ. “ξέσπασμα“ της συνάρτησης.Μπορούμε επίσης,προαιρετικά , να επιστρέψουμε μια τιμή από την συνάρτηση.

Παράδειγμα:
#!/usr/bin/python
# Filename: func_return.py
def maximum(x, y):
if x > y:
return x
else:
return y
print(maximum(2, 3))

Aποτέλεσμα:
$ python func_return.py
3

Επεξήγηση:
Η συνάρτηση maximum επιστρέφει το μέγιστο (maximum) των παραμέτρων και σε αυτή την περίπτωση οι αριθμοί παρέχονται στην συνάρτηση.Χρισιμοποιείται η απλή εντολή if...else για να βρει τη μεγαλύτερη τιμή και μετά επιστρέφει αυτή την τιμή.Σημειώνουμε ότι η εντολή 'επιστροφή ' χωρίς μια τιμή είναι ισοδύναμη με την επιστροφή κανένα( None).Το None είναι ένας ειδικός τύπος στην python που αντιπροσωπεύει τη μηδαμινότητα.Για παράδειγμα χρησιμοποιείται για να δείξει ότι μια μεταβλητή δεν έχει καμμία τιμή αν έχει την τιμή None.
Kάθε συνάρτηση σιωπηρά περιέχει μια εντολή επιστροφής None στο τέλος της εκτός κι αν έχουμε γράψει τη δική μας εντολή επιστροφής. Αυτό μπορείς να το δεις τρέχοντας την print(some Function( )  ) όπου η συνάρτηση someFunction δεν χρησιμοποιεί την εντολή επιστροφής :

def  someFunction( ):
pass

Η εντολή pass χρησιμοποιείται στην Python για να δείξει ένα άδειο τμήμα εντολών.
Υπάρχει μία ενσωματωμένη συνάρτηση που ονομάζεται max η οποία ήδη εφαρμόζει την λειτουργία 'find maximum',έτσι χρησιμοποιείται αυτή η ενσωματωμένη λειτουργία όποτε είναι δυνατόν.


ΣΤΟΙΧΕΙΟΣΕΙΡΕΣ ΤΕΚΜΗΡΙΩΣΗΣ (DocStrings)

Η Python έχει ένα θαυμάσιο χαρακτηριστικό που ονομάζεται στοιχειοσειρές τεκμηρίωσης (documentation strings) και συνήθως αναφέρεται με τη συντομογραφία DocStrings.Οι στοχειοσειρές τεκμηρίωσης είναι ένα σπουδαίο εργαλείο που πρέπει να χρησιμοποιούμαι διότι βοηθάει να τεκμηριώσουμε το πρόγραμμα καλύτερα και έτσι γίνεται πιο εύκολα κατανοητό.Με εντυπωσιακό τρόπο μπορούμε να πάρουμε επιστροφή τη στοιχειοσειρά τεκμηρίωσης ,λέει η συνάρτηση,ακόμα και όταν το πρόγραμμα πραγματικά τρέχει.


Παράδειγμα:
#!/usr/bin/python
# Filename: func_doc.py
def printMax(x, y):
'''Prints the maximum of two numbers.
Oι δύο τιμές πρέπει να είναι ακέραιοι αριθμοί.'''
x = int(x) # μετέτρεψε σε ακέραιους αριθμούς αν είναι δυνατόν
y = int(y)
if x > y:
print(x, 'is maximum')
else:
print(y, 'is maximum')
printMax(3, 5)
print(printMax.__doc__)

Aποτέλεσμα:
$ python func_doc.py
5 is maximum
Prints the maximum of two numbers.
Οι δύο τιμές πρέπει να είναι ακέραοι αριθμοί.

Επεξήγηση:
Mία στοχειοσειρά στην πρώτη λογική γραμμή της συνάρτησης είναι η στοιχειοσειρά τεκμηρίωσης για αυτή τη συνάρτηση.Σημειώστε ότι οι στοιχειοσειρές τεκμηρίωσης  εφαρμόζονται και στα δομοστοιχεία (modules) και στις τάξεις (classes),όπως θα μάθουμε στα αντίστοιχα κεφάλαια.
Η σύμβαση (convention)που ακολουθείται για  μια στοιχειοσειρά τεκμηρίωσης είναι μια πολύγραμμη στοιχειοσειρά όπου η πρώτη γραμμή αρχίζει με ένα κεφαλαίο γράμμα και τελειώνει με μια τελεία.Κατόπιν η δεύτεη γραμμή είναι  κενή και ακολουθεί η τρίτη γραμμή που έχει κάθε λεπτομερή εξήγηση.Προτείνεται να ακολουθείς ακριβώς αυτή την σύμβαση για όλες τις στοιχειοσειρές τεκμηρίωσης που αφορούν όλες τις μη τετριμμένες συναρτήσεις (non-trivial functions).
Μπορούμε να εισάγουμε τη στοιχειοσειρά τεκμηρίωσης της συνάρτησης printMax χρησιμοποιώντας  το ιδιοχαρακτηριστικό (ονομασία που ανήκει σε)  _doc_(σημειώστε τις διπλές κάτω παύλες) της συνάρτησης.Θυμηθείτε όμως ότι η Python χρησιμοποιεί το everything σαν αντικείμενο και αυτό περικλείει συναρτήσεις.Αλλα θα μάθουμε περισσότερα για τα αντικείμενα στο κεφάλαιο για τις τάξεις.
Εάν έχεις χρησιμοποιήσει την help( )  στην Python τότε έχεις δει ήδη την χρήση των στοιχειοσειρών τεκμηρίωσης.Αυτό που γίνεται  είναι να κάνει μετάκληση στο ιδιοχαρακτηριστικό _doc_  της συνάρτησης και να το εμφανίζει με ένα καλοφτιαγμένο τρόπο.Mπορούμε να το δοκιμάσουμε στην παραπάνω συνάρτηση αρκεί να συμπεριλάβουμε την help(printMax) στο προγραμμά μας.Μόνο να θυμηθούμε να πατήσουμε το q για κλείσουμε τη βοήθεια( help).
Αυτοματοποιημένα εργαλεία μπορούν να ανακτήσουν την τεκμηρίωση από το πρόγραμμά σου με αυτόν τον τρόπο.Συνεπώς συνιστάται να χρησιμοποιούμαιν στοιχειοσειρές τεκμηρίωσης σε κάθε μη τετριμμενη συνάρτηση που γράφουμε.Η εντολή pydoc που συνοδεύει την Python λειτουργεί παρόμοια με τη help( ) χρησιμοποιώντας τις docstrings.

ΣΧΟΛΙΑ(ΑΝΝΟΤΑΤΙΟΝS)
Οι συναρτήσεις έχουν ακόμα ένα χαρακτηριστικό πλεονέκτημα που ονομάζεται 'σχόλια'.Τα 'σχόλια ' είναι
ένας γρήγορος τρόπος να επισηνάψουμε επιπρόσθετες πληροφορίες για κάθε μια από τις παραμέτρους καθώς και την τιμή επιστροφής.Η Python δεν διερμηνεύει απο μόνη της αυτά τα σχόλια με οποιοδήποτε τρόπο(αυτή η λειτουργία έχει αφεθεί στις βιβλιοθήκες τρίτων (third-party libraries),να διερμηνεύουν με όποιο τρόπο θέλουν), γι αυτό θα παραλείψουμε αυτό το χαρακτηριστικό από τη συζήτησή μας.Αν παρόλα αυτά ενδιφέρεστε να μάθετε για τα σχόλια,μπορείτε να δείτε τις σχετικές αναφορές στο Python Enhancement Proposal No. 3107 (http:/ / www. python. org/ dev/ peps/pep-3107/).

ΣΥΝΟΨΗ
Eχουμε ήδη δει πολλές πλευρές των συναρτήσεων αλλα δεν έχουμε καλύψει όλες τις πλευρές τους.Πάντως έχουμε ήδη καλύψει τις περισσότερες από αυτές που θα χρησιμοποιήσουμε με την Python σε καθημερινή βάση.
Στο επόμενο κεφάλαιο θα δούμε πως θα χρησιμοποιούμαι και πως θα δημιουργούμε δομοστοιχεία (modules) Python.

ubuntu 9.10 (AMD64),Innovator desktop, motherboard MSI K8N NEO4-F,cpu AMD ATHLON64 3500+ 2.20GHz,ram 1GHz, καρτα γραφ.GIGABYTE GEFORCE 6600 256MB,καρτα τηλεορ.κ radio FM PROLINK PIXELVIEW PLAYTV PRO/ΑΓΓΛΙΚΑ-ΚΑΛΑ/ΓΝΩΣΕΙΣ ΠΡΟΓΡ.-ΚΑΘΟΛΟΥ.
dimosfire
babeTUX
babeTUX
 
Δημοσιεύσεις: 141
Εγγραφή: 02 Φεβ 2009, 11:07
Τοποθεσία: ΠΑΤΡΑ
Εκτύπωση

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

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

Επιστροφή στο Μεταφράσεις Λογισμικού