Преобразование программы в функцию

#python #function #variables

#python #функция #переменные

Вопрос:

Я пытаюсь преобразовать программу на Python в функцию. Я не совсем понимаю, что я делаю неправильно. Я посмотрел, как писать функции, но это не щелкает. Что мне трудно понять, так это:

  1. можно ли любой код python превратить в функцию, просто добавив оператор функции, вызов и аргументы или есть что-то еще?
  2. Когда следует использовать аргумент, а не просто вызывать функцию
  3. Объявление переменных в функции, возьмите мой приведенный ниже код в качестве примера. где должен быть объявлен number_list в функции по сравнению с тем, где я объявляю его в нефункциональном коде?

Вот не функция, которая работает нормально:

 import random##importing random module

number_list = []
total = 0 ##starts as 0 and increases with generated random number 

for i in range(5):###running a loop- set to five for 5 list items 
  random_num = random.randint(1, 100)##using randint() to return an integer number selected element from the specified range in this case 1-100
  total = total   random_num##setting value for total with random number 
  number_list.append(random_num)##adds to the end of the list 


print('The numbers generated were:' , end=",")
for i in range(5): ##number of list items 
    print(number_list[i], end=",")
print('The largest number is: ', max(number_list))##Using max() method to print largest element of the list 
print('The sum of the numbers is: ', total)
 

И функция, которую я сделал до сих пор, которая выдает ошибку, переменная number_list / total / random не объявлена:

 number_list = []
total = 0
random = 0
def randomsum(number_list,total):
  number_list = []
  total = 0 ##starts as 0 and increases with generated random number 

  for i in range(5):###running a loop- set to five for 5 list items 
    random_num = random.randint(1, 100)##using randint() to return an integer number selected element from the specified range in this case 1-100
    total = total   random_num##setting value for total with random number 
    number_list.append(random_num)##adds to the end of the list 


  print('The numbers generated were:' , end=",")
  for i in range(5): ##number of list items 
    print(number_list[i], end=",")

randomsum(number_list,total)
print('The largest number is: ', max(number_list))##Using max() method to print largest element of the list 
print('The sum of the numbers is: ', total)
 

Также есть ли какие-нибудь хорошие видеоролики на Youtube об этом? Я просмотрел, но не нашел нужных видео.

Комментарии:

1. Начните смотреть книги и документацию, а не видео 🙂 . Для начала изучите локальные переменные и параметры функций.

2. Да, любой код может быть помещен внутрь функции, если вы передаете в качестве параметров любые дополнительные данные, которые вам нужны «извне» и которые вы хотите использовать для изменения поведения вычислений, и объявляете в качестве локальных переменных вещи, которые являются внутренними, специфичными для функции (например, список, который вы собираетесь вернуть, или общий счетчик)

3. Приятно знать, спасибо. Я думаю, что видео хороши для меня, потому что я визуальный ученик, но я понимаю, что вы говорите.

Ответ №1:

Это работает:

 import random

def randomsum():
    # usually it is a good idea to declare the variables locally
    number_list = []
    total = 0
    for i in range(5):
        random_num = random.randint(1, 100)
        total = total   random_num
        number_list.append(random_num)

    print('The numbers generated were:', end=",")
    for i in range(5):
        print(number_list[i], end=",")
    #and then return them so that they can be retrieved by the function caller
    return total, number_list


total, number_list = randomsum()
#this way makes for a bit cleaner code than using global variables.
print('The largest number is: ', max(number_list)) 
print('The sum of the numbers is: ', total)
 

Однако я должен согласиться с @Oscar, что вам следует внимательно изучить основы :-).

Что касается ваших вопросов:

  1. ДА. И нет. Да, можно преобразовать любой код python в функцию (как и в любом разумном языке программирования). Однако это не всегда просто из-за параметров, поиска возвращаемых значений и определения области видимости.
  2. Параметры и возвращаемые значения обычно являются предпочтительным способом в отличие от глобальных переменных.
  3. Для тех, которые будут широко использоваться, это место обычно находится сразу после объявления функции. Однако в python нет строгих правил, и вы можете объявлять переменные где угодно. Однако будьте осторожны, здесь будут драконы.

Комментарии:

1. Я не понимал, что вы могли бы сделать total, number_list = randomsum() , если бы у вас были аргументы в функции, такие как def randomsum(total, number_list): ?

2. Это совершенно другой вариант использования — вы будете передавать параметры функции. Number_list — это массив, который будет передан в качестве ссылки, в то время как общее число передается по значению. Начинается веселье