Функции
Общие сведения
Функции — это фрагмент кода, к которому можно обратиться из другого места программы. Блок кода, относящийся к данной функции назывантся тело функции
Обращение к функции (вызов функции) — это вызов блока кода этой функции для его исполнения. Т.е. без обращения, данный код не будет исполнен. В языке Python для этого надо написать имя функции и пару скобок (между ними указав параметры, если требуется). Пример: test_func()
Встроенные функции языка Python
На самом деле, мы уже познакомились с частью встроеных функций (build-in functions) языка Python.
- print()
- input()
- str()
- int()
- и тд
Все это функции языка. Полный перечень можно посмотреть в документации
Пользовательские функции
Кроме встроенных функций, можно так же написать свои, для реализации любых действий. Все что нужно сделать — это объявить функцию и вызвать ее.
Объявление функции — По сути, написание самой функции (при помощи специального слова def и имени функции, а так же, перечисления параметров функции), и блока кода, который к ней относится.
Пример:
def func_test(param_a):
print ("This is function!")
print ("This will print value in param_a: "+param_a)
print ("This is main code")
func_test ("Hello!")
Результат:
This is main code
This is function!
This will print value in param_a: Hello!
Параметры функции — Аргументы, которые функция принимает при обращении к ней. По сути являются обычными переменными, которые можно использовать внутри самой функции, и которые необходимо передать в момент обращения к функции (в противном случае, будет ошибка)
Параметры функции по-умолчанию
Так же можно указать аргументы по-умолчанию. Это значит, что при вызове функции, даже если соответсвующие параметры не были переданы, будут взяты значения по-умолчанию.
Пример:
def func_test(param_a,param_b="default"):
print ("This is function!")
print ("This will print value in param_a: "+param_a)
print ("Param b has value - "+param_b)
print ("This is main code")
func_test ("Hello!")
print("Now im gonna call func with param_b")
func_test ("Second time!","new value")
Результат:
This is main code
This is function!
This will print value in param_a: Hello!
Param b has value — default
Now im gonna call func with param_b
This is function!
This will print value in param_a: Second time!
Param b has value — new value
Область видимости — Тот надоб данных, с которыми конкретный программный код может работать. Выделяют:
- Глобальные данные — те переменные и методы, к которым есть доступ у всего кода программы
- Локальные данные — Те переменные и методы к которому есть доступ только у определенного мест
Так вот, параметры функции являются локальными данными, т.е. к ним можно обращаться только из самой функции, из других мест к ним обратиться не получится, их попросту там не существует. Так же и с переменными, объявленными внутри тела функции
Пример:
def test_func(test_arg):
test_var=3
test_func("a")
print (test_arg)
print (test_var)
Результат:
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘test_arg’ is not definedTraceback (most recent call last):
File “”, line 1, in
NameError: name ‘test_var’ is not defined
Так произошло, потому что это переменные в области видимости функции
Для чего вообще использовать функции?
Python придерживается принципе DRY, который подразумивает как можно меньше писать код-дубликат, и как можно чаще повторно использовать ранее написаный код. Функции как раз позволяют это делать.
Так же функции проще поддерживать, чем код, идущий одной стеной.
Так же код с функциями проще для понимания, особенно если использовать комментарии и говорящие названия функций
Возврат значения
Функции могут использоваться с целью получения какого то результата. Возвращаемое значение, это значение, которое функция отдает и оно может быть присвоено любой переменной. Для возврата значения используется
return <значение>
Пример:
def hello_ret():
return "hello world!"
string = hello_ret()
print (string)
Результат:
hello world!
Так же можно возвращать несколько значений: return a,b
Пример:
def hello_ret():
return "hello", "world!"
str1,str2 = hello_ret()
print (str1+str2)
Результат:
helloworld!
Файлы
Базовые понятия
Когда мы используем программу, информация хранится в оперативной памяти. Из за чего, при закрытии программы, вся информация теряется и при перезапуске мы начинаем работу с чистого листа (яркий пример, задание 2 из прошлого урока). Что бы этого не происходило, ее можно записывать в файл, и при повторном запуске просто считывать ее и продолжать работать с ней (в данном случае, файл — это своего рода База Данных)
Кроме этого, файлы можно использовать для пополнения программы большим объемом данных. К примеру, можно сгенерировать огромный массив цифр, и что бы каждую не вводить ее вручную, можно просто все разом прочесть из файла.
Так же можно программой сгенерировать огромный массив данных и записать в файл для дальнейшей обработки. Ну и так далее.
Открытие файла
Для работы с файлом, в первую очередь его требуется открыть. Для этого используется функция open(), которая возвращает объект файл.
file_object = open(“filename”, “mode”)
- “filename” — это путь до файла. Может быть относительным или абсолютным.
- “mode” — режим открытия файла. Есть несколько режимов открытрытия файлов:
- “r” — Режим чтения файла. Режим по умолчанию (можно не указывать, т.е. функцию вызвать с 1 аргументом filename)
- “w” — открытие на запись, содержимое файла удаляется (файл перезаписывается), если файла не существует, создается новый
- “x” — открытие на запись, если файла не существует, возникнет исключение
- “a” — открытие на дозапись, информация добавляется в конец файла
- “b” — открытие в двоичном режиме (для бинарных файлов)
- “t” — открытие в текстовом режиме (значение по-умолчанию, его не обязательно указывать)
- “+” — открытие на чтение и запись
Методы можно указывать вместе, к примеру бинарная запись — “wb”; бинарное чтение — “rb”. По-умолчанию, если метод не указан, будет “rt”. Так как “t” — по-умолчанию, то “w” и “wt” будут одно и тоже выполнять
- Так же есть и другие аргументы:
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
, но их оставим на самостоятельное изучение (так как они не обязательны и используются не так часто)
Пример:
f = open("file.txt","r")
Результат:
В переменную f будет записан объект файла, с которым в дальнейшем можно будет работать
!!!Важно!!!
В конце работы с файлами его обязательно надо закрывать с помощью метода close()
Чтение данных из файла
!!!Важно!!!
Работая с файлами, необходимо помнить про служебные символы и про кодировку
Самым основным действием с файлом является чтение. Есть два основных метода чтения из файла — это чтение файла целиком и построчное чтение
- Метод read(n) — читает n символов из файла. Если вызвать без аргумента — прочтется целиком. Если передавать аргумент n — то чтение начинается с места, до которого было прошлое чтение.
Пример:
файл test.txt содержит строку hello!! world!
f = open("test.txt","r")
print (f.read(3))
print (f.read(3))
f.close()
Результат:
hel
lo!
- Метод readline() — Чтение только одной строки
- Метод readlines() — чтение всех строк, возвращает значение типа список
Это основные методы чтения. Так же можно читать файл построчно, при помощи цикла for
файл test.txt содержит строки:
hello!! world
second line
Пример:
f = open("test.txt", "r")
for line in f:
print(line)
f.close()
Результат:
hello!! world
second line
Почему одна строка пустая? потому что в конце первой строки присутствует символ конца строки “\n”, а функци print выполняет перенос строки. Это можно проверить, выполнив метод read(). Можно воспользоваться методом из 1 урока strip() для более корректного вывода:
f = open("test.txt", "r")
for line in f:
print(line.strip())
f.close()
Результат:
hello!! world
second line
Запись в файл
Запись осуществляется при помощи метода write(‘str’)
Пример:
str_list=["Hello world","Second line","3d line"]
f = open("test2.txt", "w")
for line in str_list:
f.write(line+'\n')
f.close()
Результат:
Файл с 4 строками
Hello world
Second line
3d line
Зачем \n добавлять? Что бы после каждого элемента списка добавлялся символ конца строки, тем самым каждый элемент запишется с новой строки
Задание:
Модифицировать программу из урока 2 по расчету ЗП сотрудников таким образом, что бы она информацию о сотрудников читала и записывала в файл. Так же все действия программы вынести в отдельные функции.