День восьмой 22,01,2024

Аргументы функций

def sum_nums(a, b):
		c = a + b
		return (c)
print(sum_nums(2, 5))
#7

**Может ли функция принимать любое количество аргументов?**
Да, вот пример:
def sum_nums(*args):
	print(args)
#(2, 5, 7)
	print(type(args))
#<class 'tuple'>
	print(args[0])
#2
	return sum(args)

print(sum_nums(2, 5, 7))
#14

Позиционные аргументы:

Порядок аргументов важен. get_posts_info(‘Aleksey’, 25)

def get_posts_info(name, pists_qty):
	info = f"{name} wrote {pists_qty} posts"
	return info

info = get_posts_info('Aleksey', 25)
print(info)
#Aleksey wrote 25 posts

Аргументы с ключевыми словами

Перед аргументами, идет ключевое слово (ключ): get_posts_info(name=’Aleksey’, pists_qty=25)

В таком случае порядок следования не важен

def get_posts_info(name, pists_qty):
	info = f"{name} wrote {pists_qty} posts"
	return info

info = get_posts_info(name='Aleksey', pists_qty=25)
print(info)
#Aleksey wrote 25 posts

Объединение именованных аргументов словарь dict

def get_posts_info(**person):
	print(person) #{'name': 'Aleksey', 'post_qty': 25}
	print(type(person)) #<class 'dict'>
	info = (
		f"{person['name']} wrote "
		f"{person['post_qty']} posts"
	)

	return info

info = get_posts_info(name='Aleksey', post_qty=25)
print(info)
#Aleksey wrote 25 posts

Значения параметров функции по умолчанию

В таком случае второй параметр не обязателен

def mult_by_factor(value, multiplier=1):
	return value * multiplier

print(mult_by_factor(10, 5))
#50
print(mult_by_factor(5))
#5

**Новый пример:**

from datetime import date
def get_weekday():
	return date.today().strftime('%A')

def create_new_post(post, weekday=get_weekday()):
	post_copy = post.copy() 

#Метод копирования вызывается потому что внутри функции 
#вызывается словарь, а это изменяемый объект. И что бы его не менять, создается копия

	post_copy['created_on_weekday'] = weekday
	return post_copy

initial_post = {
	'id': 234,
	'autor': 'Aleksey',
}

post_with_weekday = create_new_post(initial_post)

print(post_with_weekday)

#{'id': 234, 'autor': 'Aleksey', 'created_on_weekday': 'Wednesday'}

Колбэк функции

Это функция, которая передается в другую функцию как аргумент

def other_fn():
	pass

def fn_with_collback(collback_fn):
	collback_fn()
	return collback_fn

fn_with_collback(other_fn)

print(id(fn_with_collback))

print(id(other_fn))

Функция print_number_info это колбэк функция, которая вызывается внутри process_number

def print_number_info(num):
	if (num % 2) == 0:
		print("Entered number is even")
	else:
		print("Entered number is odd")

def process_number(num, callback_fn):
	callback_fn(num)

entered_num = int(input('Введите значение'))

process_number(entered_num, print_number_info)