Оглавление
Как создать пользовательскую функцию?
Как вызвать пользовательскую функцию?
Как вернуть значение из функции?
Как создать функцию с аргументами?
Области видимости. Как работают локальные переменные?
Как использовать библиотеку random
Функция — объект (типа function), который принимает аргументы и возвращает значение. Есть встроенные (или стандартные) функции, напримeр sum или print.
Аргументы — всё, что передается в функцию. Например, в print(message) message — это аргумент функции.
Позиционные аргументы — это обычные аргументы. Например, при вызове round(1.333, 2) 1.333 — это первый аргумент функции, а 2 – второй.
Именованные аргументы — аргументы, которые передаются с именем. Например, при вызове print(sep=" - ", end = " ") sep и end — именованные аргументы.
Как создать пользовательскую функцию?
1 Напишите def.
2 Придумайте имя функции.
3 Откройте скобки, закройте, напишите двоеточие.
4 Дальше пишите, что хотите, с отступом.
5 После функции поставьте две пустые строки.
def say_something():
print("something")
Как вызвать пользовательскую функцию?
1 Напишите имя функции.
2 Поставьте пару скобок.
def say_something():
print("something")
say_something()
Как вернуть значение из функции?
1 Напишите return в конце функции.
2 Напишите, что хотите вернуть.
3 При вызове функции запишите результат в переменную или выведите.
def count_something():
a = 24
return 24
# или
def count_something():
a = 24
return a
result = count_something()
Как создать функцию с аргументами?
1 Перечислить аргументы внутри скобок в первой строке.
2 Вызвать функцию, указав аргументы.
3 Внутри функции аргументы превращаются в переменные.
def count_something(a):
result = a*2
return result
count_something(100)
Области видимости. Как работают локальные переменные?
Когда мы объявляем переменную в функции, она видна только в этой функции. Переменные за функцией видны в функции.
А теперь давайте разбираться на примере:
a = 3
print("Global a = ", a)
def fun():
a = 4
print("Local a = ", a)
fun()
print("Global a = ", a)
Но функция может видеть глобальные переменные.
Вот пример без объявления переменной а в функции:
a = 3
print("Global a = ", a)
def fun():
print("Local a = ", a)
fun()
print("Global a = ", a)
Как использовать библиотеку random
Получение случайного числа
import random
print(random.randint(0, 5))
# Выведет 1 или 2 или 3 или 4 или 5 — обе границы диапазона включены
Получение выборки из последовательности
import random
items = [1,2,3]
items = random.sample(items, 2)
print(items)
# Вернет [1,2] или [1,3] или [2,1] или [2,3] или [3,1] или [3,2]
Получение одного элемента из последовательности
import random
items = [1,2,3]
items = random.choice(items)
print(items)
# Вернет 1 или 2 или 3
Перемешивание списка
import random
items = [1,2,3]
# Обратите внимание, метод ничего не возвращает, он меняет исхож=дный список!
random.shuffle(items)
print(items)
# Вернет [1,2,3] или [1,3,2] или [2,1,3] или [2,3,1] или [3,1,2] или [3,2,2]
Способы импорта
Импорт модуля или пакета
import random
r_1 = random.choice([1,2,3])
print(r_1)
Импорт объектов из модуля или пакета
from random import choice, shuffle
r_1 = choice([1,2,3])
print(r_1)
Использование алиасов (псевдонимов)
from random import choice as random_choice
r_1 = random_choice([1,2,3])
print(r_1)
# Вернет 1, 2 или 3
Оглавление
### Как сделать аргумент опциональным?
Как передать любое количество аргументов? Что такое *args ?
Как корректно писать функции по PEP 8?
### Как сделать аргумент опциональным?
Опциональные аргументы — позиционные аргументы в функции, которые можно передавать, а можно и не передавать.
round(4.62)
round(4.62, 1)
# |
# Опциональный аргумент
Значение по умолчанию — указание дефолтного значения прямо в списке аргументов. Если у аргумента указано значение по умолчанию, он становится опциональным.
def check(prices, tip = 10 ):
# |
# Значение по умолчанию
sum_ = sum(prices)
total = sum_ * ( 100 + tip ) / 100
return total
Как передать любое количество аргументов? Что такое *args ?
Мы можем принимать любое количество аргументов, если при попадании внутрь функции они превращаются в список. Внутрь функции можно передавать объекты любого типа.
def new_sum(*nums):
# |
# Запакованные аргументы
sum = 0
for n in nums:
sum += n
return sum
print(new_sum(1, 1, 1, 1, 1))
Можно передавать вместе и обычные аргументы, и аргументы *args.
def remove_from_string(string, *symbols_to_remove):
for symbol in symbols_to_remove:
string = string.replace(symbol,"")
return string
remove_from_string("О! Смотри, можно удалить все знаки препинания сразу?", "?", "!", ",", ".", "–")
Как корректно писать функции по PEP 8?
Функции называются маленькими буквами с подчеркиваниями, в snake_case
def get_installment():
После декларации функций ставится два переноса строки.
def new_sum(*nums):
sum = 0
for n in nums:
sum += n
return sum
# раз пустая строка
# два пустая строка
new_sum(5, 7, 8, 11) # а здесь вызов функций
Аргументы разделяются запятой с пробелом.
def any(arg1, arg2, arg3):
# отлично
pass
Если есть значения по умолчанию, равно не окружается пробелами.
# Хорошо
def precheck(prices, tip=10):
Если имя аргумента конфликтует с зарезервированным словом, ставим в конце андер (нижнее подчеркивание).
def any_func(class_, try_, finally_)
Документировать функции полезно, это можно сделать с помощью """ , такие строки называются docstring или докстринги.
def remove_from_string(string, *symbols_to_remove):
"""Удаляет символы перечисленные после первого аргумента """
for symbol in symbols_to_remove:
string = string.replace(symbol,"")
return string
remove_from_string.__doc__