печально быть антисоциальным - čūsku dīdīšana: Python f-ju atgriežamās vērtības

Feb. 19th, 2004

02:53 pm - čūsku dīdīšana: Python f-ju atgriežamās vērtības

Previous Entry Add to Memories Tell A Friend Next Entry

Pitõnā jebkurš koda gabals ir funkcija. Mainīgā radīšana, metodes izsaukums, moduļa importēšana, klases definīcija, un lai būtu pavisam rekursīvi arī funkcijas definīcija ir funkcija.

Tālāk pavisam vienkārši par atgriežamajām vērtībām.




>>> def fun():
... return 5
...
>>> fun()
5


Šī funkcija atgriež 5 :)

>>> def fun1():
... return
...
>>> fun1()
>>> fun1() == None
True
>>> fun1() == ''
False


Šī savukārt atgriež None. Kas ir speciāla vērtība tukšuma apzīmēšanai. Atšķirīga no citām loģiskajām False vērtībām, kā "", [], 0.


>>> def fun2():
... pass
...
>>> fun2()
>>> fun2() == None
True


Lai nodefinētu f-ju vai klasi, kas neko nedara jālieto pass komanda. Tas tapēc, lai būtu atkāpe un parseris visu saprastu.


>>> def fun3():
... a = 3
...
>>> fun3() == None
True


Šī funkcija itkā kautko dara, bet tāpat atgriež None

>>> def fun4():
... return 3,4
...
>>>
>>> fun4()
(3, 4)


Lūk šis ir tas sīkums, kas man tiešām piedur. Funcija var atgriezt vairākas vērtības. Lūk!:

>>> a,b = fun4()
>>> a
3
>>> b
4


Un še nāks pārsteigums lācim.


>>> a,b = b,a
>>> a
4
>>> b
3


Patiesībā tā ir tikai noklusētā tuple sintakse. Kā arī strādā ar jebkura tipa objektu. Vienkārši tiek apmainītas mainīgajos glabātās references.

>>> (a,b)=(b,a)
>>> a
3
>>> b
4


Bet ir taču jauki neierobežot sevi ar vienu atgriežamo vērtību vai arī referencēm/pointeriem ieejas parametros.

Jāpiezīmē, ka rakstot f-jas un citiem vārdiem metodes, jāņem vērā, ka None var būt gan rezultāts, gan zīme tam, ka nekas nav atgriezts.

(8 comments | Leave a comment)

Comments:

From:[info]grrr
Date:February 19th, 2004 - 04:30 pm
(Link)
Vienu brīdi gribēju apskatīt to pitonu tuvāk, taču indentation significance mani maķenīt atbaidīja. Starp citu, nebūt ne tāpēc, ka nelietoju. Tieši otrādi - vizuāli strukturēts kods - eto vse naše. Taču neuzticos tam kā prasībai.

Tagad paskatījos tuvāk python saitu, un skatoties uz valodu, secināju, ka visai tomēr līdzīga manam favorītam Pike.

Un tomēr izbrīnījos izlasot Pike www:

Programs written in Python look very different from Pike programs, but Python and Pike are similar when it comes to ideas and use. Python is more widely used and has more libraries available. Pike on the other hand is faster, has a more advanced type system, and has better support for object-oriented programming. Pike's more C++-like syntax makes it easier to get started with for programmers who know C++, C or Java.

Jo vizuāli kods izskatās stipri savādāks. :)
(Reply to this) (Thread)
[User Picture]
From:[info]smejmoon
Date:February 19th, 2004 - 04:40 pm
(Link)
ar tām atkāpēm ir tā, ka vispirms pārgāju no viena taba uz 4 spacēm, tad uz 2. no sākuma ir biku problēmas, galvenokārt ar neredzamo vaitspeisu, bet to var padarīt redzamu.
(Reply to this) (Parent) (Thread)
From:[info]grrr
Date:February 19th, 2004 - 06:04 pm
(Link)
nujā, bet vai vajag valodu, kurā ir jāapiet (šādas) problēmas? :)
vpročem, nesaku nē. par maz zinu vēl.
(Reply to this) (Parent) (Thread)
[User Picture]
From:[info]smejmoon
Date:February 19th, 2004 - 06:20 pm
(Link)
teorētiski tā vispār nav problēma :)

praktiski ir tā, ka vēlāk nav skaidrs, kapēc ir jālieto {}; () un tamlīdzīgas lietas:
template <class T>
void mystify(T a, T b)
{
  if ( a > b )
  {
    doMagic();
    return a;
  }
  else
  {
    return b;
  }
}

ja var šitā:
def mystify(a, b):
  if a > b:
    doMagic()
    return a
  else:
    return b
(Reply to this) (Parent) (Thread)
From:[info]grrr
Date:February 19th, 2004 - 06:29 pm
(Link)
nez, man pirmais variants šķiet pārskatāmāks... :)
(Reply to this) (Parent) (Thread)
[User Picture]
From:[info]smejmoon
Date:February 19th, 2004 - 06:35 pm
(Link)
ir ok ..

assambly var rakstīt šādi

inc ax ;
mov ax , bx;

pitonā var rakstīt šādi:
def foo():
  #{
  blaBla();
  #}


vai arī
def foo():
  #begin
  blaBla();
  #end


vai arī kombinēt
def foo():
#{
blaBla();
#end
</pre>

;-)
(Reply to this) (Parent) (Thread)
From:[info]grrr
Date:February 19th, 2004 - 06:47 pm
(Link)
heheh, ar pliku # jau pietiek.
bet saki -- ja jau lietot #, tad kāpēc vispār whitespace? ;)

// off to birthday, see you later.
(Reply to this) (Parent) (Thread)
[User Picture]
From:[info]smejmoon
Date:February 19th, 2004 - 06:53 pm
(Link)
pēdējā piemērā formatējums nepareizs. pietiek ar atkāpi+#
atkāpes tāpat obligātas.

:)
(Reply to this) (Parent)