¿Actualizar el valor de un parámetro no actualiza el resultado de la función?

Soy completamente nuevo en progtwigción …

L = [1, 2, 3, 4, 5] n = 1 S = sum(L[0:n]) while n < 5: n += 1 print(n) # output: 5 print(S) # output: 1 

¿Por qué python no cambia el parámetro n en la función de sum mientras que sí cambia n ? ¿Puede alguien explicar la lógica detrás de eso y mostrarme una manera de cambiar n en la función de sum para que S convierta en 15 en lugar de 1?

Python es un lenguaje de progtwigción imperativo . Esto significa que un progtwig de python es una serie de declaraciones que pueden cambiar el estado del progtwig (por ejemplo, asignando un valor a una variable). Una vez que se ha ejecutado una instrucción, ya no tiene efecto en el progtwig. En otras palabras: la statement puede cambiar el estado del progtwig, pero solo una vez.

Cuando ejecuta la instrucción S = sum(L[0:n]) , se evalúa la sum(L[0:n]) y el resultado se asigna a la variable S L[0:n] evalúa como [1] , y la sum de [1] es 1. Así que al final de esta statement, el valor de S es el número 1.

Su idea errónea es que S “recuerda” que es igual a la sum(L[0:n]) , pero ese no es el caso. S es solo el número 1. No importa si cambia el valor de n o L ; el número 1 sigue siendo el número 1. Si desea que S cambie, debe actualizarlo explícitamente con otra instrucción de asignación:

 L = [1, 2, 3, 4, 5] n = 1 S = sum(L[0:n]) while n < 5: n += 1 S = sum(L[0:n]) print(n) # output: 5 print(S) # output: 15 

Nota al margen: los lenguajes en los que S se actualizaría automáticamente cuando n cambios se llamen lenguajes de progtwigción declarativos .

Evalúa S = sum(L[0:n]) solo al principio, no es una función que se actualiza. Una forma de cambiar esto es volver a evaluar S después de actualizar n:

 L = [1, 2, 3, 4, 5] n = 1 while n < 5: n += 1 S = sum(L[0:n]) print(n, S)