Хелпикс

Главная

Контакты

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





import sys 8 страница



 

 

10. 5 З н а ч е н и я а р г у м е н т о в п о у м о л ч а н и ю

 

З а ч а с т у ю ч а с т ь п а р а м е т р о в ф у н к ц и й м о г у т б ы т ь н е о б я з а т е л ь н ы м и , и д л я н и х б у д у т и с -п о л ь з о в а т ь с я н е к о т о р ы е з а д а н н ы е з н а ч е н и я п о у м о л ч а н и ю, е с л и п о л ь з о в а т е л ь н е у к а ж е т с о б с т в е н н ы х. Э т о г о м о ж н о д о с т и ч ь с п о м о щ ь ю з н а ч е н и й а р г у м е н т о в п о у м о л ч а н и ю. И х м о ж н о у к а з а т ь, д о б а в и в к и м е н и п а р а м е т р а в о п р е д е л е н и и ф у н к ц и и о п е р а т о р п р и с в а и -в а н и я (=) с п о с л е д у ю щ и м з н а ч е н и е м.

 

О б р а т и т е в н и м а н и е, ч т о з н а ч е н и е п о у м о л ч а н и ю д о л ж н о б ы т ь к о н с т а н т о й. И л и т о ч н е е г о в о р я, о н о д о л ж н о б ы т ь н е и з м е н н ы м 1 – э т о о б ъ я с н я е т с я п о д р о б н е е в п о с л е д у ю щ и х г л а -в а х. А п о к а з а п о м н и т е э т о.

 

«immutable» в т е р м и н о л о г и и Python (п р и м. п е р е в. )


 

10. 5. З н а ч е н и я а р г у м е н т о в п о у м о л ч а н и ю                                                                                             63


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

 

 

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

 

def say(message, times=1):

 

print (message*times)

 

say('П р и в е т ')

 

say('М и р ', 5)

 

В ы в о д:

 

$ python func_default. py

 

П р и в е т

 

М и р М и р М и р М и р М и р

 

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

 

Ф у н к ц и я п о д и м е н е м say и с п о л ь з у е т с я д л я в ы в о д а н а э к р а н с т р о к и у к а з а н н о е ч и с л о р а з. Е с л и м ы н е у к а з ы в а е м з н а ч е н и я, п о у м о л ч а н и ю с т р о к а в ы в о д и т с я о д и н р а з. М ы д о с т и г а е м э т о г о у к а з а н и е м з н а ч е н и я а р г у м е н т а п о у м о л ч а н и ю, р а в н о г о 1 д л я п а р а м е т р а times2.

П р и п е р в о м в ы з о в е say м ы у к а з ы в а е м т о л ь к о с т р о к у, и ф у н к ц и я в ы в о д и т е ё о д и н р а з. П р и в т о р о м в ы з о в е say м ы у к а з ы в а е м т а к ж е и а р г у м е н т 5, о б о з н а ч а я т а к и м о б р а з о м, ч т о м ы х о т и м с к а з а т ь 3 ф р а з у 5 р а з.

 

В а ж н о: З н а ч е н и я м и п о у м о л ч а н и ю м о г у т б ы т ь с н а б ж е н ы т о л ь к о п а р а м е т р ы, н а х о д я щ и -е с я в к о н ц е с п и с к а п а р а м е т р о в. Т а к и м о б р а з о м, в с п и с к е п а р а м е т р о в ф у н к ц и и п а р а м е т р с о з н а ч е н и е м п о у м о л ч а н и ю н е м о ж е т п р е д ш е с т в о в а т ь п а р а м е т р у б е з з н а ч е н и я п о у м о л -ч а н и ю. Э т о с в я з а н о с т е м, ч т о з н а ч е н и я п р и с в а и в а ю т с я п а р а м е т р а м в с о о т в е т с т в и и с и х п о л о ж е н и е м. Н а п р и м е р, def func(a, b=5) д о п у с т и м о, а def func(a=5, b) – н е д о п у с т и -м о .

 

10. 6 К л ю ч е в ы е а р г у м е н т ы

 

Е с л и и м е е т с я н е к о т о р а я ф у н к ц и я с б о л ь ш и м ч и с л о м п а р а м е т р о в, и п р и е ё в ы з о в е т р е -б у е т с я у к а з а т ь т о л ь к о н е к о т о р ы е и з н и х, з н а ч е н и я э т и х п а р а м е т р о в м о г у т з а д а в а т ь с я п о и х и м е н и – э т о н а з ы в а е т с я к л ю ч е в ы е п а р а м е т р ы . В э т о м с л у ч а е д л я п е р е д а ч и а р г у м е н т о в ф у н к ц и и и с п о л ь з у е т с я и м я (к л ю ч ) в м е с т о п о з и ц и и (к а к б ы л о д о с и х п о р ).

 

Е с т ь д в а п р е и м у щ е с т в а т а к о г о п о д х о д а: в о -п е р в ы х, и с п о л ь з о в а н и е ф у н к ц и и с т а н о в и т с я л е г ч е, п о с к о л ь к у н е т н е о б х о д и м о с т и о т с л е ж и в а т ь п о р я д о к а р г у м е н т о в; в о -в т о р ы х, м о ж н о з а д а в а т ь з н а ч е н и я т о л ь к о н е к о т о р ы м и з б р а н н ы м а р г у м е н т а м, п р и у с л о в и и, ч т о о с т а л ь -н ы е п а р а м е т р ы и м е ю т з н а ч е н и я а р г у м е н т а п о у м о л ч а н и ю.

 

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

 

times – а н г л. «р а з » (п р и м. п е р е в. )

say – а н г л. «с к а з а т ь » (п р и м. п е р е в. )


 

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


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

 

def func(a, b=5, c=10):

 

print ('aр а в н о ', a, ', bр а в н о ', b, ', а cр а в н о ', c)

 

func(3, 7)

 

func(25, c=24)

 

func(c=50, a=100)

 

В ы в о д:

 

$ python func_key. py

 

a р а в н о 3, b р а в н о 7, а c р а в н о 10

 

a р а в н о 25, b р а в н о 5, а c р а в н о 24

 

a р а в н о 100, b р а в н о 5, а c р а в н о 50

 

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

 

Ф у н к ц и я с и м е н е м 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.

 

 

10. 7 П е р е м е н н о е ч и с л о п а р а м е т р о в 4

 

И н о г д а б ы в а е т н у ж н о о п р е д е л и т ь ф у н к ц и ю, с п о с о б н у ю п р и н и м а т ь л ю б о е ч и с л о п а р а м е т -р о в. Э т о г о м о ж н о д о с т и ч ь п р и п о м о щ и з в ё з д о ч е к (с о х р а н и т е к а к 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))

 

4 VarArgs – о т а н г л. Var iable number of Arg ument s ” – «п е р е м е н н о е ч и с л о а р г у м е н т о в » (п р и м. п е р е в. )


 

 

10. 7. П е р е м е н н о е ч и с л о п а р а м е т р о в                                                                                                         65


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

 

 

В ы в о д:

 

python total. py 166

 

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

 

К о г д а м ы о б ъ я в л я е м п а р а м е т р с о з в ё з д о ч к о й (н а п р и м е р, *param), в с е п о з и ц и -о н н ы е а р г у м е н т ы н а ч и н а я с э т о й п о з и ц и и и д о к о н ц а б у д у т с о б р а н ы в к о р т е ж п о д и м е н е м param.

 

А н а л о г и ч н о, к о г д а м ы о б ъ я в л я е м п а р а м е т р ы с д в у м я з в ё з д о ч к а м и (**param), в с е к л ю ч е в ы е а р г у м е н т ы н а ч и н а я с э т о й п о з и ц и и и д о к о н ц а б у д у т с о б р а н ы в с л о в а р ь п о д и м е н е м param.

 

М ы и з у ч и м к о р т е ж и и с л о в а р и в о д н о й и з п о с л е д у ю щ и х г л а в .

 

 

10. 8 Т о л ь к о к л ю ч е в ы е п а р а м е т р ы

 

Е с л и н е к о т о р ы е к л ю ч е в ы е п а р а м е т р ы д о л ж н ы б ы т ь д о с т у п н ы т о л ь к о п о к л ю ч у, а н е к а к п о з и ц и о н н ы е а р г у м е н т ы, и х м о ж н о о б ъ я в и т ь п о с л е п а р а м е т р а с о з в ё з д о ч к о й (с о х р а н и т е к а к keyword_only. py):

 

def total(initial=5, *numbers, extra_number):

 

count = initial

 

for number in numbers:

 

count += number

 

count += extra_number

 

print (count)

 

total(10, 1, 2, 3, extra_number=50)

 

total(10, 1, 2, 3)

 

В ы з о в е т о ш и б к у, п о с к о л ь к у м ы н е у к а з а л и з н а ч е н и е

а р г у м е н т а п о у м о л ч а н и ю д л я 'extra_number'.

 

В ы в о д:

 

python keyword_only. py

 

 

Traceback (most recent call last):

 

File " keyword_only. py", line 12, in < module> total(10, 1, 2, 3)

 

TypeError: total() needs keyword-only argument extra_number

 

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

 

О б ъ я в л е н и е п а р а м е т р о в п о с л е п а р а м е т р а с о з в ё з д о ч к о й д а ё т т о л ь к о к л ю ч е в ы е а р г у м е н т ы. Е с л и д л я т а к и х а р г у м е н т о в н е у к а з а н о з н а ч е н и е п о у м о л ч а н и ю, и о н о н е п е р е д а н о п р и в ы з о в е, о б р а щ е н и е к ф у н к ц и и в ы з о в е т о ш и б к у, в ч ё м м ы т о л ь к о ч т о у б е д и л и с ь.



  

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