Kodomo

Пользователь

Учебная страница курса биоинформатики,
год поступления 2014

Памятка к практикуму 11

Функции

Функция - это часть питоновской программы, у которой есть имя, входы (аргументы) и выход (результат).

Функция задается так:

   1 def name(arg1, arg2, ...):
   2     """
   3     Does something
   4     """
   5     return result

Код функции пишется с отступом. Функция может принимать не менее 0 аргументов, после имени функции в скобках перечисляются имена, под которыми её аргументы будут известны внутри функции. (Если аргументов 0 (нет), то пишутся пустые круглые скобки, если аргумент один, то пишется только его имя, без запятой после него.)

Чтобы вернуть результат, в функции пишется ключевое слово return, после которого пишется то, что возвращаем. Если исполнение дошло до return, функция прекращает работу, даже если в ней есть ещё код, расположенный ниже return.

Если функция ничего не возвращает, то return можно не писать.

Напишем функцию, считающую квадрат числа и используем её:

   1 def sqr(x):
   2     """
   3     Return square of an argument
   4     """
   5     return x ** 2
   6 
   7 a = float(raw_input("Enter the number: "))
   8 b = sqr(a)
   9 print(b)

Обратите внимание, что число a внутри функции sqr называется x, потому что так называется её первый аргумент.

Встретив def python запоминает функцию, но ее команд не выполняет. Выполнение функции происходит в строчке b = sqr(a)

Еще один пример:

   1 def abs_value(x):
   2     """
   3     Return absolute value of an argument
   4     """
   5     if x >= 0:
   6         return x 
   7     else:
   8         return -x
   9 
  10 a = float(raw_input("Enter the number: "))
  11 b = abs_value(a)
  12 print(b)

Дополнительный материал про рекурсивные функции

Модули

Модулем называется питоновский файл, содержащий функции.

Предположим, у нас есть модуль foo.py, содержащий функцию sqr, которая возвращает квадрат своего аргумента:

   1 def sqr(x):
   2     """
   3     Return square of an argument
   4     """
   5     return x ** 2

Воспользуемся этим модулем из файла bar.py:

   1 import foo
   2 
   3 print(foo.sqr(3)) # prints 9

Дополнительный материал про модули

Из недосказанного

Метод .read(), будучи вызванным на файловом объекте, возвращает содержимое файла как одну строку. Если файл уже читали (например, преобразовывали его в список строк), этот метод (как и .readline()) не сработает.

(А что будет, если сначала вызвать .readline(), а затем .readlines() или .read()? Другой потенциально полезный вопрос: что вернёт метод .read(), если ему в качестве аргумента передать целое число; например, что попадёт в переменную fg после выполнения оператора fg = indata.read(1), где indata — файловый объект, созданный посредством open? Проверьте!)

У строки есть метод replace(что искать, на что заменять), который возвращает новую строку, в которой все подстроки, совпадающие с первым аргументом, заменены вторым аргументом.

Некоторые встроенные модули

   1 import math
   2 
   3 print(math.factorial(4)) # prints 24

Обратите внимание! sys.argv - это список, а не метод. Поэтому после argv скобки не ставятся. Пример:

   1 Создадим файл test.py с командами:
   2 
   3 import sys
   4 parameters = sys.argv
   5 print parameters
   6 
   7 Выполним с параметрами командной строки:
   8 
   9 python test.py 1 file.fasta
  10 
  11 Напечатано будет:
  12 
  13 ["test.py", "1", "file.fasta"]

   1 import os
   2 
   3 os.rename("IVANOV_pr11.py", "Ivanov_pr11.py") 
   4 os.system("python  Ivanov_pr11.py")
   5 
   6 #Если в директории лежит файл IVANOV_pr11.py, то он будет переименован и выполнен. Иначе - ошибка.

   1 import urllib2
   2 
   3 html_lines = list(urllib2.urlopen('https://kodomo.fbb.msu.ru/index.html'))
   4 for line in html_lines:
   5     print line
   6 # Print line by line spesified html-file 
   7 
   8 gbk_file = urllib2.urlopen('ftp://ftp.ncbi.nlm.nih.gov/genomes/Viruses/Aichi_virus_uid15441/NC_001918.gbk').read()
   9 g = open("aichi_virus.gbk", 'w')
  10 g.write(gbk_file)
  11 # Download GeneBank file and write it into file aichi_virus.gbk