В третьей части будем изучать функции, словари, создавать и подключать модули, а так же работать с библиотеками.
Создание и использование функций
Помимо встроенных в Python функций можно создавать и свои собственные. Если вы пишете свою функцию - вы пишите её логику под собственный проект и она будет выполнять именно ту работу, которая вам необходима.
Разбиение программы на функции придаст скриптам красивый структурированный вид, также вы можете вызывать функцию сколько угодно раз - это позволит вам избежать повторяемости кода, вы просто будете его переиспользовать. Это нормальная практика, которая применима для всех языков программирования.
Каждая функция должна иметь уникальное имя. Также функция может принимать аргументы и возвращать значение, это необязательные параметры функции.
Если вызываете функцию - то она обязательно должна быть объявлена до вызова.
def myFunc():
print('My value')
myFunc()
Это самая простая функция, которая не принимает аргументов и не возвращает никакого значения.
Давайте создадим функцию, которая принимает на вход параметры(аргументы) и возвращает какое-то значение.
def myFunc(a, b):
c = a + b
return ('Result = ' + str(c))
print(myFunc(4, 3))
В этом примере мы передали функции myFunc два аргумента a и b и сложили их. А затем вернули их сумму функцией return. Затем, для вывода на экран, была использована функция print
Если у вы точно не знаете сколько вам нужно передать параметров в функцию - можно передать произвольное число параметров так:
def myFunc(*a):
for i in a:
print('Arg: ' + str(i))
myFunc(4, 3, 12, 'string', 3, False)
Я передал разные типы переменных, они все дошли до тела функции и успешно вывелись на экран.
Ещё аргументам можно задавать дефолтные значения, в этом случае передавать их в функцию(при вызове) необязательно
def myFunc(a, b = 2):
c = a + b
print(c)
myFunc(4)
Я не передавал в функцию myFunc переменную b и она автоматически была равна 4.
Схематично устройство функции можно представить так
Локальные переменные
Это переменные, которые объявлены внутри функции. Их область видимости ограничивается только телом функции и их не существует вне функции. Поэтому вы можете использовать одинаковые имена переменных внутри разных функций, они точно не перезапишут друг друга
a = 10
def myFunc():
a = 15
myFunc()
print(a)
Как вы можете видеть - переменная a осталась равно 10. Пятнадцати она равнялась только внутри функции myFunc. То есть это две разных переменных: одна внутри функции, другая вне функции.
Глобальные переменные
Если переменная объявлена вне тела функции и никак не передаётся в функцию при её вызове - она всё равно доступна внутри тела функции. Такая переменная будет называться глобальной.
a = 10
def func() :
print(a)
func()
Переменная a существует внутри функции func.
Множества
Множество — это неупорядоченная коллекция без дублирующихся элементов. То есть по-сути тот же список, но уникализированный.
Создать множество можно так:
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)
Как вы заметили - повторные элементы были удалены.
Добавить элемент во множество можно функцией add:
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
basket.add('lime')
print(basket)
Удаление:
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
basket.discard('orange')
print(basket)
Словари
Это тоже хранилище данных, но с более сложной структурой. В некоторых языках его называется ассоциативный массив.
Суть в том, что у каждого элемента может быть свой ключ(индекс). В списках и множествах индексы - это числа от 0 до бесконечности, а в словарях ключи могут быть строками.
config = {'host' : 'localhost', 'user' : 'root', 'pass' : 'myPassWd'}
print(config)
Зная ключи элементов словаря можно их удалять, изменять или добавлять новые:
config = {'host' : 'localhost', 'user' : 'root', 'pass' : 'myPassWd'}
config['pass'] = 'newPass' #изменение элемента
config['token'] = 'jYhFrtuHHgrtg' #добавление нового
del config['host'] #удаление существующего
print(config)
Вывести один элемент словаря можно по ключу:
config = {'host' : 'localhost', 'user' : 'root', 'pass' : 'myPassWd'}
print(config['host'])
Работа с файлами
Если вам нужно считать данные из файла - можно обратиться к нему по имени и считать данные построчно.
inf = open('/home/python/cgi-bin/file.txt', 'r')
for line in inf:
print(line.strip())
inf.close()
Я указал полный путь к файлу, от корня сервера. Относительный путь не работал.
Функция strip обрезает всё лишнее - пробелы, табуляции, в том числе символ переноса строки.
Запись в файл.
Чтобы записывать в файл - нужно открыть его в режиме записи:
f = open('/home/python/cgi-bin/file.txt', 'a')
f.write('New Line'+"\n")
f.close()
Аргумент a означает, что я буду дописывать в конец файла. Если указать w - то перед записью всё содержимое файла будет стёрто.
f = open('/home/python/cgi-bin/file.txt', 'a')
f.write('New Line'+"\n")
f.close()
inf = open('/home/python/cgi-bin/file.txt', 'r')
for line in inf:
print(line.strip())
inf.close()
Модули
Модуль - это хранилище данных, которое включает в себя не только переменные, но и целые функции. Модуль хранится в отдельном файле. Имя файла будет именем модуля.
Модули можно импортировать в другие модули.
Если ваш проект насчитывает большое количество функций - вам следует разнести их по группам и каждую группу описать в виде модуля.
Создадим модуль golos.py с функцией posts
#!/usr/bin/env python3
def posts():
return 'Golos posts'
В файле index.py импортируем этот модуль и вызове из него функцию posts.
Для того, чтобы вызвать функцию модуля - нужно перед вызовом функции дописать имя модуля, разделив их точкой.
#!/usr/bin/env python3
import golos
print()
print('Hello Golos')
print(golos.posts())
Запускаем index.py
Так же можно импортировать только одну функцию. В этом случае дописывать имя модуля не нужно.
from golos import posts
posts()
Импорт всех функций модуля
from golos import *
posts()
Импорт функции с использованием псевдонима
from golos import posts as getPosts
getPosts()
Помимо собственных модулей вы можете подключить множество уже готовых модулей. Документацию по модулям можно посмотреть тут https://docs.python.org/3/library/index.html
Для примера подключим модули time и datetime и выведем текущий часовой пояс и текущее время.
#!/usr/bin/env python3
import time,datetime
print()
print('Hello Golos')
print(time.tzname)
print(datetime.datetime.now().strftime('%d-%m-%Y %H:%M:%S'))
Помимо встроенных модулей есть множество дополнительных библиотек. Их можно установить самостоятельно и использовать как обычные модули.
Для примера установим библиотеку requests
Устанавливать я буду с помощью pip командой:
pip install requests
Простой пример - получение содержимого страницы. Получим содержимое сайта http://example.com/
import requests
r = requests.get('http://example.com/')
print(r.text)
Функцией get можно получить содержимое страницы и по переменной r.text, где r - это содержимое ответа сервера.
Так, изучив множества, словари и модули, сведём их в общую схему.
На этом я заканчиваю курс по изучению языка Python. Были рассмотрены основы программирования на этом языке. Сам язык гораздо обширнее. Он включает в себя множество модулей для самых разных задач. На нём написаны фреймворки, которые позволят написать достаточно сложный код быстро, который будет безопасен и понятен другим разработчикам.
Что для меня было наиболее интересным и впечатляющим в данной неделе курса?
В заключительном курсе мне понравился механизм использования сторонних модулей. Стало понятно как большое количество кода можно грамотно разместить в модулях и как их потом использовать. А использование словарей позволит чётко структурировать произвольный массив данных.
Вы - молодец! Я тоже увлекаюсь питоном, в частности голосовыми технологиями, и PyQT. Пробовал запилить свою Кортану с гугл распознаванием речи и генерацией звука через MSAPI )) Пишите еще статьи для новичков, это очень хорошая тема!
Спасибо, продолжу писать. Я сейчас буду делать упор на развитие тематического аккаунта @vp-webdev от проекта VoxPopuli, подписывайтесь.
@tristamoff Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за Количество комментариев
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
litrbooh, tristamoff, shuler, yurgent71, gans91, vika-teplo, lenutsa, optimist, dim447
Поэтому я тоже проголосовал за него!
Если Вы проголосуете за этот комментарий, то поможете сделать "Доброго Кита" сильнее!