22.01.2024
День восьмой 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)