Początkowa wartość zmiennej w wyrażeniu lambda

0

Witam !

for i in range(1,int(input())):
    print(list(map(lambda x: i * 10**x, range(i))))

Program działa dobrze ale nie mogę dojść skąd "program/kompilator wie" jaka jest wartość x przy pierwszej iteracji, gdy i == 0?

Z góry dziękuje za odpowiedź.

1

Skoro debugger Ci nie działa, to sprawdź co znaczy range(i).

gdy i == 0 ?

Skąd zero, jeśli zaczyna się od 1, a następnie zwiększa?

0

O przepraszam faktycznie "i" zaczyna od 1. Wydaje mi się że wiem jak działa funkcja range(). Tylko nie wiem dlaczego program działa kiedy do x nie jest na początku przypisana wartość a zmienna x jest wyliczana na podstawie poprzedniej wartości.

1
January napisał(a):

O przepraszam faktycznie "i" zaczyna od 1. Wydaje mi się że wiem jak działa funkcja range(). Tylko nie wiem dlaczego program działa kiedy do x nie jest na początku przypisana wartość a zmienna x jest wyliczana na podstawie poprzedniej wartości.

A gdzie tu x jest, Twoim zdaniem, wyliczana na podstawie poprzedniej wartości???

1

do x nie jest na początku przypisana wartość

A mi się wydaje, że jest troszkę inaczej i sam tę wartość przypisałeś.Chyba, że nie stworzyłeś tego kodu, tylko bezrefleksyjnie przepisałeś.

0

Kod jest oczywiście przepisany ale sprawdzony przeze mnie w konsoli i naprawdę zmienna x nie jest nigdzie zadeklarowana, możecie sami sprawdzić jak nie wierzycie, że kod działa

0
koszalek-opalek napisał(a):
January napisał(a):

O przepraszam faktycznie "i" zaczyna od 1. Wydaje mi się że wiem jak działa funkcja range(). Tylko nie wiem dlaczego program działa kiedy do x nie jest na początku przypisana wartość a zmienna x jest wyliczana na podstawie poprzedniej wartości.

A gdzie tu x jest, Twoim zdaniem, wyliczana na podstawie poprzedniej wartości???

map(lambda x: i * 10**x, range(i))

tu jest wyliczenie x na podstawie poprzedniego

lambda x: i * 10 ** x

wydaje mi się że to można zapisać tak :

x = i * 10 **x
1

W takim razie spróbuję wyjaśnić, może nie pokręcę:
W podanym kodzie do x przypisywne są liczby zbioru range (i). Jeśli np. wpiszesz 4, to pętla działa mniej więcej tak:
i = 1, x = {0}
i = 2, x = {0, 1}
i = 3, x = {0, 1, 2}
A skąd to się bierze, znajdziesz tu - https://docs.python.org/3/library/functions.html#map

0
Serechiel napisał(a):

W takim razie spróbuję wyjaśnić, może nie pokręcę:
W podanym kodzie do x przypisywne są liczby zbioru range (i). Jeśli np. wpiszesz 4, to pętla działa mniej więcej tak:
i = 1, x = {0}
i = 2, x = {0, 1}
i = 3, x = {0, 1, 2}
A skąd to się bierze, znajdziesz tu - https://docs.python.org/3/library/functions.html#map

Dzięki za pomoc i cierpliwość dla mojej niewiedzy !

0
January napisał(a):
koszalek-opalek napisał(a):
January napisał(a):

O przepraszam faktycznie "i" zaczyna od 1. Wydaje mi się że wiem jak działa funkcja range(). Tylko nie wiem dlaczego program działa kiedy do x nie jest na początku przypisana wartość a zmienna x jest wyliczana na podstawie poprzedniej wartości.

A gdzie tu x jest, Twoim zdaniem, wyliczana na podstawie poprzedniej wartości???

map(lambda x: i * 10**x, range(i))

tu jest wyliczenie x na podstawie poprzedniego

lambda x: i * 10 ** x

wydaje mi się że to można zapisać tak :

x = i * 10 **x

Oczywiście, że nie można. :) Gdyby można było, to Twoja wersja by działała, a jak się łatwo przekonać -- nie działa. :)

lambda oznacza definicję funkcji pomocniczej w locie. Więc Twój przykład

for i in range(1,int(input())):
    print(list(map(lambda x: i * 10**x, range(i))))

można inaczej zapisać tak:

def funkcja_pomocnicza(x):
    return i * 10**x
for i in range(1,int(input())):
    print(list(map(funkcja_pomocnicza, range(i))))

1 użytkowników online, w tym zalogowanych: 0, gości: 1