eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingLambda w Pythonie › Re: Lambda w Pythonie
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin3!goblin1!goblin.st
    u.neva.ru!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-
    mail
    From: Piotr Chamera <p...@p...onet.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Lambda w Pythonie
    Date: Wed, 17 Feb 2021 16:06:58 +0100
    Organization: A noiseless patient Spider
    Lines: 58
    Message-ID: <s0jbgg$8r9$1@dont-email.me>
    References: <602d248b$0$555$65785112@news.neostrada.pl>
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 8bit
    Injection-Date: Wed, 17 Feb 2021 15:08:00 -0000 (UTC)
    Injection-Info: reader02.eternal-september.org;
    posting-host="662b49fe9d602c3e476efb87301a998d"; logging-data="9065";
    mail-complaints-to="a...@e...org";
    posting-account="U2FsdGVkX19Pd8ibtF1mzQeqb4fHHC4O"
    User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:78.0) Gecko/20100101
    Thunderbird/78.7.0
    Cancel-Lock: sha1:hlFZfkviGS9l2fbL/6h/5W3E+R8=
    In-Reply-To: <602d248b$0$555$65785112@news.neostrada.pl>
    Content-Language: pl
    Xref: news-archive.icm.edu.pl pl.comp.programming:215377
    [ ukryj 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: