Crearea funcțiilor
Pentru a începe acest capitol, vă voi da un exemplu despre ceea ce ați putea face, dar nu ar trebui (deci nu-l folosiți):
a = 23
b = -23
if a < 0:
a = -a
if b < 0:
b = -b
if a == b:
print("The absolute values of", a, "and", b, "are equal.")
else:
print("The absolute values of", a, "and", b, "are different.")
cu ieșirea fiind:
The absolute values of 23 and 23 are equal.
Programul pare puțin repetitiv. Programatorii urăsc să repete lucrurile – pentru asta sunt computerele, până la urmă! (Rețineți, de asemenea, că găsirea valorii absolute a schimbat valoarea variabilei, motiv pentru care se tipărește 23 și nu -23 în ieșire.) Din fericire, Python vă permite să creați funcții pentru a elimina duplicarea. Iată exemplul rescris:
a = 23
b = -23
def absolute_value(n):
if n < 0:
n = -n
return n
if absolute_value(a) == absolute_value(b):
print("The absolute values of", a, "and", b, "are equal.")
else:
print("The absolute values of", a, "and", b, "are different.")
cu ieșirea fiind:
The absolute values of 23 and -23 are equal.
Caracteristica cheie a acestui program este declarația def
. def
(prescurtare de la definire) începe o definiție a funcției. def
este urmat de numele funcției absolute_value
. Urmează un „(” urmat de parametrul n
(n
este trecut din program în funcție când funcția este apelată). Instrucțiunile de după „:” sunt executate când funcția este utilizată. Instrucțiunile continuă până când fie instrucțiunile indentate se termină fie se întâlnește o return
. Instrucțiunea return
returnează o valoare înapoi la locul unde a fost apelată funcția. Am întâlnit deja o funcție în primul nostru program, funcția print
. Acum putem face noi funcții.
Observați cum valorile lui a
și b
nu sunt modificate. Funcțiile pot fi folosite pentru a repeta sarcini care nu returnează valori. Aici sunt cateva exemple:
def hello():
print("Hello")
def area(width, height):
return width * height
def print_welcome(name):
print("Welcome", name)
hello()
hello()
print_welcome("Fred")
w = 4
h = 5
print("width =", w, " height =", h, " area =", area(w, h))
cu ieșirea fiind:
Hello Hello Welcome Fred width = 4 height = 5 area = 20
Acest exemplu arată mai multe lucruri pe care le puteți face cu funcții. Observați că nu puteți utiliza niciun argument sau două sau mai multe. Observați, de asemenea, când o funcție nu trebuie să trimită înapoi o valoare, returnarea este opțională.
Variabile în funcții
Când eliminați codul repetat, aveți adesea variabile în codul repetat. În Python, acestea sunt tratate într-un mod special. Până acum toate variabilele pe care le-am văzut sunt variabile globale. Funcțiile au un tip special de variabilă numită variabile locale. Aceste variabile există doar în timp ce funcția rulează. Când o variabilă locală are același nume cu o altă variabilă (cum ar fi o variabilă globală), variabila locală o ascunde pe cealaltă. Sună confuz? Ei bine, aceste exemple următoare (care sunt puțin artificioase) ar trebui să ajute la clarificarea lucrurilor.
a = 4
def print_func():
a = 17
print("in print_func a =", a)
print_func()
print("a = ", a)
Când rulăm, vom primi o ieșire de:
in print_func a = 17 a = 4
Atribuțiile de variabile în interiorul unei funcții nu înlocuiesc variabilele globale, ele există doar în interiorul funcției. Chiar dacă lui a
i-a fost atribuită o nouă valoare în interiorul funcției, această valoare nou atribuită a fost relevantă doar pentru print_func
, când funcția se termină de rulat și valorile lui a
sunt imprimate din nou, vedem valorile atribuite inițial.
Iată un alt exemplu mai complex.
a_var = 10
b_var = 15
e_var = 25
def a_func(a_var):
print("in a_func a_var =", a_var)
b_var = 100 + a_var
d_var = 2 * a_var
print("in a_func b_var =", b_var)
print("in a_func d_var =", d_var)
print("in a_func e_var =", e_var)
return b_var + 10
c_var = a_func(b_var)
print("a_var =", a_var)
print("b_var =", b_var)
print("c_var =", c_var)
print("d_var =", d_var)
ieșirea:
in a_func a_var = 15 in a_func b_var = 115 in a_func d_var = 30 in a_func e_var = 25 a_var = 10 b_var = 15 c_var = 125 d_var = Traceback (most recent call last): File "C:\def2.py", line 19, in <module> print("d_var = ", d_var) NameError: name 'd_var' is not defined
În acest exemplu, variabilele a_var
, b_var
și
sunt toate variabile locale atunci când sunt în interiorul funcției
d_vara_func
. După rularea instrucțiunii return b_var + 10
, toate încetează să mai existe. Variabila a_var
este automat o variabilă locală, deoarece este un nume de parametru. Variabilele b_var
și d_var
sunt variabile locale deoarece apar în stânga unui semn egal în funcție în instrucțiunile b_var = 100 + a_var
și
.
d_var = 2 * a_var
În interiorul funcției a_var
nu are nicio valoare atribuită. Când funcția este apelată cu c_var = a_func(b_var)
, 15 este atribuit lui a_var
, deoarece în acel moment b_var
este 15, făcând apel la funcția a_func(15)
. Aceasta se termină setând a_var
la 15 când este în interiorul lui a_func
.
După cum puteți vedea, odată ce funcția se termină de rulat, variabilele locale a_var
și b_var
care au ascuns variabilele globale cu același nume dispar. Apoi instrucțiunea print("a_var = ",
afișează valoarea
a_var)10
și nu valoarea 15
, deoarece variabila locală care a ascuns variabila globală a dispărut.
Un alt lucru de observat este NameError
care se întâmplă la sfârșit. Aceasta apare deoarece variabila d_var
nu mai există de când a_func
a terminat. Toate variabilele locale sunt șterse atunci când funcția iese. Dacă doriți să obțineți ceva dintr-o funcție, atunci va trebui să utilizați return something
.
Un ultim lucru de observat este că valoarea lui e_var
rămâne neschimbată în interiorul a_func
, deoarece nu este un parametru și nu apare niciodată în stânga unui semn egal în interiorul funcției a_func
. Când o variabilă globală este accesată în interiorul unei funcții, aceasta este variabila globală din exterior.
Funcțiile permit variabile locale care există numai în interiorul funcției și pot ascunde alte variabile care se află în afara funcției.
Exemple
temperature2.py
#! /usr/bin/python
#-*-codare: utf-8 -*-
# transformă temperatura în Fahrenheit sau Celsius
def print_options():
print("Options:")
print(" 'p' print options")
print(" 'c' convert from Celsius")
print(" 'f' convert from Fahrenheit")
print(" 'q' quit the program")
def celsius_to_fahrenheit(c_temp):
return 9.0 / 5.0 * c_temp + 32
def fahrenheit_to_celsius(f_temp):
return (f_temp - 32.0) * 5.0 / 9.0
choice = "p"
while choice != "q":
if choice == "c":
c_temp = float(input("Celsius temperature: "))
print("Fahrenheit:", celsius_to_fahrenheit(c_temp))
choice = input("option: ")
elif choice == "f":
f_temp = float(input("Fahrenheit temperature: "))
print("Celsius:", fahrenheit_to_celsius(f_temp))
choice = input("option: ")
else:
choice = "p" #alegere alternativă != "q": astfel încât imprimă
#când intra ceva neașteptat
print_options()
choice = input("option: ")
La rulare:
Options: 'p' print options 'c' convert from celsius 'f' convert from fahrenheit 'q' quit the program option: c Celsius temperature: 30 Fahrenheit: 86.0 option: f Fahrenheit temperature: 60 Celsius: 15.5555555556 option: q
area2.py
#! /usr/bin/python
#-*-codare: utf-8 -*-
# calculează o zonă dreptunghiulară dată
def hello():
print('Hello!')
def area(width, height):
return width * height
def print_welcome(name):
print('Welcome,', name)
def positive_input(prompt):
number = float(input(prompt))
while number <= 0:
print('Must be a positive number')
number = float(input(prompt))
return number
name = input('Your Name: ')
hello()
print_welcome(name)
print()
print('To find the area of a rectangle,')
print('enter the width and height below.')
print()
w = positive_input('Width: ')
h = positive_input('Height: ')
print('Width =', w, ' Height =', h, ' so Area =', area(w, h))
La rulare:
Your Name: Josh Hello! Welcome, Josh To find the area of a rectangle, enter the width and height below. Width: -4 Must be a positive number Width: 4 Height: 3 Width = 4 Height = 3 so Area = 12
Exerciții
Rescrieți programul area2.py din exemplele de mai sus pentru a avea o funcție separată pentru aria unui pătrat, aria unui dreptunghi și aria unui cerc (3.14
). Acest program ar trebui să includă o interfață de meniu.
* radius**2
Soluţie
def square(L):
return L * L
def rectangle(width , height):
return width * height
def circle(radius):
return 3.14159 * radius ** 2
def options():
print()
print("Options:")
print("s = calculate the area of a square.")
print("c = calculate the area of a circle.")
print("r = calculate the area of a rectangle.")
print("q = quit")
print()
print("This program will calculate the area of a square, circle or rectangle.")
choice = "x"
options()
while choice != "q":
choice = input("Please enter your choice: ")
if choice == "s":
L = float(input("Length of square side: "))
print("The area of this square is", square(L))
options()
elif choice == "c":
radius = float(input("Radius of the circle: "))
print("The area of the circle is", circle(radius))
options()
elif choice == "r":
width = float(input("Width of the rectangle: "))
height = float(input("Height of the rectangle: "))
print("The area of the rectangle is", rectangle(width, height))
options()
elif choice == "q":
print(" ",end="")
else:
print("Unrecognized option.")
options()
(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)
Lasă un răspuns