Funktioner - sm.luth.se

January 9, 2018 | Author: Anonymous | Category: Engineering & Technology, Datavetenskap, Data Structures
Share Embed Donate


Short Description

Download Funktioner - sm.luth.se...

Description

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

INTRODUKTION TILL PROGRAMMERING D0009E

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

INTRODUKTION TILL PROGRAMMERING SMD180

Mer matematik  Uttryck vi sett: 17+n

Introduktion till programmering D0009E

pi/2

hours*60+minutes

 Kan man skriva log(x) och sin(pi/2)?  Svar ja! exempel på funktionsanrop

Föreläsning 3: “Funktioner”

kallas ibland funktionsapplikation

 log och sin inte inbyggda i Python finns i den separata modulen math  modul Python-script som innehåller definitioner av ett antal relaterade funktioner och variabler 1

4

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

INTRODUKTION TILL PROGRAMMERING SMD180

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

Om moduler

En berättigad fråga:

 För att komma åt modulnamn skriver man import modulnamn modulnamn.py läses in och körs alla namn åtkomliga via punktnotation: modulnamn.funktion(x) modulnamn.variabel  Import av modulen math: import math  Exempel på namn som då blir åtkomliga: math.pi math.sin(x) math.log(x) math.sqrt(x)

5

 definiera funktioner? bara tittat på hur man definierar variabler...  bra att kunna definiera egna funktioner t.ex. gradToRad som konverterar grader till radianer!  funktioner ett mycket centralt begrepp i programmering

7

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

INTRODUKTION TILL PROGRAMMERING SMD180

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

Funktionsdefinition

INTRODUKTION TILL PROGRAMMERING SMD180

Funktionsanrop  Funktionsanrop är en form av uttryck (expression): funktionsnamn( argumentlista )  Regler: funktionsnamnet måste vara introducerat i en tidigare def-sats, parenteserna måste finnas med  Exempel: print "First line." newLine() print "Second line."  Genererar följande output: First line.

 Generellt mönster: def funktionsnamn( parameterlista ): satslista  Regler: def är ett nyckelord, parenteser och kolon måste finnas med, satslistan måste vara indenterad från vänstermarginalen  Exempel: def newLine(): print # nothing but a new line

Second line.

 Definierar funktionen newLine, som tar 0 parametrar 8

INTRODUKTION TILL PROGRAMMERING SMD180

9

1

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

INTRODUKTION TILL PROGRAMMERING SMD180

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

Varför funktioner?

Uttryckssatser  Vi har sett att satser som består av endast ett uttryck orsakar utskrift om de körs interaktivt, men ignoreras inuti script

 namnge en lista av satser – ökar läsbarheten om namnet väljs med omsorg  skriva kortare program – satslistor som förekommer på flera ställen kan ersättas av anrop till en gemensam funktion i stället

 En uttryckssats som t ex 7+1 är tämligen meningslös i ett script, då resultatet kastas...

 (Exempel: konstruera funktionerna nineLines och twentySevenLines, och försök sedan åstadkomma samma effekt utan att använda funktioner!)

 Uttryckssatsen newLine() är däremot meningsfull: den orsakar en effekt även om resultatet (det primitiva värdet None, då inget annat sagts) ignoreras

 Fler poänger med funktioner kommer att uppenbaras framöver... 12

13

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

INTRODUKTION TILL PROGRAMMERING D0009E

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

def-satsen

INTRODUKTION TILL PROGRAMMERING D0009E

Programflöde

 Vi har också bekantat oss med två andra typer av satser: • print-satsen, vars effekt är utskrift av text på skärmen • variabel-tilldelning, vars effekt är förändring av programmets interna tillstånd

Notera namnet a

Notera namnet b

def a():

2

Utför satserna i a

def b(): 4

 När en funktion anropas och dess satslista körts färdigt fortsätter körningen där anropet skedde 14

1

6

 Viktigt: def-satsen förändrar också programmets interna tillstånd då den utförs, men enbart genom att ett nytt funktionsnamn blir tillgängligt. De indenterade satserna utförs inte vid detta tillfälle, utan först när funktionen i fråga anropas

Anropa b

3

b()

Anropa a

5

a()

Anropa b

7

b()

Klar!

9

8

Utför satserna i b

15

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

INTRODUKTION TILL PROGRAMMERING SMD180

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

Parametrar och argument

>>> printTwice( 'Spam' ) Spam Spam >>> printTwice( 5 ) 55 >>> printTwice( 'Spam'*3 ) SpamSpamSpam SpamSpamSpam >>> printTwice( "'Spam'*3" ) 'Spam'*3 'Spam'*3 >>> michael = "Eric, the half a bee." >>> printTwice( michael ) Eric, the half a bee. Eric, the half a bee.

exempel: vinkeln till math.sin

 funktioner ta 0 eller fler argument, separerade med komma  Inuti funktionsdefinition argumenten nås via namn som kallas parametrar  Antalet argument måste vara samma som antalet parametrar  Exempel på funktion med 1 parameter: def printTwice( bruce ): print bruce, bruce

INTRODUKTION TILL PROGRAMMERING SMD180

Exempel

 värdet som skickas med till en funktionen funktionens argument

16

INTRODUKTION TILL PROGRAMMERING D0009E

17

2

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

INTRODUKTION TILL PROGRAMMERING SMD180

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

Lokala variabler

Programmets tillstånd

 Vad händer om vi definierar en variabel inuti en funktion? Var kan denna variabel användas? def catTwice( part1, part2 ): cat = part1 + part2 printTwice( cat )  Provkörning: >>> chant1 = "Pie Jesu domine, " >>> chant2 = "Dona eis requiem." >>> catTwice( chant1, chant2 ) Pie Jesu domine, Dona eis requiem. Pie Jesu domin... >>> print cat NameError: cat 18

 Variabeldefinitioner på topp-nivån (utanför function) utökar programmets tillstånd  Variabeldefinitioner i en function utökar också programmets tillstånd, men bara tillfälligt medan funktionen körs – därefter försvinner denna del av tillståndet!  Parametrar till en function beter sig precis som lokala variabler i detta avseende  För att hålla koll på vilka variabler som är definierade (samt vart återhoppen ska ske) använder sig programmet internt av en datastruktur som kallas en stack – det senast tillkomna blir det första som ska tas bort 19

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

INTRODUKTION TILL PROGRAMMERING SMD180

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

Vårt exempelprogram igen

INTRODUKTION TILL PROGRAMMERING SMD180

Stack-diagram  Ögonblicksbild just när utskrift sker:

def printTwice( bruce ): print bruce, bruce

-toplevel-

def catTwice( part1, part2 ): cat = part1 + part2 printTwice( cat )

catTwice

printTwice

chant1 = "Pie Jesu domine, " chant2 = "Dona eis requiem." catTwice( chant1, chant2 )

chant1 chant2

"Pie Jesu domine, " "Dona eis requiem."

part1 part2 cat

"Pie Jesu domine, " "Dona eis requiem." "Pie Jesu domine, Dona eis requiem."

bruce

"Pie Jesu domine, Dona eis requiem."

 Tolkning: printTwice är anropad av catTwice, som är anropad av -toplevel- (kallas ibland __main__ eller ?)

20

21

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

INTRODUKTION TILL PROGRAMMERING SMD180

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

Vårt exempelprogram igen, nu med ett fel def printTwice( bruce ): print bruce, bruuce

INTRODUKTION TILL PROGRAMMERING SMD180

Resultat vid körning Traceback (most recent call last): File "", line 1, in -toplevelcatTwice(chant1, chant2) File "", line 3, in catTwice printTwice( cat ) File "", line 2, in printTwice print bruce, bruuce NameError: global name 'bruuce' is not defined >>> Notera överensstämmelsen med stackdiagrammet!

Felstavning!

def catTwice( part1, part2 ): cat = part1 + part2 printTwice( cat ) chant1 = "Pie Jesu domine, " chant2 = "Dona eis requiem." catTwice( chant1, chant2 ) 22

INTRODUKTION TILL PROGRAMMERING SMD180

23

3

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

INTRODUKTION TILL PROGRAMMERING D0009E

L U L E Å T E K N I S K A U N I V E R S I T ET SY ST E M T E K N I K

Om funktioner

INTRODUKTION TILL PROGRAMMERING D0009E

Hemuppgift – ingen redovisning

 En funktion kan: • Orsaka en effekt (t ex utskrift, som printTwice) • Returnera ett resultat (som t ex math.sin) • Eller både och! • Eller ingetdera!

 Skriv en funktion som skriver ut “tvåans” multiplikationstabell på skärmen 2*1,…,2*10 • svårare: • Skriv en funktion som skriver ut alla multiplikationstabeller från 1 till 10

 Vi har hittills negligerat förekomsten av resultat, och koncentrerat oss på funktioner med effekter (ofta också kallade procedurer)  Vi återkommer dock till det mycket centrala begreppet funktionsresultat i föreläsning 5! 24

25

4

View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF