eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingLambda w Pythonie › Re: Lambda w Pythonie
  • Data: 2021-02-17 16:06:58
    Temat: Re: Lambda w Pythonie
    Od: Piotr Chamera <p...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2021-02-17 o 15:13, Roman Tyczka pisze:
    >
    > Być może źle do tego podchodzę... ale potrzebuję funkcji X(), która
    > zwraca jakieś dane, tę funkcję muszę przekazać dalej i gdzieś tam w
    > trzewiach biblioteki zostanie wywołana i pobrana z niej wartość.
    > Problem polega na tym, że funkcja ma zwracać różne dane w zależności od
    > pewnego parametru, ale samego parametru jej przekazać nie mam jak, więc
    > pomyślałem, że zrobię sztuczkę z lambdą/anonymousem, czyli utworzę
    > funkcję, która dostanie ten istotny parametr i zwróci lambdę już
    > "spreparowaną" pod wymagania wynikające z tego parametru.
    > No ale nie umiem :-(
    >
    > Zrobiłem tak:
    >
    > #funkcja generująca tablicę bajtów o określonej długości
    > def getCTR(bits: int):
    >     k = bits // 8
    >     b = bytes([6])
    >     return b * k

    Może chodziło Ci o coś takiego:

    def getCTR(bits: int):
    k = bits // 8
    b = bytes([6])
    return lambda : b * k


    >>> getCTR(8)
    <function getCTR.<locals>.<lambda> at 0x02C68660>
    >>> f = getCTR(8)
    >>> f()
    b'\x06'
    >>> f = getCTR(32)
    >>> f()
    b'\x06\x06\x06\x06'


    getCTRn i getCTRx są niepotrzebne

    > #typ lambdy, który korzysta z powyższej funkcji
    > getCTRn = lambda x : getCTR(x)
    >
    > #funkcja główna, mająca zwrócić lambdę
    > #spreparowaną na zwrócenie określonej wartości
    > def getCTRx(bites):
    >     g: getCTRn = getCTRn(8 * bites)
    >     return g
    >
    > i kod właściwy, który tego wszystkiego powyżej używa:
    >
    >   ctr = getCTRx(algModule.key_size)
    >   ciph = algModule.new(key, algMode, IV=iv, counter=ctr)

    a wywołanie wyglądałoby tak:

    ctr = getCTR(algModule.key_size)
    ciph = algModule.new(key, algMode, IV=iv, counter=ctr)

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: