Передать return как параметр для другой функции

1

В приведенном ниже коде "roll_counts" используется как возврат для первой функции, а затем как параметр для второй функции. мой вопрос в том, что если я изменил roll_counts во втором функциональном параметре на ABC и оставил его roll_counts в первой функции, код все равно будет работать нормально. Я знаю roll_counts = 6 в круглых скобках, но как? и почему результат не меняется, когда я новичок в python и программировании, заранее спасибо

import random as rd

def simulate_dice_rolls(N):
    roll_counts = [0,0,0,0,0,0]
    for i in range(N):
        roll = rd.choice([1,2,3,4,5,6])
        index = roll - 1
        roll_counts[index] = roll_counts[index] + 1
    return roll_counts

def show_roll_data(roll_counts):
    number_of_sides_on_die = len(roll_counts)
    for i in range(number_of_sides_on_die):
        number_of_rolls = roll_counts[i]
        number_on_die = i+1
        print(number_on_die, "came up", number_of_rolls, "times")

roll_data = simulate_dice_rolls(1000)
show_roll_data(roll_data)
  • 0
    Ваши уровни отступа перепутаны. Пожалуйста, исправьте их
Теги:

2 ответа

0
Лучший ответ

Ответ blhsing правильный. Но прежде чем принять этот ответ, вам нужно понять переменную область действия. В python есть глобальные переменные и локальные переменные. А локальные переменные привязаны к функциям. Если в функции есть одна и та же локальная переменная для глобальной переменной, то локальная переменная используется без привязки к глобальной переменной. Поскольку roll_counts является локальной переменной simulate_dice_rolls, вам не нужно рассматривать roll_counts в show_roll_data.

  • 0
    Пожалуйста, терпите меня, если я не имею смысла. Я понимаю, что вы говорите. Я передаю 1000 в simulate_dice_roll (), а затем я передаю simulate_dice_roll (1000) в show_roll_data, теперь как он может рассчитать len (abc) = 6, не могли бы вы объяснить, как show_roll_data считает len (abc) = len (roll_counts)
  • 0
    Поскольку вы передаете simulate_dice_rolls (1000) в качестве аргументов show_roll_data, len (roll_counts) равно 6. simulate_dice_rolls (1000) = [A, B, C, D, E, F] это правильно? и вы передаете [A, B, C, D, E, F] в show_roll_data как roll_counts, потому что аргумент show_roll_data - "roll_counts". Если вы измените def show_roll_count (roll_counts) на def show_roll_count (abc), то len (abc) вернет 6.
Показать ещё 1 комментарий
0

roll_counts в show_roll_data(roll_counts) - это имя параметра и доступно во всей области функции show_roll_data. Его значение передается из roll_data в вызове show_roll_data(roll_data) и не имеет ничего общего с локальной переменной с тем же именем, что и в show_roll_data(roll_data) simulate_dice_rolls. Вот почему вы можете переименовать roll_counts в show_roll_data на что угодно, и это все равно будет работать.

  • 0
    У меня все еще есть одно замешательство. если я могу переименовать roll_counts в show_roll_data во что-нибудь, то как оно получит значение 6? Я действительно хочу понять, как код связан.
  • 0
    Я не думаю, что roll_counts когда-либо получает значение 6, поскольку это список из 6 элементов. Он получает значение из вызова функции show_roll_data(roll_data) , поэтому значение roll_data становится значением roll_counts в функции show_roll_data .
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню