Rozdział 2. Gython – język skryptowy systemu AdvancedMiner

Spis treści

Podstawy języka Python
Składnia
Zmienne
Operatory
Sterowanie przepływem
Obiekty w języku Gython
Definiowanie i wywoływanie funkcji
Metody dla zmiennych różnych typów
Metody dla literałów łańcuchowych
Metody list
Metody słowników
Funkcje ze standardowych bibliotek Gython-a
Wbudowane funkcje
Funkcje działające na literałach łańcuchowych
Funkcje matematyczne
Funkcje pseudolosowe
Obiekty date i time
Zarządzanie obiektami w Gythonie
Konstrukcja i odczyt
Zapisywanie obiektów
Wczytywanie obiektów
Zmiana nazw oiektów
Wykonywanie zadań
usuwanie obiektów
Checking object existence
Przerywanie zadań
Zapisywanie środowiska skryptowego
Wczytywanie środowiska skryptowego
Tworzenie aliasu do repozytorium metadanych
Logowanie wiadomości
Registry Repository
Ścieżka projektu
Skrypty kontekstowe
Działanie skryptów kontekstowych
Gdzie znajdują się skrypty kontekstowe?
Tworzenie skryptów kontekstowych
Uzyskiwanie informacji od użytkownika za pomocą okna InputDialog

Gython jest językiem skryptowym wykorzystywanym w systemie AdvancedMiner do przetwarzania danych, opartym na języku Python.

Podstawy języka Python

W tym rozdziale omówione są podstawy jeżyka Python niezbędne do pracy z systemem AdvancedMiner.

Poniższa tabela zawiera wybrane zasoby www poświęcone językowi Python.

Tabela 2.1. Zasoby sieciowe dot. języka Python

OpisAdres
Strona oficjalnahttp://www.python.org/doc/
Pełna dokumentacjahttp://python.org/doc/2.1/index.html
Samouczekhttp://python.org/doc/2.1/tut/tut.html
Opis dostępnych bibliotekhttp://pydoc.org/2.1
Informacje o integracji Javy i Pythonahttp://www.jython.org/jythonbook/en/1.0/JythonAndJavaIntegration.html

Składnia

Instrukcje w Pythonie są rozdzielane znakiem nowego wiersza. Zasięg (zmiennych) jest oznaczany wcięciem za pomocą spacji lub tabulatorów.

Komentarze w kodzie zaczynają się od znaku '#' i wszystkie znaki następujące po '#' są ignorowane przez interpreter.

Przykład 2.1. Składnia:

# this is a comment

number=1
character='c'   # this is also a comment
if number == 1 :
     print character
number = 2
    

Wynik:

c
    

Zmienne

Nazwy zmiennych są wrażliwe na wielkość liter i muszą się rozpoczynać od litery alfabetu angielskiego lub znaku podkreślenia ('_'). Poza pierwszym znakiem, nazwy zmiennych mogą zawierać litery alfabetu angielskiego, cyfry i znak podkreślenia.

W Pythonie typ zmiennej jest określany w momencie przypisania jej wartości i może zostać zmieniony w przypadku ponownego przypisania.

Najczęściej stosowane typy danych:

  • Liczby (całkowite i zmiennoprzecinkowe)

  • Literały łańcuchowe

  • Listy, czyli uporządkowane ciągi elelentów. W skryptach są zapisywane jako ciągi oddzielonych przecinkami elementów zamknięte w nawiasach kwadratowych.

  • Słowniki to zbiory par postaci klucz : wartość, oddzielonych przecinkami i zawartych w nawiasach klamrowych. Patrz przykład poniżej.

Przykład 2.2. Zmienne:

  # Numbers
print "Numbers:"
a = 10                                             # integer number
b = 1.5                                            # floating point number
i, j, k = 1.5, 2.6, 3.7                            # quick variable assignment

print a
print b
b = 3                                              # b is an integer number now
print b
print i, j, k

  # Strings
print "String:"
str = "This is a example string"
print str

  # lists
print "Lists:"
l1 = ['circle', 'triangle', 'box']                # a simple list with 3 strings
l2 = [l1, 'point']                                # a list containing another list and one string

print l2
print l2[0]
print l2[0][1]                                    # accessing elements of a nested list
print l2[1]

  # dictionaries
print "Dictionaries:"
dict = {'Mary': 'cat', 'John': 'dog', 'Bob': 'chicken'}

print "Mary has a", dict['Mary']
    

Wynik:

Numbers:
10
1.5
3
1.5 2.6 3.7
String:
This is a example string
Lists:
[['circle', 'triangle', 'box'], 'point']
['circle', 'triangle', 'box']
triangle
point
Dictionaries:
Mary has a cat
    

Operatory

Operatory arytmetyczne

przypisanie wartości( = ):

Przykład 2.3. Przypisywanie wartości:

number = 10                  # a simple assignment
str = 'a string'
var1 = var2 = var3 = 3
var4, var5 = 4, 5

print "This is "+str
print "var1 =", var1,"var2 =",var2,"var3 =",var3

print "before swap: var4=",var4,"var5=",var5
(var4, var5) = (var5, var4)    # swap variables
print "after swap: var4=",var4,"var5=",var5

sum = var4 + var5
print "Sum of var4 and var5 equals",sum
    

Output:

This is a string
var1 = 3 var2 = 3 var3 = 3
before swap: var4= 4 var5= 5
after swap: var4= 5 var5= 4
Sum of var4 and var5 equals 9
    
dodawanie i odejmowanie:

Przykład 2.4. Dodawanie i odejmowanie:

a=2
b=3
sum = a + b
sub = b - a
print "a + b =", sum
print "b - a =", sub
    

Wynik:

a + b = 5
b - a = 1
    
dzielenie ( / ) i dzielenie z resztą ( % ):

Przykład 2.5. Dzielenie:

a = 7.0
b = 3
c = a / b
d= a % b

print "a / b =", c
print "a % b =", d
    

Wynik:

a / b = 2.3333333333333335
a % b = 1.0
    
mnożenie ( * ) i potęgowanie ( ** ):

Przykład 2.6. Mnożenie i potęgowanie:

a = 2
b = 4
c = a * b
d = a ** 2

print "a * b =",c
print "a ** 2 =",d
    

Output:

a * b = 8
a ** 2 = 4
    
łączenie ( + ) i powtarzanie ( * ) literałów łańcuchowych :

Przykład 2.7. Konkatenacja i zwielokrotnianie literałów:

str1 = "AdvancedMiner"
str2 = "System"

name = str1 + " " + str2
print "." * 20
print name
print "." * 20
    

Wynik:

....................
AdvancedMiner System
....................
    

Operatory poró∑nujące

Tabela 2.2. Operatory porównujące w Pythonie

Rodzaj porównaniaSymbol
mniej niż<
więcej niż>
nie więcej niż<=
nie mniej niż>=
równy==
różny!=

Operatory logiczne

Tabela 2.3. Operatory logiczne w Pythonie

W języku Pyhton są dwie stałe logiczne True i False (prawda i fałsz). Ponadto, każdy obiekt ma wartość logiczną.

  • Liczby różne od zera mają wartość logiczną True, zero ma wartość logiczną False.
  • Literał łańcuchowy lub lista o niezerowej długości ma wartość True, a jeżeli ma zerową długość, to False.
  • Słownik zawierający co najmniej jedną parę ma wartość True, pusty słownik ma wartość False.

SymbolWartość logiczna
negacja (not x) True jeśli x ma wartość logiczną False, False w p.p.
koniunkcja (x and y) jeśli x ma wartość logiczną False to wartość logiczna x, w p.p. wartość logiczna y.
alternatywa (x or y) jeśli x ma wartość logiczną False to wartość logiczna y, w p.p. wartość logiczna x
wbudowana funkcja
bool(expr)
wartość logiczna wyrażenia expr.
None, zera liczbowe, puste literały, listy, słowniki False
pozostałe wartościTrue

Sterowanie przepływem

instrukcja warunkowaif

Instrukcja if służy do warunkowego wykonywania kodu, może zawierać opcjonalne klauzulę elif i klazulę else.

Przykład 2.8. Instrukcja if:

a=1
b=2
if a > b :
   print "a is greater than b"
elif a < b:
   print "b is greater than a"
else:
   print "a is equal to b"
    

Wynik:

b is greater than a
    
pętla while

Pętla while służy do powtarzania danego bloku kodu tak długo, jak długo spełniony jest podany warunek logiczny. Pętlę można opuścić za pomocą instrukcji break, a do pominięcia reszty instrukcji w bieżącej iteracji pętli służy instrukcja continue.

Przykład 2.9. Pętla while:

i = 0
while i<10 :
   i = i + 1
   if i == 8 :
      print "breaking the loop"
      break
   if i == 3 :
      print "jump to the beginning of the loop"
      continue
   print i
    

Wynik:

1
2
jump to the beginning of the loop
4
5
6
7
breaking the loop
    
for

Pętla for iteruje po podanej liście wartości, instrukcje continue i break działają tak samo, jak w przypadku pętli while.

Notatka

Za pomocą funkcji range można ad hoc wygenerować listę wartości całkowitoliczbowych z podanego przedziału. Funkcja range przyjmuje jeden, dwa lub trzy argumenty.

Składnia:

range(n)       # zwraca listę liczb całkowitych from 0 to n-1
range(m, n)    # zwraca listę liczb całkowitych od m do n-1
range(m, n, k) # zwraca listę liczb całkowitych od m do n-1 z odstępem k
                            

Przykład 2.10. Pętla for:

for i in range(10,200,10):
   if i == 90 :
      print "breaking the loop"
      break
   if i == 50 :
      print "jump to the beginning of the loop"
      continue
   print i
    

Wynik:

10
20
30
40
jump to the beginning of the loop
60
70
80
breaking the loop
    
instrukcja pass

Instrukcja pass jest używana, gdy trzeba utworzyć pusty blok kodu.

Przykład 2.11. Instrukcja pass:

for i in range(1,10):
   if i == 4:
      pass    #do nothing when i is equal 4, pass statement is
              #required because of python syntax
   else:
      print i,
    

Wynik:

1 2 3 5 6 7 8 9
    

Obiekty w języku Gython

W skrypptach języka Gython obiekty pojawiają się bardzo często. Omawiamy tutaj, jak należy tworzyć obiekty i korzystać z ich atrybutów.

Przykład 2.12. Tworzenie obiektów:

# tworzenie nowej instancji obiektu z klasy ClassificationFunctionSettings
cfs = ClassificationFunctionSettings()

# czasami trzeba też podać parametr
pd = PhysicalData('train_data_name')
                

Przykład 2.13. Praca z obiektami 2:

#set the value of the attribute 
cfs = ClassificationFunctionSettings()
cfs.setName('classFunSet_1')

# access the value of the attribute
print cfs.getName()
    

Wynik:

classFunSet_1
    

Definiowanie i wywoływanie funkcji

Funkcja to blok kodu, któremu nadano unikalną nazwę. Funkcje można wywoływać podająć ciąg parametrów i mogą one zwracać różne wartości lub obiekty. Definicję funkcji rozpoczyna się od instrukcji def:

Przykład 2.14. Definiowanie i wywoływanie funkcji

def getCubic(x):
   print "Computing x*x*x"
   return x * x * x

print getCubic(3)
    

Wynik:

Computing x*x*x
27