Этот урок направлен на развитие некоторых ключевых навыков на Python и введение в него фундаментального компонента для написания хорошего кода - функции.
Часто в Python необходимо выполнять одни и те же или похожие вычисления несколько раз. Вместо того, чтобы каждый раз просто записывать это вычисление полностью, проще один раз записать его как функцию, а затем каждый раз, когда вычисление должно произойти, просто вызывайте функцию.
Есть несколько вещей, которые являются требованиями или лучшими сценариями для написания функции. Обобщенная структура функции показана ниже:
def a_function(input_1,input_2):
'''Short string to describe what the function does'''
#Stuff happens inside the function
return output_1,output_2
Так что же здесь произошло тогда? Прежде всего, мы использовали def
для определения имени функции, в приведенном выше примере как "a_function". озже в коде запись a_function (...) вызовет функцию, так же как вызов функции print()
сообщает Python, что нужно что-то распечатать при запуске кода. В скобках (input_1,input_2)
указаны любые начальные данные, известные как аргументы, которые функция должна знать для выполнения вычислений. Не всегда обязательно иметь какие-либо аргументы в функции, и в этом случае ее можно просто определить как a_function()
.
После определения имени функции и любых аргументов часто бывает полезно написать хотя бы одну строку, описывающую, что делает функция. Это помогает улучшить читаемость функции, будь то для кого-то, кто еще не написал функцию, или для вас, если прошло какое-то время и вам нужно снова взглянуть на функцию.
Основная часть функциональных вычислений происходит после этого с использованием любых аргументов, определенных во время ввода функции, и аргументов, определенных во время вывода функции. Последняя ключевая часть функции - это оператор return
в конце - это позволяет распечатать все, что было вычислено в функции, которую вы хотите использовать в остальной части кода, или присвоить другой переменной.
Здесь нужно было понять довольно много, поэтому было бы легче увидеть, как выглядит реальная функция. Ниже приведена функция, позволяющая получить квадратный корень из любого числа. Запустив приведенную ниже функцию, мы можем загрузить ее в память ноутбука, чтобы использовать ее позже, используя Shift + Enter
.
def square_root(number):
'A function which can obtain the square root of a number'
root_number = number**(1/2)
return root_number
Это довольно простая функция, но, надеюсь, она иллюстрирует все различные части хорошо написанной функции. Существует имя, определенное как квадратный_корень, и для его работы требуется аргумент (число). Ниже приводится описание функции, до того, как происходит фактическое вычисление, строка root_number = number**(1/2)
, в которой используется математическая функция возведения числа в степень половины для нахождения квадратного корня. Наконец, в конце функции возвращается квадратный корень входного числа.
Но как можно использовать эту функцию в Python? Выполните приведенный ниже фрагмент кода, чтобы увидеть его использование на практике.
root = square_root(9)
print(root)
Как видно выше, мы присвоили переменной root функцию square_root для числа 9. Это тривиальный пример, но мы можем использовать наши знания о циклах for из предыдущей записной книжки, чтобы найти квадратные корни из числа 9. много очень больших чисел за один раз.
Допустим, нам нужно найти квадратные корни всех чисел от 1 000 000 до 2 000 000 с интервалом в 100 000, распечатав значение для каждого из них. Эту задачу легко решить с помощью функции square_root и цикла for. Попробуйте реализовать это ниже:
for i in range(1000000,2000000,100000):
root = square_root(i)
print('square root of', i, ':', root)
Надеюсь, теперь вы видите, что квадратный корень из 1,600,000, например, равен 1264,9110640673518. Возможно, сейчас это не особенно актуально, но если вы понимаете все части, из которых состоят хорошие функции, тогда будет намного проще написать полезные функции позже.
Другой важный аспект Python - использование методов функций или классов для решения проблем, которые часто возникают простым способом.
Это может быть добавление к базовому классу, например .extend()
или .append()
, которые являются методами, которые можно применять к спискам. Например, скажем, у вас есть список a_long_list
как показано в приведенном ниже коде. Часто при кодировании на Python полезно добавлять данные в конец списков. С длинными списками (или многомерными списками, к которым мы скоро придем) нецелесообразно просто переформулировать список с дополнительными значениями в конце.
Именно здесь могут пригодиться методы .extend()
или .append()
, оба из которых делают похожие, но немного разные вещи. Самый простой способ увидеть это - запустить приведенный ниже пример, где в конце a_long_list есть строка 'new', прикрепленная к его концу.
a_long_list = ['this','is','a','very','very','very','long','list']
a_long_list.append('new')
print(a_long_list)
a_long_list = ['this','is','a','very','very','very','long','list']
a_long_list.extend('new')
print(a_long_list)
Как видно выше, оба метода добавляют слово «новый» в конец списка, но по-разному. Оператор .append()
добавляет всю строку «new» в конец списка, а оператор .extend()
разбивает строку «new» на отдельные буквы для добавления в конец списка.
Эти методы немного отличаются друг от друга при использовании списка чисел, а не списка строк, что можно увидеть, запустив пример ниже:
numerical_list = [0,1,2,3,4,5,6,7,8,9]
numerical_list.append(10)
print(numerical_list)
numerical_list = [0,1,2,3,4,5,6,7,8,9]
numerical_list.extend([10])
print(numerical_list)
Как видно здесь, для числового списка, чтобы получить тот же результат, для метода .extend()
необходимо поместить значение внутри списка. Поэтому рекомендуется использовать метод .append()
при добавлении отдельных чисел или строк в конец списка. Однако, если вы хотите добавить список чисел в конец списка, существует другое поведение, которое можно увидеть, запустив пример кода ниже:
numerical_list = [0,1,2,3,4,5,6,7,8,9]
numerical_list.append([10,11])
print(numerical_list)
numerical_list = [0,1,2,3,4,5,6,7,8,9]
numerical_list.extend([10,11])
print(numerical_list)
Итак, в этом случае метод .append()
method добавляет весь список в конец «числового_списка» как вложенный список, а метод the .extend()
добавляет отдельные значения в "числовой_лист", сохраняя единую структуру списка. Оба метода имеют свое применение, так что хорошо знать полное использование обеих функций.
Другой очень полезный метод - это метод .split()
который можно использовать в следующем примере для разделения очень длинной строки на список более коротких строк. Выполнение следующего фрагмента кода может показать это поведение:
long_string = 'hello this is a long string'
long_string.split()
Это может быть очень полезно при операциях ввода больших файлов .txt или .csv в Python, что позволяет получать данные в Python в удобном формате.
Наконец, давайте соберем все это вместе. Попробуйте в поле ниже разделить длинную строку, которая в данный момент находится там, назначить ее переменной, а затем добавить этот список в конец "a_long_list".
long_string = 'this string needs to be added to the end of a list!'
split_string = long_string.split()
a_long_list.extend(split_string)
print(a_long_list)
long_string = 'this string needs to be added to the end of a list!'
то всего лишь пара примеров всех методов, которые можно использовать в Python. Щелкните следующие ссылки для получения дополнительных сведений обо всех методах, доступных для строк и списков в Python.
Кроме того, это хороший момент, чтобы сказать, что в Интернете есть удивительный массив информации о решении проблем с помощью Python. Если вы боретесь с чем-то на Python, введите это в поисковый браузер, например Ecosia, и часто вы найдете ответ на свою проблему или на другую, связанную с ней.