Programowanie w Pythonie(6): Importowanie modułów

Na jednej z wcześniejszych lekcji używaliśmy polecenia import. Był to przykład importowania modułu. Moduły to osobne bloki kodu zawierające zdefiniowane funkcje, z których można korzystać po zaimportowaniu. Jest to szalenie ważna cecha dla dobrego języka programowania, gdyż pozwala ona po pierwsze nie odkrywać księżyca na nowo, gdy chcemy coś zakodować. Po drugie Python może w łatwy sposób łączyć się np. z Raspberry Pi, czy Arduino dzięki temu, że dokonamy importu określonych modułów i będziemy pracować na zawartych tam funkcjach.

Importowanie

Zacznijmy od wpisania w interpreterze krótkiej instrukcji:

1
print(sqrt(25))

Python zwróci nam NameError: name 'sqrt' is not defined, gdyż nie wie czym jest funkcja sqrt().

Warto wiedzieć, że w Pythonie istnieje moduł o nazwie math, który zawiera wiele ciekawych stałych matematycznych i funkcji. Między innymi jest tam funkcja sqrt(). Żeby dostać się do niej, musimy zaimportować cały moduł przy pomocy wyrażenia import.

Trzeba zatem zrobić dwie rzeczy:

  • zaimportować moduł math wyrażeniem import math
  • wywołać funkcję pierwiastka wyrażeniem math.sqrt().

Cała instrukcja powinna wyglądać tak:

1
2
import math
print(math.sqrt(25))

Import jednej funkcji

Ciągłe pisanie math.sqrt() może być lekko dołujące. A jeśli nie chcemy importować całego modułu, tylko potrzebujemy jednej funkcji? Oczywiście da się to zrobić. Wystarczy lekko zmodyfikować instrukcję importu, by wyglądała tak:

1
from math import sqrt

Obiekty tak zaimportowane będą się wywoływać w o wiele przyjemniejszy sposób. Wystarczy teraz zapisać instrukcję

1
print(sqrt(25))

A teraz wszystko co w module

Kiedy wiemy już jak zaimportować jedną funkcję, to importowanie jednej konkretnej będzie pryszczem. To rozwiązanie przyda się w sytuacji, kiedy chcielibyśmy wszystkie zmienne i funkcje w module, ale bez potrzeby ciągłego pisania math. przed nimi.

Wystarczy wykonać uniwersalny import:

1
from math import *

Dlaczego zawsze nie importować w taki sposób. Odpowiedź jest bardzo prosta. Powyższa instrukcja wczyta wszystkie funkcje i zmienne z modułu math, blokując tym samym wiele nazw, które sami chcielibyśmy użyć. Zapisując ją nie będziemy już w stanie użyć funkcji sqrt()abs()min(), czy chociażby max(). O wiele bezpieczniej jest używać import math, a potem wywoływać funkcje za pomocą instrukcji math..

Jeśli chcemy zobaczyć co by się zaimportowało do naszego skryptu po wywołaniu instrukcji from math import *, wywołajmy poniższy kod:

1
2
3
import math
wsio = dir(math)
print wsio

Więcej niż stringi

Wiemy już czym są funkcje i jak działają. Teraz poszerzymy nasz zakres wiedzy. Jak myślisz, co będzie rezultatem wykonania poniższego kodu? Najpierw się zastanów, a potem przepisz kod do interpretera i zobacz, czy miałeś rację.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def najwieksza(*args):
    print max(args)
    return max(args)

def najmniejsza(*args):
    print min(args)
    return min(args)

def odl_od_zera(arg):
    print abs(arg)
    return abs(arg)

najwieksza(-12, -6, 3, 22)
najmniejsza(-12, -6, 3, 22)
odl_od_zera(-20)

Dokładamy nowe funkcje

Funkcja max() zwraca największy element z przedstawionej listy argumentów. Przykładowo kod max(3,5,7,9) zwróci wartość 9.

min() zwróci najmniejszy element z listy. Wypróbuj tę funkcję z własnym zestawem liczb, by przekonać się, jak działa funkcja.

Ostatnia matematyczna funkcja – abs() będzie zwracała wartość bezwzględną z danej liczby, czyli jej odległość od zera. W przeciwieństwie do poprzednich dwóch, abs() przyjmuje tylko jeden argument. Spróbuj zwrócić wartość wyrażenia abs(-827).

Na deser zostawiliśmy dla siebie funkcję type(), która będzie zwracała typ argumentu, jaki zapiszemy w nawiasach. Przykładowo, instrukcje

1
2
3
print(type(1))
print(type(1.2))
print(type("2"))

zwrócą

1
2
3
<type 'int'>
<type 'float'>
<type 'str'>

Podsumowanie

Ćwiczenie 1. Stwórz funkcję spełniającą poniższe warunki:

  • Jej nazwa toantywirus(), a argument to x,
  • Jeśli funkcja dostanie z zewnątrz argument t – powinna zwrócić "Skanuję",
  • Jeśli funkcja dostanie argument n – powinna zwrócić "Skanowanie przerwane",
  • Jeśli argument wejściowy będzie inny niż dwa powyższe, funkcja powinna zwrócić informację "Nie rozumiem".

Ćwiczenie 2. Zaimportuj moduł math w taki sposób jaki jest dla ciebie najwygodniejszy. Wywołaj funkcję sqrt() z liczbą 155151936 jako argument i za pomocą funkcji print(), podaj wynik na ekran.

Nauczyciel matematyki i przedmiotów informatycznych w Dwujęzycznych Szkołach im. Władysława Kopalińskiego w Bielsku-Białej. Autor wielu publikacji poświęconych nauce podstaw programowania, w tym „Scratch. Nauka programowania przez zabawę”, wydanej drukiem przez wydawnictwo Komputer Świat. Entuzjasta wykorzystywania nowych nowoczesnych narzędzi w czasie lekcji. Prywatnie miłośnik koszykówki i aktywnego wykorzystywania czasu.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.