Нет никаких сомнений в том, что сегодня Python является самым популярным и широко используемым языком программирования. Python гибкий, простой в освоении, с открытым исходным кодом и хорошо поддерживается. Этот универсальный язык программирования НЕОБХОДИМ для всех, кто хочет сделать карьеру в области анализа данных или специалиста по данным. Машинное обучение, глубокое обучение, Интернет вещей и искусственный интеллект, которые в настоящее время находятся на подъеме, также создаются с использованием Python.
К вашему сведению, Python был создан программистом по имени Гвидо ван Россум и впервые выпущен 20 февраля 1991 года. Название Python было выбрано в честь его любимого телешоу Летающий цирк Монти Пайтона.
Что такое функции Python?
Функции — одно из фундаментальных понятий почти всех современных языков программирования. Функции Python — это самый простой способ упаковать логику, которую вы, возможно, захотите использовать более чем в одном месте и более одного раза. Функция — это многократно используемый блок кода, выполняющий определенную задачу, что упрощает управление большими проектами.
Это похоже на волшебное заклинание, которое по мановению палочки выполняет определенные задачи.
В Python есть две основные категории функций:
Определяемые пользователем функции. Функции, которые программист определяет, чтобы избежать повторения кода.
Встроенные функции: функции, которые определены кем-то другим и могут использоваться в вашем коде после установки необходимых пакетов.
Понимание основ: определение и вызов функций
Чтобы определить функцию, мы используем ключевое слово def
, за которым следует имя функции и пара круглых скобок. Тело функции расположено с отступом ниже определения и убедитесь, что вы сделали отступ с помощью табуляции или 4 пробелов. Чтобы вызвать функцию, используйте имя функции, за которым следуют круглые скобки.
def myfunction(): print("Hi Barbie!") # Calling the function myfunction() # Output: Hi Barbie!
Параметры функции и возвращаемые значения
Функции могут принимать входные параметры, что позволяет им принимать разные значения и производить различные выходные данные. Параметры объявляются в круглых скобках во время определения функции. Разделяются запятыми, если параметров несколько. Кроме того, функции могут возвращать значения с помощью оператора return
.
def add_numbers(a, b): return a + b result = add_numbers(2, 4) print(result) # Output: 6
Аргументы по умолчанию и ключевые слова
Python позволяет нам назначать значения по умолчанию параметрам функции, делая их необязательными во время вызовов функций. Это обеспечивает гибкость и позволяет избежать ошибок при вызове функции без предоставления всех аргументов.
def greet_user(name, greeting="Hello"): print(f"{greeting}, {name}!") greet_user("Ken") # Output: Hello, Ken! greet_user("Barbie", greeting="Hi") # Output: Hi, Barbie! def add(a, b=5, c=15): return (a+b+c) # The default value is given to argument 'b' and 'c' print(add(2)) # Output 22
Область действия переменных: глобальные и локальные переменные
Понимание области видимости переменной имеет решающее значение при работе с функциями. Переменные, определенные внутри функции, имеют локальную область видимости и принадлежат только этой конкретной функции. Напротив, переменные, объявленные вне какой-либо функции, имеют глобальную область действия и могут быть доступны внутри функций.
global_var = 20 def print_global_var(): local_var = 4 print(f"Global variable: {global_var}") # Output: Global variable: 20 print(f"Local variable: {local_var}") # Output: Local variable: 4 print_global_var()
Лямбда-функции (анонимные функции)
Лямбда-функции — это небольшие анонимные функции, которые могут иметь любое количество аргументов, но только одно выражение. Они удобны для коротких задач и часто используются в качестве аргументов для функций более высокого порядка, таких как map
, filter
и reduce
. В проектах по науке о данных мы часто будем работать с функциями Lambda для создания эффективных структур данных и конвейеров.
# Regular function def square(x): return x * x # Equivalent lambda function square_lambda = lambda x: x * x print(square(7)) # Output: 49 print(square_lambda(7)) # Output: 49 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) print(even_numbers) # Output: [2, 4, 6, 8, 10]
Рекурсивные функции
Рекурсивные функции — это функции, которые вызывают сами себя во время выполнения. Они особенно полезны для решения проблем, которые можно разбить на более мелкие идентичные подзадачи. Рекурсия подходит не для всех ситуаций. Хотя возможно, будет скорее неуклюжим, чем элегантным.
Рекурсия — довольно сложная тема, и ее относительно редко можно увидеть в Python. Тем не менее, это полезная техника, о которой нужно знать, поскольку она позволяет программам проходить структуры, которые имеют произвольные и непредсказуемые формы.
def factorial(n): if n == 0 or n == 1: return 1 else: return n * factorial(n - 1) print(factorial(6)) # Output: 720 # We could implement factorial() iteratively using a for loop: def factorial(n): return_value = 1 for i in range(2, n + 1): return_value *= i return return_value print(factorial(6)) # Output: 720
Функция декораторов
Функция декораторов — это мощная функция Python, которая позволяет нам изменять поведение функций без изменения их кода. Оборачивая их в дополнительный слой логики, реализованный как другая функция. Декораторы — это, по сути, функции, которые принимают другую функцию в качестве аргумента и возвращают новую функцию. Декораторы применяются с использованием синтаксиса @decorator_name
прямо над определением функции, что делает код более читаемым и упрощает применение одного и того же поведения к нескольким функциям.
def check(func): def wrapper(a, b): if b == 0: print("Error: Can't divide by zero!") return None return func(a, b) return wrapper @check def div(a, b): return a / b # If we don't want to change this function and we don't want # the output of print(div(10, 0)) to 'error', use decorators) # Test the decorated div function print(div(10, 2)) # Output: 5.0 print(div(10, 0)) # Output: Error: Can't divide by zero! None
Функции генератора
Функции-генераторы — это функции особого типа, которые используют ключевое слово yield
вместо return
для создания серии значений вместо возврата одного значения. Они эффективно используют память и идеально подходят для работы с большими наборами данных. В остальном функции-генераторы синтаксически идентичны обычным функциям, но Python специально компилирует их, чтобы при вызове возвращать итерируемый объект.
def countdown(n): while n > 0: yield n n -= 1 for num in countdown(5): print(num) # Output: 5, 4, 3, 2, 1 # A simple generator for Fibonacci Numbers def fibonacci_generator(limit): a, b = 0, 1 while a < limit: yield a a, b = b, a + b # Iterating over the generator object using for loop for num in fibonacci_generator(100): print(num) # Output: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
Аргументы функций и *args
и **kwargs
Функции Python могут принимать переменное количество аргументов. Специальный синтаксис *args
используется для передачи списка аргументов переменной длины без ключевых слов, а **kwargs
используется для передачи списка аргументов переменной длины с ключевыми словами. Мы можем использовать *args
и **kwargs
в качестве аргументов функции, когда не уверены в количестве аргументов, которые нужно передать в функции.
# Using *args to pass the variable length arguments to the function def adder(*num): sum = 0 for n in num: sum = sum + n print("Sum =",sum) adder(1,3) # Output: Sum = 4 adder(4,5,6,7) # Output: Sum = 22 # Using **kwargs to pass the variable keyword arguments to the function def actor(**data): print("\nData type of argument:",type(data)) for key, value in data.items(): print("{} is {}".format(key,value)) actor(First_Name="Cillian", Last_Name="Murphy", Country="Ireland", Age=47) # Output: Data type of argument: <class 'dict'> First_Name is Cillian Last_Name is Murphy Country is Ireland Age is 47 def multi_sum(*args, **kwargs): total = 0 for num in args: total += num for key, value in kwargs.items(): print(f"{key}: {value}") return total print(multi_sum(1, 2, 3, a=10, b=20)) # Output: a: 10 b: 20 6
Мы углубились в продвинутые концепции, такие как лямбда-функции, рекурсия, декораторы и функции-генераторы. Вооружившись этим всесторонним знанием функций Python, мы теперь можем писать более организованный, эффективный и мощный код в ваших проектах по науке о данных и за их пределами. Ниже приведены несколько примеров применения функций Python.
НЕКОТОРЫЕ реальные приложения функций Python
Интернет-корзина
Представьте, что вы разрабатываете систему онлайн-покупок. Вы можете использовать функции для выполнения различных задач, связанных с корзиной, таких как добавление товаров, расчет общей стоимости и создание сводки заказа.
# Function to add items to the cart def add_to_cart(cart, item, price): cart[item] = price print(f"{item} added to the cart.") # Function to calculate the total price of items in the cart def calculate_total(cart): total = sum(cart.values()) return total # Function to generate an order summary def order_summary(cart): print("Order Summary:") for item, price in cart.items(): print(f"{item}: ${price}") total = calculate_total(cart) print(f"Total: ${total}") # Usage example shopping_cart = {} add_to_cart(shopping_cart, "Sofas", 400) add_to_cart(shopping_cart, "Floor Lamps", 50) add_to_cart(shopping_cart, "Shoe Racks", 20) order_summary(shopping_cart)
Инструмент анализа данных
Предположим, вы создаете инструмент анализа данных, который выполняет различные статистические расчеты с наборами данных. Функции могут помочь вам инкапсулировать различные операции анализа данных, делая код более организованным и простым в обслуживании.
# Function to calculate the mean of a list of numbers def calculate_mean(data): total = sum(data) mean = total / len(data) return mean # Function to calculate the median of a list of numbers def calculate_median(data): sorted_data = sorted(data) n = len(data) if n % 2 == 0: median = (sorted_data[n // 2 - 1] + sorted_data[n // 2]) / 2 else: median = sorted_data[n // 2] return median # Function to calculate the standard deviation of a list of numbers def calculate_std_deviation(data): mean = calculate_mean(data) squared_diff_sum = sum((x - mean) ** 2 for x in data) std_deviation = (squared_diff_sum / len(data)) ** 0.5 return std_deviation # Usage example data = [34, 56, 22, 41, 65, 37, 52, 28, 19, 43] print("Data:", data) print("Mean:", calculate_mean(data)) print("Median:", calculate_median(data)) print("Standard Deviation:", calculate_std_deviation(data))
Планировщик сообщений в социальных сетях
Предположим, вы создаете планировщик публикаций в социальных сетях, который автоматизирует публикации на различных платформах. Функции могут помочь вам отделить логику планирования от фактической публикации, что сделает код более удобным для сопровождения.
import time # Function to schedule a post def schedule_post(post_content, platform, scheduled_time): print(f"Scheduling a post on {platform} at {scheduled_time}:") time.sleep(2) # Simulating scheduling process print(f"Post content: {post_content}") print("Post scheduled successfully!") # Usage example post_content = "Now I am become Death, the destroyer of worlds." schedule_post(post_content, "Twitter", "2023-07-25 12:00:00")
Основные платформы социальных сетей, такие как META, Twitter и LinkedIn, а также несколько сторонних инструментов управления социальными сетями предоставляют функции планирования публикаций.
А что, если вы решите НЕ использовать функции в своем коде на Python?
1. Дублирование кода и отсутствие повторного использования:
Без функций вы можете обнаружить, что в вашей программе повторяются одни и те же блоки кода. Дублирование кода не только увеличивает размер вашей кодовой базы, но и усложняет ее обслуживание. Если вам нужно внести изменения в дублированный код, вам придется делать это в нескольких местах, что увеличивает риск появления ошибок.
2. Сложность понимания и отладки:
Когда в вашем коде не хватает функций, он превращается в сложную последовательность инструкций без четкого разделения задач. Это может привести к путанице, особенно для других разработчиков, которые могут сотрудничать с вашим проектом.
3. Снижение читабельности кода:
Код, в котором не используются функции, может быстро превратиться в плотную стену инструкций, что затруднит чтение и понимание общего хода программы. Функции служат высокоуровневыми абстракциями, позволяя вам давать осмысленные имена конкретным операциям, делая код более понятным и читабельным.
4. Увеличенное время разработки:
Написание кода без использования функций может привести к неэффективности и увеличению времени разработки. По мере роста кодовой базы становится все труднее управлять и поддерживать ее. Использование функций позволяет вносить изменения в одном месте, принося пользу всей программе, в которой используется эта функция.
Удачного кодирования!
Мы рассмотрели основы функций Python. Функции — это основа программирования на Python, и их освоение, несомненно, поднимет ваши навыки Python на новую высоту!