🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #217408

Re: Lambda w Pythonie

#217408
From: Piotr Chamera
Date: Wed, 17 Feb 2021 15:06
58 lines
2839 bytes
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)
Technical Details
Message-ID: <s0jbgg$8r9$1@dont-email.me>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin3!goblin1!goblin.stu.neva.ru!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
References: <602d248b$0$555$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin3!goblin1!goblin.stu.neva.ru!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: Piotr Chamera <piotr_chamera@poczta.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
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="abuse@eternal-september.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-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit