Хелпикс

Главная

Контакты

Случайная статья





import sys 7 страница



 

П а р а м е т р ы у к а з ы в а ю т с я в с к о б к а х п р и о б ъ я в л е н и и ф у н к ц и и и р а з д е л я ю т с я з а п я т ы м и. А н а л о г и ч н о м ы п е р е д а ё м з н а ч е н и я, к о г д а в ы з ы в а е м ф у н к ц и ю. О б р а т и т е в н и м а н и е н а т е р м и н о л о г и ю: и м е н а, у к а з а н н ы е в о б ъ я в л е н и и ф у н к ц и и, н а з ы в а ю т с я п а р а м е т р а м и , т о -г д а к а к з н а ч е н и я, к о т о р ы е в ы п е р е д а ё т е в ф у н к ц и ю п р и е ё в ы з о в е, – а р г у м е н т а м и .

 

П р и м е р: (с о х р а н и т е к а к 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 м а к с и м а л ь н о

 

м а к с и м а л ь н о

 

К а к э т о р а б о т а е т:

 

З д е с ь м ы о п р е д е л и л и ф у н к ц и ю с и м е н е м printMax, к о т о р а я и с п о л ь з у е т д в а п а р а м е т р а с и м е н а м и a и b. М ы н а х о д и м н а и б о л ь ш е е ч и с л о с п р и м е н е н и е м п р о с т о г о о п е р а т о р а if.. else и в ы в о д и м э т о ч и с л о.

 

П р и п е р в о м в ы з о в е ф у н к ц и и printMax м ы н а п р я м у ю п е р е д а ё м ч и с л а в к а ч е -с т в е а р г у м е н т о в. В о в т о р о м с л у ч а е м ы в ы з ы в а е м ф у н к ц и ю с п е р е м е н н ы м и

 

к а ч е с т в е а р г у м е н т о в. printMax(x, y) н а з н а ч а е т з н а ч е н и е а р г у м е н т а x п а -р а м е т р у a, а з н а ч е н и е а р г у м е н т а y – п а р а м е т р у b. В о б о и х с л у ч а я х ф у н к ц и я printMax р а б о т а е т о д и н а к о в о.


 

60                                                                                                                                                Г л а в а 10. Ф у н к ц и и


A Byte of Python (Russian), В е р с и я 2. 01

 

 

10. 2 Л о к а л ь н ы е п е р е м е н н ы е

 

П р и о б ъ я в л е н и и п е р е м е н н ы х в н у т р и о п р е д е л е н и я ф у н к ц и и, о н и н и к о и м о б р а з о м н е с в я -з а н ы с д р у г и м и п е р е м е н н ы м и с т а к и м ж е и м е н е м з а п р е д е л а м и ф у н к ц и и – т. е. и м е н а п е р е м е н н ы х я в л я ю т с я л о к а л ь н ы м и в ф у н к ц и и. Э т о н а з ы в а е т с я о б л а с т ь ю в и д и м о с т и п е р е -м е н н о й. О б л а с т ь в и д и м о с т и в с е х п е р е м е н н ы х о г р а н и ч е н а б л о к о м, в к о т о р о м о н и о б ъ я в -л е н ы, н а ч и н а я с т о ч к и о б ъ я в л е н и я и м е н и.

 

П р и м е р: (с о х р а н и т е к а к 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 и с п о л ь з у е т з н а ч е н и е п а р а м е т р а, о б ъ я в л е н н о г о в о с н о в н о м б л о к е, в ы ш е о п р е д е л е н и я ф у н к ц и и.

 

Д а л е е м ы н а з н а ч а е м x з н а ч е н и е 2. И м я x л о к а л ь н о д л я н а ш е й ф у н к ц и и. П о -э т о м у к о г д а м ы з а м е н я е м з н а ч е н и е x в ф у н к ц и и, x, о б ъ я в л е н н ы й в о с н о в н о м б л о к е, о с т а ё т с я н е з а т р о н у т ы м.

 

П о с л е д н и м в ы з о в о м ф у н к ц и и print м ы в ы в о д и м з н а ч е н и е x, у к а з а н н о е в о с -н о в н о м б л о к е, п о д т в е р ж д а я т а к и м о б р а з о м, ч т о о н о н е и з м е н и л о с ь п р и л о -к а л ь н о м п р и с в а и в а н и и з н а ч е н и я в р а н е е в ы з в а н н о й ф у н к ц и и.

 

 

10. 3 З а р е з е р в и р о в а н н о е с л о в о «global»

 

Ч т о б ы п р и с в о и т ь н е к о т о р о е з н а ч е н и е п е р е м е н н о й, о п р е д е л ё н н о й н а в ы с ш е м у р о в н е п р о г р а м м ы (т. е. н е в к а к о й -л и б о о б л а с т и в и д и м о с т и, к а к т о ф у н к ц и и и л и к л а с с ы ), н е о б -х о д и м о у к а з а т ь Python, ч т о е ё и м я н е л о к а л ь н о, а г л о б а л ь н о (global). С д е л а е м э т о п р и п о м о -щ и з а р е з е р в и р о в а н н о г о с л о в а global. Б е з п р и м е н е н и я з а р е з е р в и р о в а н н о г о с л о в а global н е в о з м о ж н о п р и с в о и т ь з н а ч е н и е п е р е м е н н о й, о п р е д е л ё н н о й з а п р е д е л а м и ф у н к ц и и.

 

10. 2. Л о к а л ь н ы е п е р е м е н н ы е

A Byte of Python (Russian), В е р с и я 2. 01

 

 

М о ж н о и с п о л ь з о в а т ь у ж е с у щ е с т в у ю щ и е з н а ч е н и я п е р е м е н н ы х, о п р е д е л ё н н ы х з а п р е -д е л а м и ф у н к ц и и (п р и у с л о в и и, ч т о в н у т р и ф у н к ц и и н е б ы л о о б ъ я в л е н о п е р е м е н н о й с т а к и м ж е и м е н е м ). О д н а к о, э т о н е п р и в е т с т в у е т с я, и е г о с л е д у е т и з б е г а т ь, п о с к о л ь к у ч е -л о в е к у, ч и т а ю щ е м у т е к с т п р о г р а м м ы, б у д е т н е п о н я т н о, г д е н а х о д и т с я о б ъ я в л е н и е п е р е -м е н н о й. И с п о л ь з о в а н и е з а р е з е р в и р о в а н н о г о с л о в а global д о с т а т о ч н о я с н о п о к а з ы в а е т, ч т о п е р е м е н н а я о б ъ я в л е н а в с а м о м в н е ш н е м б л о к е.

 

П р и м е р: (с о х р а н и т е к а к func_global. py)

 

x = 50

 

def func():

 

global x

 

print ('xр а в н о ', x)

 

x = 2

 

print ('З а м е н я е м г л о б а л ь н о е з н а ч е н и е xн а ', x)

 

func()

 

print ('З н а ч е н и е xс о с т а в л я е т ', x)

 

В ы в о д:

 

python func_global. py x р а в н о 50

З а м е н я е м г л о б а л ь н о е з н а ч е н и е x н а 2

 

З н ч е н и е x с о с т а в л я е т 2

 

К а к э т о р а б о т а е т:

 

З а р е з е р в и р о в а н н о е с л о в о global и с п о л ь з у е т с я д л я т о г о, ч т о б ы о б ъ я в и т ь, ч т о x

 

– э т о г л о б а л ь н а я п е р е м е н н а я, а з н а ч и т, к о г д а м ы п р и с в а и в а е м з н а ч е н и е и м е -н и x в н у т р и ф у н к ц и и, э т о и з м е н е н и е о т р а з и т с я н а з н а ч е н и и п е р е м е н н о й x в о с н о в н о м б л о к е п р о г р а м м ы.

 

И с п о л ь з у я о д н о з а р е з е р в и р о в а н н о е с л о в о global, м о ж н о о б ъ я в и т ь с р а з у н е с к о л ь к о п е р е м е н н ы х: global x, y, z.

 

 

10. 4 З а р е з е р в и р о в а н н о е с л о в о «nonlocal»

 

М ы у в и д е л и, к а к п о л у ч а т ь д о с т у п к п е р е м е н н ы м в л о к а л ь н о й и г л о б а л ь н о й о б л а с т и в и -д и м о с т и. Е с т ь е щ ё о д и н т и п о б л а с т и в и д и м о с т и, н а з ы в а е м ы й «н е л о к а л ь н о й » (nonlocal) о б л а с т ь ю в и д и м о с т и, к о т о р ы й п р е д с т а в л я е т с о б о й н е ч т о с р е д н е е м е ж д у п е р в ы м и д в у -м я. Н е л о к а л ь н ы е о б л а с т и в и д и м о с т и в с т р е ч а ю т с я, к о г д а в ы о п р е д е л я е т е ф у н к ц и и в н у т р и ф у н к ц и й.

 

П о с к о л ь к у в Python в с ё я в л я е т с я в ы п о л н и м ы м к о д о м, в ы м о ж е т е о п р е д е л я т ь ф у н к ц и и г д е у г о д н о.


 

62                                                                                                                                                Г л а в а 10. Ф у н к ц и и


A Byte of Python (Russian), В е р с и я 2. 01

 

 

Д а в а й т е р а с с м о т р и м п р и м е р:

 

# Filename: func_nonlocal. py

 

def func_outer():

 

x = 2

 

print ('xр а в н о ', x)

 

def func_inner():

 

nonlocal x

 

x = 5

 

func_inner()

 

print ('Л о к а л ь н о е xс м е н и л о с ь н а ', x)

 

func_outer()

 

В ы в о д:

 

python func_nonlocal. py x р а в н о 2

Л о к а л ь н о е x с м е н и л о с ь н а 5

 

К а к э т о р а б о т а е т:

 

К о г д а м ы н а х о д и м с я в н у т р и func_inner, п е р е м е н н а я x, о п р е д е л ё н н а я в п е р -в о й с т р о к е func_outer н а х о д и т с я н и в л о к а л ь н о й о б л а с т и в и д и м о с т и (о п р е д е -л е н и е п е р е м е н н о й н е в х о д и т в б л о к func_inner), н и в г л о б а л ь н о й о б л а с т и в и -д и м о с т и (о н а т а к ж е и н е в о с н о в н о м б л о к е п р о г р а м м ы ). М ы о б ъ я в л я е м, ч т о х о -т и м и с п о л ь з о в а т ь и м е н н о э т у п е р е м е н н у ю x, с л е д у ю щ и м о б р а з о м: nonlocal x.

 

П о п р о б у й т е з а м е н и т ь «nonlocal x» н а «global x», а з а т е м у д а л и т ь э т о з а -р е з е р в и р о в а н н о е с л о в о, и п р о н а б л ю д а й т е з а р а з н и ц е й м е ж д у э т и м и д в у м я с л у ч а я м и.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.