<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FFunkcje</id>
	<title>TI/Funkcje - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FFunkcje"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Funkcje&amp;action=history"/>
	<updated>2026-04-19T17:14:46Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Funkcje&amp;diff=1588&amp;oldid=prev</id>
		<title>Jarekz: /* Przykład */</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Funkcje&amp;diff=1588&amp;oldid=prev"/>
		<updated>2015-05-22T19:46:40Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Przykład&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Wersja z 19:46, 22 maj 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l22&quot; &gt;Linia 22:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 22:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;'&lt;/del&gt;shell_example&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;'&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang= shell_example&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sie ma!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sie ma!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sie ma!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sie ma!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l29&quot; &gt;Linia 29:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 29:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;Jak to działa?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;Jak to działa?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Definiujemy funkcję o nazwie &amp;lt;tt&amp;gt;przywitajSie&amp;lt;/tt&amp;gt; w sposób opisany powyżej. Ponieważ funkcja ta nie używa żadnych parametrów, nie ma więc żadnych zmiennych wewnątrz nawiasów. Zauważ, że możemy wywołać tę samą funkcję dwukrotnie co oznacza, że nie musimy dwa razy pisać tego fragmentu programu.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Definiujemy funkcję o nazwie &amp;lt;tt&amp;gt;przywitajSie&amp;lt;/tt&amp;gt; w sposób opisany powyżej. Ponieważ funkcja ta nie używa żadnych parametrów, nie ma więc żadnych zmiennych wewnątrz nawiasów. Zauważ, że możemy wywołać tę samą funkcję dwukrotnie co oznacza, że nie musimy dwa razy pisać tego fragmentu programu.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Parametry funkcji==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Parametry funkcji==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Funkcje&amp;diff=1585&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot; ==Wprowadzenie== Funkcje to fragmenty programu, które można używać wielokrotnie. Możemy nadać nazwę jakiejś grupie instrukcji i uruchamiać ją używając tej n...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Funkcje&amp;diff=1585&amp;oldid=prev"/>
		<updated>2015-05-22T19:42:53Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot; ==Wprowadzenie== Funkcje to fragmenty programu, które można używać wielokrotnie. Możemy nadać nazwę jakiejś grupie instrukcji i uruchamiać ją używając tej n...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
==Wprowadzenie==&lt;br /&gt;
Funkcje to fragmenty programu, które można używać wielokrotnie. Możemy nadać nazwę jakiejś grupie instrukcji i uruchamiać ją używając tej nazwy w dowolnym miejscu programu tyle razy ile chcemy. Operację taką nazywamy wywołaniem funkcji. Tak naprawdę używaliśmy już wielu wbudowanych funkcji takich jak &amp;lt;tt&amp;gt;len&amp;lt;/tt&amp;gt; czy &amp;lt;tt&amp;gt;range&amp;lt;/tt&amp;gt;. Funkcje są prawdopodobnie najważniejszym składnikiem budującym każdy program (w dowolnym języku programowania), musimy więc poznać je dokładniej.&lt;br /&gt;
&lt;br /&gt;
Funkcje definiujemy w programie używając słowa kluczowego &amp;lt;tt&amp;gt;def&amp;lt;/tt&amp;gt;. Po tym słowie następuje nazwa funkcji oraz para nawiasów, które mogą zawierać nazwy zmiennych (parametrów funkcji), a linia kończy się dwukropkiem. Parametry służą do przekazywania funkcji różnych wartości tzw. wejściowych i uzyskiwania zależnych od nich wyników. Potem następuje blok linii programu, które tworzą funkcję. Poniżej jest przedstawiony przykład '''definicji''' i '''wywołania''' funkcji.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Nazwa pliku: function1.py&lt;br /&gt;
 &lt;br /&gt;
# początek definicji funkcji&lt;br /&gt;
def przywitajSie():&lt;br /&gt;
    print 'Sie ma!' # instrukcje tworzące funkcję&lt;br /&gt;
# koniec definicji funkcji&lt;br /&gt;
 &lt;br /&gt;
przywitajSie() # wywołanie (użycie) funkcji&lt;br /&gt;
przywitajSie() # ponowne wywołanie funkcji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
Sie ma!&lt;br /&gt;
Sie ma!&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Jak to działa?&lt;br /&gt;
Definiujemy funkcję o nazwie &amp;lt;tt&amp;gt;przywitajSie&amp;lt;/tt&amp;gt; w sposób opisany powyżej. Ponieważ funkcja ta nie używa żadnych parametrów, nie ma więc żadnych zmiennych wewnątrz nawiasów. Zauważ, że możemy wywołać tę samą funkcję dwukrotnie co oznacza, że nie musimy dwa razy pisać tego fragmentu programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Parametry funkcji==&lt;br /&gt;
Jak wiemy, funkcja może mieć parametry wywołania. Są to wartości, które dostarczamy funkcji, i których możemy użyć wewnątrz funkcji. Parametry zachowują się tak samo jak zmienne z tą różnicą, że ich wartości są nadawane w momencie wywołania funkcji.&lt;br /&gt;
&lt;br /&gt;
Parametry wpisuje się w nawiasach podczas definiowania funkcji oddzielając je przecinkami. Kiedy wywołujemy funkcję, ich wartości podajemy w taki sam sposób. Uwaga: nazwy, które podaliśmy podczas definiowania funkcji nazywamy parametrami, ale wartości podane przy wywołaniu funkcji nazywamy argumentami.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Nazwa pliku: func_param.py&lt;br /&gt;
 &lt;br /&gt;
def printMax(a, b):&lt;br /&gt;
    if a &amp;gt; b:&lt;br /&gt;
        print a, 'jest większe'&lt;br /&gt;
    elif a == b:&lt;br /&gt;
        print a, 'jest równe', b&lt;br /&gt;
    else:&lt;br /&gt;
        print b, 'jest większe'&lt;br /&gt;
 &lt;br /&gt;
printMax(3, 4) # bezpośrednio podane wartości&lt;br /&gt;
 &lt;br /&gt;
x = 5&lt;br /&gt;
y = 7&lt;br /&gt;
 &lt;br /&gt;
printMax(x, y) # zmienne podane jako argumenty&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
4 jest większe&lt;br /&gt;
7 jest większe&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Jak to działa?&lt;br /&gt;
Definiujemy tutaj funkcję o nazwie &amp;lt;tt&amp;gt;printMax&amp;lt;/tt&amp;gt;, która używa dwóch parametrów o nazwach &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt;. Funkcja ma znaleźć większą z liczb używając instrukcji &amp;lt;tt&amp;gt;if..else&amp;lt;/tt&amp;gt; a następnie wypisać, która liczba jest większa. Podczas pierwszego użycia funkcji &amp;lt;tt&amp;gt;printMax&amp;lt;/tt&amp;gt; podaliśmy bezpośrednio liczby jako argumenty. Przy drugim wywołaniu jako argumentów użyliśmy zmiennych. Instrukcja &amp;lt;tt&amp;gt;printMax(x,y)&amp;lt;/tt&amp;gt; przypisuje wartość pierwszego argumentu (zmiennej &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;) do parametru &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; oraz wartość drugiego argumentu (zmiennej &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt;) do parametru &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt;. Samo wyznaczenie większej liczby i jej wypisanie odbywa się wewnątrz funkcji tak samo za każdym razem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zmienne lokalne==&lt;br /&gt;
Jeśli wewnątrz funkcji zadeklarujemy zmienne, nie mają one żadnego związku ze zmiennymi poza funkcją, nawet jeśli mają takie same nazwy. Mówimy, że nazwy zmiennych wewnątrz funkcji są lokalne dla tej funkcji. Obszar, w którym możemy danej zmiennej używać nazywamy zasięgiem zmiennej. Każda zmienna zdefiniowana w funkcji ma zasięg poczynając od miejsca, w którym po raz pierwszy przypiszemy jej wartość, aż do końca funkcji.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Nazwa pliku: func_local.py&lt;br /&gt;
 &lt;br /&gt;
x = 50&lt;br /&gt;
 &lt;br /&gt;
def func(x):&lt;br /&gt;
    print 'x wynosi', x&lt;br /&gt;
    x = 2&lt;br /&gt;
    print 'Zmieniono lokalne x na', x&lt;br /&gt;
 &lt;br /&gt;
func(x)&lt;br /&gt;
print 'x ciągle wynosi', x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
x wynosi 50&lt;br /&gt;
Zmieniono lokalne x na 2&lt;br /&gt;
x ciągle wynosi 50&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Jak to działa?&lt;br /&gt;
Kiedy po raz pierwszy wypisujemy wartość zmiennej &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;, w pierwszej linii funkcji &amp;lt;tt&amp;gt;func&amp;lt;/tt&amp;gt;, użyta zostaje wartość parametru zadeklarowanego w bloku głównym, powyżej definicji funkcji.&lt;br /&gt;
&lt;br /&gt;
Następnie przypisujemy zmiennej &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; wartość &amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt;. Nazwa &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; jest lokalna dla funkcji, tak więc gdy zmieniamy wartość &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; wewnątrz funkcji, zmienna &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; zdefiniowana w bloku głównym pozostaje niezmieniona.&lt;br /&gt;
&lt;br /&gt;
W momencie ostatniego wywołania polecenia &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt; wypisujemy wartość zmiennej &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; zdefiniowanej w bloku głównym potwierdzając, że nie została ona zmieniona przez przypisanie nowej wartości lokalnej zmiennej &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; wewnątrz poprzednio wywołanej funkcji.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dostęp do zmiennych globalnych===&lt;br /&gt;
Wewnątrz funkcji, odczytywać zmienne zdefiniowane na wyższym poziomie można bez problemu. Jeśli natomiast chcemy przypisywać&lt;br /&gt;
wartość do takiej zmiennej, zdefiniowanej poza zakresem danej funkcji, to trzeba tą zmienną określić jako ''globalną''. Służy do tego deklaracja &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt;. Bez użycia tej deklaracji nie jest możliwe przypisanie wartości zmiennej zdefiniowanej na zewnątrz funkcji &amp;amp;mdash; jedyny efekt takiego przypisania to utworzenie ''lokalnej'' zmiennej o tej nazwie, która zasłania zmienną globalną.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Jakkolwiek można używać wewnątrz funkcji zmiennych zdefiniowanych na zewnątrz funkcji (pod warunkiem, że nie ma wewnątrz funkcji zmiennej o takiej samej nazwie), to nie jest to wskazane i należy unikać takiej sytuacji. Dla osoby czytającej program jest niejasne, do której zmiennej tak naprawdę się odnosimy. Natomiast użycie deklaracji &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; sprawia, że od razu widać, że chodziło nam o zmienną zdefiniowaną w bloku najbardziej zewnętrznym.&lt;br /&gt;
&lt;br /&gt;
No nie: to jest po prostu nieprawda.--~~~~&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Należy powiedzieć precyzyjnie, co tutaj znaczy słowo ''globalna''. W Pythonie zmienną globalną nazywa się zmienną zdefiniowaną bezpośrednio w jakimś module, a nie wewnątrz funkcji czy klasy w tym module. Takie znaczenie jest zupełnie inne niż np. w C, gdzie zmienna globalna o danej nazwie w całym programie może być tylko jedna.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Nazwa pliku: func_global.py&lt;br /&gt;
 &lt;br /&gt;
x = 50&lt;br /&gt;
 &lt;br /&gt;
def func():&lt;br /&gt;
    global x&lt;br /&gt;
 &lt;br /&gt;
    print 'x wynosi', x&lt;br /&gt;
    x = 2&lt;br /&gt;
    print 'Zmieniono zewnętrzny x na', x&lt;br /&gt;
 &lt;br /&gt;
func()&lt;br /&gt;
print 'x wynosi teraz', x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
x wynosi 50&lt;br /&gt;
Zmieniono zewnętrzny x na 2&lt;br /&gt;
x wynosi teraz 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Jak to działa?&lt;br /&gt;
Deklaracja &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; została użyta do poinformowania, że chodzi nam o globalną, zewnętrzną zmienną &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;. Jeśli teraz przypisujemy wartość zmiennej &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; wewnątrz funkcji, zmieniamy wartość &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; z głównego bloku.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Można określić więcej niż jedną zmienną globalną w tej samej deklaracji global, na przykład:&lt;br /&gt;
&amp;lt;tt&amp;gt;global x, y, z&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Wyskakując na moment do [[TI:Moduły|rozdziału o modułach]], należy wspomnieć, że do do zmiennych zdefiniowanych &amp;amp;bdquo;gdzie indziej&amp;amp;ldquo; można się odwoływać podając nazwę modułu który je zawiera. Na przykład zmienna &amp;lt;tt&amp;gt;argv&amp;lt;/tt&amp;gt; zdefiniowana w module &amp;lt;tt&amp;gt;sys&amp;lt;/tt&amp;gt; jest z poza tego modułu dostępna jako &amp;lt;tt&amp;gt;sys.argv&amp;lt;/tt&amp;gt;. Dlatego atrybut &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; służy do dostępu do zmiennych zdefiniowanych na poziomie modułu, ale tylko z wewnątrz tego modułu.&lt;br /&gt;
&lt;br /&gt;
==Domyślne wartości argumentów==&lt;br /&gt;
W przypadku pewnych funkcji nie zawsze chcemy podawać argumenty odpowiadające ''wszystkim'' parametrom określonych w definicji funkcji. Parametry mogą być &amp;amp;bdquo;opcjonalne&amp;amp;ldquo;. Nie  musimy wtedy ich podawać w wyłaniu funkcji, i jeśli tego nie zrobimy zostaną użyte wartości domyślne. Wartości domyślne definiujemy dopisując w definicji funkcji po nazwie parametru znak &amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt; i wartość domyślną.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Nazwa pliku: func_default.py&lt;br /&gt;
 &lt;br /&gt;
def napisz(wiadomosc, razy=1):&lt;br /&gt;
    print wiadomosc * razy&lt;br /&gt;
 &lt;br /&gt;
napisz('Dzień')&lt;br /&gt;
napisz('dobry', 5)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
Dzień&lt;br /&gt;
dobrydobrydobrydobrydobry&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Jak to działa?&lt;br /&gt;
Funkcja o nazwie &amp;lt;tt&amp;gt;napisz&amp;lt;/tt&amp;gt; ma za zadanie wypisać tekst tyle razy ile podano. Jeśli nie podamy ile razy, wtedy domyślnie tekst wypisywany jest jeden raz. Osiągamy to podając wartość domyślną argumentu dla parametru &amp;lt;tt&amp;gt;razy&amp;lt;/tt&amp;gt; równą &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Podczas pierwszego wywołania &amp;lt;tt&amp;gt;napisz&amp;lt;/tt&amp;gt; podajemy tylko tekst i wypisywany jest on jeden raz. Przy drugim wywołaniu &amp;lt;tt&amp;gt;napisz&amp;lt;/tt&amp;gt; podajemy zarówno tekst jak i argument &amp;lt;tt&amp;gt;5&amp;lt;/tt&amp;gt; mówiący, że chcemy napisać tekst 5 razy.&lt;br /&gt;
&lt;br /&gt;
;Uwaga: tylko parametry z końca listy parametrów mogą mieć wartości domyślne. Nie można mieć parametru z wartością domyślną przed parametrem bez wartości domyślnej w kolejności deklaracji na liście parametrów funkcji. Dzieje się tak dlatego, że wartości są przypisywane parametrom zgodnie z ich pozycją na liście. Na przykład deklaracja &amp;lt;tt&amp;gt;def func(a, b=5)&amp;lt;/tt&amp;gt; jest prawidłowa, ale deklaracja &amp;lt;tt&amp;gt;def func(a=5, b)&amp;lt;/tt&amp;gt; nie jest, bo wówczas w wywołaniu &amp;lt;tt&amp;gt;func(11)&amp;lt;/tt&amp;gt; nie byłoby jasne, czy podany argument tyczy się &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; czy &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zaawansowane sposoby przekazywania argumentów==&lt;br /&gt;
===Argumenty nazwane===&lt;br /&gt;
Jeśli chcemy skorzystać z funkcji o dużej liczbie parametrów, wygodne może być jawne użycie nazw parametrów. Działa to tak, że ''w wywołaniu'' funkcji podajemy zarówno nazwę parametru, jak i, tak jak poprzednio, właściwy argument.&lt;br /&gt;
Podanie wartości danego parametru poprzez taki ''nazwany argument'' (po angielsku argumenty takie nazywa się ''keyword arguments''), powoduje, że jego wartość w wywołaniu funkcji jest ustalona i zostaje on wyłączony z normalnego przypisywania argumentów do parametrów według kolejności.&lt;br /&gt;
 &lt;br /&gt;
Rozpoznawanie argumentów po nazwie, a nie kolejności, ma dwie zalety:&lt;br /&gt;
# użycie funkcji jest prostsze, bo nie musimy się martwić o kolejność argumentów&lt;br /&gt;
# możemy podać wartości tylko tych argumentów, których chcemy (pod warunkiem, że parametry które pomieliśmy mają określone wartości domyślne).&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Nazwa pliku: func_key.py&lt;br /&gt;
 &lt;br /&gt;
def func(a, b=5, c=10):&lt;br /&gt;
    print 'a wynosi', a, 'oraz b wynosi', b, 'oraz c wynosi', c&lt;br /&gt;
 &lt;br /&gt;
func(3, 7)&lt;br /&gt;
func(25, c=24)&lt;br /&gt;
func(c=50, a=100)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
a wynosi 3 oraz b wynosi 7 oraz c wynosi 10&lt;br /&gt;
a wynosi 25 oraz b wynosi 5 oraz c wynosi 24&lt;br /&gt;
a wynosi 100 oraz b wynosi 5 oraz c wynosi 50&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Jak to działa?&lt;br /&gt;
Funkcja o nazwie &amp;lt;tt&amp;gt;func&amp;lt;/tt&amp;gt; ma jeden parametr bez wartości domyślnej, oraz dwa parametry posiadające wartości domyślne.&lt;br /&gt;
* Przy pierwszym użyciu, &amp;lt;tt&amp;gt;func(3, 7)&amp;lt;/tt&amp;gt;, parametr &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; dostaje wartość &amp;lt;tt&amp;gt;3&amp;lt;/tt&amp;gt;, parametr &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt; dostaje wartość &amp;lt;tt&amp;gt;7&amp;lt;/tt&amp;gt;, a parametr &amp;lt;tt&amp;gt;c&amp;lt;/tt&amp;gt; dostaje wartość domyślną &amp;lt;tt&amp;gt;10&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Przy drugim użyciu, &amp;lt;tt&amp;gt;func(25, c=24)&amp;lt;/tt&amp;gt;, zmienna &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; dostaje wartość &amp;lt;tt&amp;gt;25&amp;lt;/tt&amp;gt; ze względu na pozycję na liście argumentów. Parametr &amp;lt;tt&amp;gt;c&amp;lt;/tt&amp;gt; dostaje wartość &amp;lt;tt&amp;gt;24&amp;lt;/tt&amp;gt; ze względu na użycie jego nazwy. Zmienna &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt; dostaje wartość domyślną &amp;lt;tt&amp;gt;5&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Przy trzecim użyciu, &amp;lt;tt&amp;gt;func(c=50, a=100)&amp;lt;/tt&amp;gt;, używamy wyłącznie nazw jako argumentów do podania wartości. Zauważ, że podajemy wartość parametru &amp;lt;tt&amp;gt;c&amp;lt;/tt&amp;gt; przed parametrem &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt;, mimo że &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; jest podany przed &amp;lt;tt&amp;gt;c&amp;lt;/tt&amp;gt; w definicji funkcji.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Użycie argumentu nazwanego nazwą która nie odpowiada żadnemu parametrowi jest błędem.&lt;br /&gt;
&lt;br /&gt;
===Zmienna liczba parametrów===&lt;br /&gt;
Czasami wygodnie byłoby zdefiniować funkcję, która przyjmowałaby dowolną liczbę parametrów, tak jak polecenie &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt;. Można to uzyskać dodając na końcu listy parametrów zmienną, do której zostanie wpisana lista &amp;amp;bdquo;nadmiarowych&amp;amp;ldquo; argumentów. Ten specjalny parametr jest oznaczony przez gwiazdkę przed jego nazwą.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; def powypisuj(rozdzielacz, pierwsze, *reszta)&lt;br /&gt;
...    &amp;quot;&amp;quot;&amp;quot;Wypisuje podane słowa używając pierwszego argumentu&lt;br /&gt;
...       jako rozdzielacza.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
...    print pierwsze&lt;br /&gt;
...    for slowo in reszta:&lt;br /&gt;
...    	   print rozdzielacz, slowo,&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; powypisuj('-x-', 'ala', 'ma', 'kota')&lt;br /&gt;
ala-x-ma-x-kota&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; powypisuj('-x-', 'ala')&lt;br /&gt;
ala&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; powypisuj('-x-')&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
TypeError: powypisuj() takes at least 2 arguments (1 given)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== W jaki sposób argumenty zostają przyporządkowane? ====&lt;br /&gt;
Argumenty nazwane nie mogą występować tylko na końcu listy argumentów, lub patrząc od drugiej strony, argumenty ''nienazwane'' muszą znajdować się na początku.&lt;br /&gt;
Podane argumenty są przyporządkowywane parametrom w ten sposób, że najpierw argumenty bez zadanej nazwy parametru zostają przydzielone do odpowiednich parametrów w kolejności, a potem argumenty nazwane zostają przydzielone do odpowiednich parametrów według nazwy. Tak więc, jeśli argumentów jest więcej niż parametrów &amp;amp;bdquo;bez gwiazki&amp;amp;ldquo;, to trafią one do zmiennej &amp;amp;bdquo;z gwiazdką&amp;amp;ldquo;.&lt;br /&gt;
&lt;br /&gt;
Błędem jest jeśli jakiemuś parametrowi zostaną przyporządkowane dwa argumenty &amp;amp;mdash na przykład jeden zwykły, a drugi nazwany.&lt;br /&gt;
&lt;br /&gt;
=== Zmienna liczba argumentów nazwanych ===&lt;br /&gt;
Istnieje jeszcze jeden sposób przekazywania zmiennej liczby parametrów, w formie [[TI:Struktury danych#Słowniki|słownika]]. Ponieważ słowniki będą omówione dopiero w rozdziale o [[TI:Struktury danych|strukturach danych]], to reszta tego podrozdziału może być niezrozumiała. Jeśli tak, to nie przejmuj się i najpierw poczytaj o słownikach.&lt;br /&gt;
&lt;br /&gt;
Funkcja może mieć jeszcze jeden specjalny parametr &amp;amp;mdash; poprzedzony dwoma gwiazkami, zwyczajowo nazywający się &amp;lt;tt&amp;gt;**kwargs&amp;lt;/tt&amp;gt;. W wywołaniu takiej funkcji można użyć argumentów nazwanych, których nazwy nie odpowiadają żadnym parametrom funkcji. Te argumenty zostają wstawione do słownika, który zostaje przekazany jako parametr &amp;lt;tt&amp;gt;kwargs&amp;lt;/tt&amp;gt; do funkcji.&lt;br /&gt;
W tym słowniku, nazwy argumentów są kluczami, a ich wartości wartościami przypisanymi do tych kluczy.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; def f(*args, **kwargs):&lt;br /&gt;
...     print 'args =', args&lt;br /&gt;
...     print 'kwargs =', kwargs&lt;br /&gt;
...&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; f(1, 2, 3, a=4, b=5, c=6)&lt;br /&gt;
args = (1, 2, 3)&lt;br /&gt;
kwargs = {'a': 4, 'b': 5, 'c': 6}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
$ python total.py&lt;br /&gt;
   166&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Nazwa pliku: total.py&lt;br /&gt;
 &lt;br /&gt;
def wszystkie(poczatkowo=5, *ilosci, **nazwy):&lt;br /&gt;
    ile = poczatkowo&lt;br /&gt;
    for ilosc in ilosci:&lt;br /&gt;
        ile += ilosc&lt;br /&gt;
    for key in nazwy:&lt;br /&gt;
        ile += nazwy[key]&lt;br /&gt;
    return count&lt;br /&gt;
 &lt;br /&gt;
print(wszystkie(10, 1, 2, 3, warzywa=50, owoce=100))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
   $ python total.py&lt;br /&gt;
   166&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Jak to działa?====&lt;br /&gt;
Kiedy deklarujemy parametr z gwiazdką, taki jak &amp;lt;tt&amp;gt;*param&amp;lt;/tt&amp;gt;, wtedy wszystkie argumenty rozpoznawane po ich kolejności (bez podania nazwy), jakie podaliśmy przy wywołaniu zostaną zebrane w krotkę o nazwie &amp;lt;tt&amp;gt;param&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Podobnie, jeśli zadeklarujemy parametr z dwiema gwiazdkami, jak na przykład &amp;lt;tt&amp;gt;**param&amp;lt;/tt&amp;gt;, wtedy wszystkie argumenty z podanymi nazwami zostaną zebrane w słownik o nazwie &amp;lt;tt&amp;gt;param&amp;lt;/tt&amp;gt;.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Polecenie return==&lt;br /&gt;
Dotychczas rozważane funkcje wykonywały pewne polecenia ale nie oczekiwaliśmy od nich aby '''zwracały''' jakieś wartości (tzn. nie potrzebowaliśmy aby wartości wyliczone albo obiekty wytworzone w funkcji były dostępne w miejscu, z którego wywołaliśmy funkcję). &lt;br /&gt;
&lt;br /&gt;
Polecenie &amp;lt;tt&amp;gt;return&amp;lt;/tt&amp;gt; jest używane do '''powrotu''' z funkcji czyli natychmiastowego przerwania jej wykonania i zwrócenia wartości.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Nazwa pliku: func_return.py&lt;br /&gt;
 &lt;br /&gt;
def maksimum(x, y):&lt;br /&gt;
    if x &amp;gt; y:&lt;br /&gt;
        return x&lt;br /&gt;
    else:&lt;br /&gt;
        return y&lt;br /&gt;
 &lt;br /&gt;
print maksimum(2, 3)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Jak to działa?&lt;br /&gt;
Funkcja &amp;lt;tt&amp;gt;maksimum&amp;lt;/tt&amp;gt; zwraca większy ze swoich parametrów, czyli liczb przekazanych do funkcji. Do znalezienia większej z liczb użyta jest instrukcja &amp;lt;tt&amp;gt;if..else&amp;lt;/tt&amp;gt;, po znalezieniu ta wartość jest zwracana.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Uwaga: instrukcja &amp;lt;tt&amp;gt;return&amp;lt;/tt&amp;gt; bez podanej wartości jest równoważna instrukcji &amp;lt;tt&amp;gt;return None&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;None&amp;lt;/tt&amp;gt; jest obiektem języka Python reprezentującym brak wartości. Jest on używany na przykład do zaznaczenia, że jakaś zmienna nie ma wartości.&lt;br /&gt;
&lt;br /&gt;
Każda funkcja domyślnie zawiera instrukcję &amp;lt;tt&amp;gt;return None&amp;lt;/tt&amp;gt; na końcu. Można to zaobserwować wywołując &amp;lt;tt&amp;gt;print jakasFunkcja()&amp;lt;/tt&amp;gt;, gdzie funkcja &amp;lt;tt&amp;gt;jakasFunkcja&amp;lt;/tt&amp;gt; nie używa instrukcji &amp;lt;tt&amp;gt;return&amp;lt;/tt&amp;gt;, na przykład:&lt;br /&gt;
====Przykład====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;shell_example&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; def jakasFunkcja():&lt;br /&gt;
...     pass&lt;br /&gt;
...&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print jakasFunkcja()&lt;br /&gt;
None&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Instrukcja &amp;lt;tt&amp;gt;pass&amp;lt;/tt&amp;gt; jest w języku Python używana do oznaczenia pustego bloku instrukcji.&lt;br /&gt;
&lt;br /&gt;
Uwaga:&amp;lt;br&amp;gt;&lt;br /&gt;
Istnieje wbudowana funkcja &amp;lt;tt&amp;gt;max&amp;lt;/tt&amp;gt;, która wyszukuje większą z liczb. Jeśli tylko to możliwe należy używać funkcji wbudowanych, a nie pisać własne.&lt;br /&gt;
&lt;br /&gt;
== Opisy wbudowane w funkcje ==&lt;br /&gt;
W Pythonie istnieje wygodna możliwość uzupełniania programu o objaśnienia&amp;amp;ndash;dokumentację. &lt;br /&gt;
W ogólności programista może umieszczać swoje uwagi jako komentarze (wykorzystując znak &amp;lt;tt&amp;gt;#&amp;lt;/tt&amp;gt;), które są po prostu ignorowane w trakcie wykonywania programu, lub jako&lt;br /&gt;
napisy wstawione na początku definicji funkcji (wykorzystując znaki normalnie używane do ograniczania napisów, czyli &amp;lt;tt&amp;gt;'&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;&amp;quot;&amp;lt;/tt&amp;gt;). Ta druga forma ma tę przewagę, że mimo iż w trakcie normalnego wykonywania programu jest pomijana podobnie jak zwykłe komentarze, to te napisy zostają także zachowane od specjalnej zmiennej i można je obejrzeć. W trybie interaktywnej pracy z Pythonem służy do tego funkcja &amp;lt;tt&amp;gt;help&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Linie tekstu z dokumentacją nazywają się po angielsku ''documentation strings'', co skraca się do ''docstrings''. Przez ''docstring'' rozumie się tylko taki napis umiejscowiony na początku funkcji (lub klasy czy modułu, mechanizm jest ten sam) stanowiący dokumentację. &lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Nazwa pliku: func_doc.py&lt;br /&gt;
 &lt;br /&gt;
def printMax(x, y):&lt;br /&gt;
    '''Konwertuje obydwa obiekty na int i wypisuje większą z dwóch liczb.&lt;br /&gt;
&lt;br /&gt;
    Niepowodzenie konwersji powoduje rzucenie wyjątku ValueError.&lt;br /&gt;
    '''&lt;br /&gt;
    x = int(x) # konwersja do liczby całkowitej (integer), jeśli możliwa&lt;br /&gt;
    y = int(y)&lt;br /&gt;
 &lt;br /&gt;
    if x &amp;gt; y:&lt;br /&gt;
        print x, 'jest większa'&lt;br /&gt;
    else:&lt;br /&gt;
        print y, 'jest większa'&lt;br /&gt;
 &lt;br /&gt;
printMax(3, 5)&lt;br /&gt;
print(printMax.__doc__)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Rezultat&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='shell_example'&amp;gt;&lt;br /&gt;
5 jest większa&lt;br /&gt;
Konwertuje obydwa obiekty na int i wypisuje większą z dwóch liczb.&lt;br /&gt;
&lt;br /&gt;
    Niepowodzenie konwersji powoduje rzucenie wyjątku ValueError.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Używanie ''DocString''====&lt;br /&gt;
Napis w pierwszym logicznym wierszu funkcji staje się ''docstring''-iem dla tej funkcji. Dodajmy, że ''DocStrings'' również stosują się do modułów i klas, o których będzie mowa później.&lt;br /&gt;
&lt;br /&gt;
Konwencją stosowaną dla dokumentacji jest napis w kilku wierszach. Pierwszy wiersz zaczyna się wielką literą i kończy kropką. Następny wiersz jest pusty, a w trzecim wierszu rozpoczynamy dokładniejsze objaśnienia. Jest bardzo wskazane, aby stosować się do tej konwencji opisując napisane przez siebie funkcje.&lt;br /&gt;
&lt;br /&gt;
Możemy odczytać ''dosctring'' jakiejś funkcji (na przyklad &amp;lt;tt&amp;gt;printMax&amp;lt;/tt&amp;gt;) używając jej ''atrybutu'' (czyli nazwy należącej do funkcji) &amp;lt;tt&amp;gt;__doc__&amp;lt;/tt&amp;gt; (zauważ użycie po dwóch znaków podkreślenia). Atrybuty są częścią ''obiektów'', którymi są też funkcje. O obiektach będzie mowa w następnych rozdziałach.&lt;br /&gt;
&lt;br /&gt;
Używając pomocy &amp;lt;tt&amp;gt;help()&amp;lt;/tt&amp;gt; w Pythonie robimy użytek z ''docstring''ow. Funkcja &amp;lt;tt&amp;gt;help()&amp;lt;/tt&amp;gt; pobiera z funkcji jej atrybut &amp;lt;tt&amp;gt;__doc__&amp;lt;/tt&amp;gt; i wypisuje go. Możesz to wypróbować na powyższej funkcji &amp;amp;mdash; napisz w swoim programie &amp;lt;tt&amp;gt;help(printMax)&amp;lt;/tt&amp;gt;. Pamiętaj, żeby nacisnąć klawisz &amp;lt;tt&amp;gt;q&amp;lt;/tt&amp;gt;, żeby zakończyć pomoc &amp;lt;tt&amp;gt;help&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Automatyczne narzędzia programistyczne pobierają dokumentację z twoich programów właśnie w taki sposób. Dlatego dobrze jest używać ''docstring''s do każdej napisanej funkcji. Komenda &amp;lt;tt&amp;gt;pydoc&amp;lt;/tt&amp;gt;, dostępna w dystrybucji języka Python działa podobnie do funkcji &amp;lt;tt&amp;gt;help()&amp;lt;/tt&amp;gt; używając ''docstring''s.&lt;br /&gt;
&lt;br /&gt;
=== Co powinna zawierać dokumentacja funkcji ===&lt;br /&gt;
Nawet krótka dokumentacja funkcji może być bardzo pomocna. Co powinno się w niej znaleźć?&lt;br /&gt;
# Jednolinijkowy opis działania wykonywanego przez funkcję: &amp;amp;bdquo;Mnoży wektorowo argumenty i zwraca ślad wyniku.&amp;amp;rdquo;&lt;br /&gt;
# Nie ma potrzeby pisać, czym jest opisywany obiekt (w tym przypadku funkcją), ani duplikować listy parametrów, bo użytkownik i tak to wie z opisu wygenerowanego automatycznie: &amp;lt;strike&amp;gt;&amp;amp;bdquo;To jest funkcja która ma parametry a, b, c.&amp;amp;rdquo;&amp;lt;/strike&amp;gt;&lt;br /&gt;
# Dobrze jest napisać co funkcja zwraca, jeśli coś zwraca.&lt;br /&gt;
# Jeśli funkcja ma być wykorzystywana przez innych jako funkcja biblioteczna, to opis musi być znacznie dłuższy &amp;amp;mdash; powinien zawierać głębsze wyjaśnienie tego co funkcja robi, jeśli to jest istotne jakie ma ograniczenia i warunki działania.&lt;br /&gt;
# W przypadku funcji złożonych obliczeniowo, dobrze jest napisać jak czas wykonywania funkcji rośnie wraz ze wzrostem rozmiaru argumentów wejściowych.&lt;br /&gt;
# Dobrze jest podać przykład użycia funkcji i oczekiwanego wyniku. Zob. http://docs.python.org/library/doctest.html .&lt;br /&gt;
&lt;br /&gt;
''Docstrings'' to ważne narzędzie, którego warto używać, bo dzięki dokumentacji program jest łatwiejszy do zrozumienia.&lt;br /&gt;
&lt;br /&gt;
==Ćwiczenia==&lt;br /&gt;
Proszę napisać następujące funkcje:&lt;br /&gt;
# Która wypisuje sumę dwóch argumentów.&lt;br /&gt;
# Która zwraca sumę dwóch argumentów.&lt;br /&gt;
# Wypisującą wynik dzielenia zmiennoprzecinkowego dla dwóch dowolnych argumentów będących liczbami.&lt;br /&gt;
# Obliczającą i zwracającą pierwiastek zadanego stopnia &amp;amp;mdash; w liście parametrów podajemy liczbę podpierwiastkową i stopień pierwiastka, domyślnie niech wynosi on dwa.&lt;br /&gt;
# Wypisującą równanie prostej przechodzącej przez współrzędne dwóch zadanych punktów.&lt;br /&gt;
# Wypisującą jedno lub dwa rozwiązania równania kwadratowego &amp;lt;math&amp;gt;a x^2+b x +c = 0&amp;lt;/math&amp;gt;, lub informującą, że nie ma rozwiązań rzeczywistych. Parametrami funkcji niech będą &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; &amp;amp;mdash; współczynniki równania kwadratowego.&lt;br /&gt;
# Zwracającą silnię argumentu. Zadanie proszę rozwiązać na dwa sposoby &amp;amp;mdash; raz z użyciem pętli, a drugi raz rekurencyjnie.&lt;br /&gt;
# Wypisującą żądaną liczbę wyrazów ciągu Fibbonacciego. (&amp;lt;math&amp;gt;F_0=0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F_1=1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F_n=F_{n-1}+F_{n-2}&amp;lt;/math&amp;gt;)&lt;br /&gt;
# Służącą do obliczania &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-tego elementu ciągu arytmetycznego o zadanym wyrazie początkowym i różnicy. Funkcja powinna dawać możliwość wypisywania wyników pośrednich (elementów ciągu od pierwszego do przedostatniego obliczonego).&lt;br /&gt;
# Służącą do obliczania &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-tego elementu ciągu geometrycznego o zadanym wyrazie początkowym i ilorazie. Funkcja powinna dawać możliwość wypisywania wyników pośrednich (elementów ciągu od pierwszego do przedostatniego obliczonego).&lt;br /&gt;
# Służącą do obliczania &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-tej sumy częściowej ciągu arytmetycznego o zadanym wyrazie początkowym i różnicy. Funkcja powinna dawać możliwość wypisywania wyników pośrednich (kolejno obliczanych elementów ciągu i sum).&lt;br /&gt;
# Służącą do obliczania &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-tej sumy częściowej ciągu geometrycznego o zadanym wyrazie początkowym i ilorazie. Funkcja powinna dawać możliwość wypisywania wyników pośrednich (kolejno obliczanych elementów ciągu i sum).&lt;br /&gt;
# Służącą do obliczania &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-tej sumy częściowej ciągu &amp;lt;math&amp;gt;1/n^m&amp;lt;/math&amp;gt;, gdzie &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; są parametrami. Funkcja powinna dawać możliwość wypisywania wyników pośrednich (kolejno obliczanych elementów ciągu i sum).&lt;br /&gt;
# Funkcję obliczającą długość wektora jedno-, dwu- lub trójwymiarowego.&lt;br /&gt;
# Funkcję, która zwróci napis będący reprezentacją podanej liczby całkowitej. Tę &amp;amp;bdquo;konwersję na napis&amp;amp;rdquo; wykonaj cyfra po cyfrze.&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>