Re: [Python] Insiemi
Ciao Bruno, questo comportamento dell'interprete deriva dal fattto che in ss1 ed ss3, nel momentto in cui True viene inserito nel set, è già presente un oggetto con "valore" 1 nello stesso set. Questo perchè i set (come le chiavi dei dizionari) sono collezioni di "hashabili", gli hashabili sono oggetti di cui può essere calcolatto l'hash, e l'hash è un numero intero che identtifica il "valore" dell'oggetto. In questo caso, sia "True" che "1" hanno hash di valore 1: >>> hash(True) 1 >>> hash(1) 1 >>> hash(True) == hash(1) True >>> True == 1 True Entrambi True e 1 "valgono" 1, al momento dell'inserimento in un insieme, Python fa questo ragionamento: "esiste già un elemento che "vale" come questo?", e in ss1 ed ss3, la risposa è sì. Lo stesso vale in entrambi i versi: >>> { 1 , True } {1} >>> { True, 1 } {True} Il comportamento è un false friend, ma deriva da come è implemenato il metodo __hash__ alla base dell'interprete. Lo setsso vale per False e 0: >>> { False, 0 } {False} I due bool, ed 1 e 0, hanno lo stesso "valore" per l'interprete, pur essendo "cose" diverse: >>> True is 1 False Ciao Federico Il giorno mar 25 mag 2021 alle ore 19:27 Bruno Firmani < firmanibr...@gmail.com> ha scritto: > Buonasera, > sto incontrando questa difficoltà. > > Sto imparando. > > Alle istruzioni: > > ss0 = { 2<=2 , 5 >= 3 } > ss1 = { 1 , 2 , 3 , 4 , '4' , '5' , 'a' , 'b' , 'c' , 3 , '3' , 4 , '4' , > False , 2<=2 , 5 >= 3 } > ss2 = { 1 ,11 , 'a' , 'ab' , 'abc' } > ss3 = { 1 , 2 , 3 , 2 , 3 , 3 , 'a' , 'b' , 'c' , 'b' , 'c' , 'c' , False > , 2<=2 , 5 >= 3 } > > print('ss0 = ' , ss0) > print('ss1 = ' , ss1) > print('ss2 = ' , ss2) > print('ss3 = ' , ss3) > > ottengo come risposta: > > ss0 = {True} > ss1 = {False, 1, 2, 3, 4, '5', '3', 'b', 'c', '4', 'a'} > ss2 = {1, 'abc', 11, 'ab', 'a'} > ss3 = {False, 1, 2, 3, 'b', 'c', 'a'} > > > In "ss0" compare "True" che invece non viene evidenziato in "ss1" e in > "ss3". > Non so spiegarmi questo fenomeno. > > Cordiali saluti > Bruno Firmani > > > > > >Bruno Firmani >Via Giannantonio Manci 5 - 39100 BOLZANO > e.mail firmanibr...@gmail.com >mlbf1...@gmail.com > tel. +39 338 5721755 (cellulare) > fax+39 02 70039544 > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] dependency injection con i decoratori
Ciao, se ho capito bene quello che vuoi fare hai bisogno che il decoratore abbia uno o più parametri valorizzati in base all'enviroment test/non test. Una cosa del genere puoi farla con functools.partial, partendo dall'esempio di Matteo: from functools import partial from eventuale_modulo_config import landscape from mocks import collaboratori as collaboratori_mock from validators import collaboratori def decoratore_generic(func, collaboratori): def inner(*args, **kwargs): ... return inner if landscape == "TEST": decoratore = partial(decoratore_generic, collaboratori_mock) else: decoratore = partial(decoratore_generic, collaboratori) @decoratore() def func1(): pass Fede Il giorno ven 2 ott 2020 alle ore 17:12 Federico Fissore ha scritto: > Matteo Scarpa wrote on 02/10/20 16:30: > > Lo puoi fare scrivendo una cosa tipo: > > > > def decoratore(func, collaboratori): > > def inner(*args, **kwargs): > > ... > > return inner > > > > @decoratore(collaboratore1) > > def func1(): > > pass > > > > Spero di essere stato chiaro. Se vuoi vedere cose piú avanzate > > suggerisco di dare una sbirciata al sorgente di Flask che fa proprio > > queste cose. > > > > Ti ringrazio Matteo, darò un'occhiata ai sorgenti di Flask > > La mia idea era di evitare di passare tutti i collaboratori ogni volta > che aggiungo il decoratore: l'unico modo che conosco per farlo è > definirli a livello di modulo, quindi in fase di testing diventa poi > difficile passare al decoratore un collaboratore finto o mocckato, a > meno di fare monkey patching > > federico > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] from module import *
Ciao, una cosa (molto brutta, ma che potrebbe funzionare) è fare override dell'importatore di moduli dell'interprete: = import __builtin__ realimp = __builtin__.__import__ def my_import(name, globals={}, locals={}, fromlist=[]): if name == 'backend' and '*' in fromlist: raise ImportError('* import is forbidden. Module functions must be imported explicitly.') return realimp(name, globals, locals, fromlist) __builtin__.__import__ = my_import from backend import * = Se, in un qualche modo, riesci a fare eseguire questo codice prima dell'import vero e proprio degli utenti, dovresti riuscire a risolvere. In altenativa (se stai usando python3, con il 2 non os se sia possibile) puoi intercettare la cosa facendo una sottoclasse custom del modulo di backend/frontend, per farlo, impotizzando che tu abbia una struttura di folder tipo questa: / root | /backend/__init__.py | /backend/file_di_funzioni1.py . | /frontend/__init__.py | /frontend/file_di_funzioni1.py . script_utente.py Puoi inserire nell'__init__ dei due package frontend e banckend codice tipo questo: == import sys from types import ModuleType __version__ = "1.4.1" VERSION = tuple(map(int, __version__.split("."))) # Qui vanno definite tutte le funzioni che possono essere importate dall'utente, _shorcuts = { # nome funzione: file in cui è definita "backend_function": "mod", } # Override della classe moduli di python, che useremo per i moduli frontend e backend class MyModule(ModuleType): def __getattr__(self, name): # Override di getattribute, in modo che sia pilotato l'import delle funzioni if name in _shorcuts.keys(): submodule = __import__( "backend." + _shorcuts[name], globals(), locals(), [name] ) return getattr(submodule, name) r = ModuleType.__getattribute__(self, name) return r def __getattribute__(self, name): # Override per intercettare l'import * if name == '__all__': raise ImportError('* import is forbidden. Module functions must be imported explicitly.') return object.__getattribute__(self, name) # Un pò di magia per sostituire il modulo stesso (che è già stato importato) con la nostra versione del modulo _, sys.modules["backend"] = sys.modules["backend"], MyModule("backend") # Fondamentali per rendere "backend" un package agli occhi di python sys.modules["backend"].__dict__.update( { "__file__": __file__, "__package__": "backend", "__path__": __path__, "__doc__": __doc__, "__version__": __version__, "__all__": tuple(_shorcuts.keys()), "__docformat__": "restructuredtext en", } ) == Fede Il giorno mar 10 dic 2019 alle ore 10:35 Piergiorgio Pancino < piergiorgio.panc...@gmail.com> ha scritto: > Ciao a tutti, > vi scrivo per un consiglio concernente l'importazione di * da un modulo. > > Il problema si pone per il fatto che il software sul quale lavoro e' > esposto allo scripting da parte degli utenti e quindi non e' realmente > controllabile con delle semplici regole di buon coding. > > Senza andare troppo nei dettagli, ho un modulo con delle funzioni frontend > (con print) e un modulo corrispondente con delle funzioni di backend (che > ritornano dizionari, NamedTuple ...) queste funzioni hanno lo stesso nome e > nel momento in cui l'utente fa: 'from backend import *' questo sovrascrive > le funzioni frontend in maniera inaspettata (perlomeno per l'utente). > Questo e' anche dovuto al modo in cui vengono caricati gli script utente > che pero' al momento non e' possibile cambiare: in pratica abbiamo un > `load_script` che elabora il file ed esegue quanto contenuto, una pratica > non proprio pythonica, ma va mantenuta. > > Una delle possibili soluzioni e' chiaramente rinominare le funzioni > backend, magari con un 'lib_funzione'. > Una alternativa sarebbe impedire l'import star, la domanda infatti verte > su questo: e' possobile sollevare un'eccezione su questo tipo di import? > Grazie > > Piergiorgio > > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Iterazione.
Ciao, come dice Michele in tutte le versioni di Python precedenti alla 3.3 i dizionari non sono ordinati, bisogna sempre tenerlo a mente. Ad ogni modo, per ciclare le chiavi di un dizionario conoscendo il valore del prossimo ciclo puoi fare così: from itertools import izip_longest dizionario = {1: 'A', 2: 'B', 3: 'C'} chiavi = list(dizionario.keys()) for chiave, prossima in izip_longest(chiavi, chiavi[1:]): print '=' * 20 print 'chiave corrente: ', chiave print 'prossima chiave: ', prossima in due parole: - salvi le chiavi in una lista (quindi ordinata) - con izip_longest crei una lista di coppie come se stessi ciclando conteporaneamente le chiavi e le chiavi stesse partendo dal secondo elemento - nell'ultimo ciclo in "chiave" ci sarà l'ultima chiave, ed in "prossima" ci sarà None Se devi ciclare sia le chiavi che i valori con la stessa logica (dict.iteritems() ma sapendo i prossimi items) pruoi cambiare con questo codice: cont_diz = dizionario.items() for (chiave, valore), (prossima_chiave, prossimo_valore) in izip_longest(cont_diz, cont_diz[1:], fillvalue = (None, None)): print '=' * 20 print 'valori correnti:' print chiave, valore print 'Prossimi valori:' print prossima_chiave, prossimo_valore ..che praticamente è quello di prima ma in usando items() invece di keys() e dando a izip_longest un valore di fallback custom Ciao, Federico Il giorno mar 12 feb 2019 alle ore 14:01 Michele Orrù ha scritto: > On 2/12/19 1:51 PM, Gabriele Battaglia wrote: > > Ciao a tutti. > > Se ho un ciclo che sta iterando sulle chiavi di un dizionario. Ho la > > possibilità di conoscere la chiave successiva a quella a cui il ciclo è > > arrivato? > > Perdonate se non sono riuscito ad esprimermi bene... Se non è chiaro ci > > provo con parole diverse. > > Gabry. > > > > ciao > non c'è nozione d'ordine sulle chiavi di un dizionario, ma puoi iterare > le chiavi con > for key in dict > > se hai bisogno di ordine ci sta ordereddict > > -- > https://www.youtube.com/watch?v=fhCLalLXHP4 > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Sintassi sconosciuta...
Ciao, la sintassi è la stessa dell'unpacking, ma al contrario si tratta di packing... io generalmente uso quella sintassi nei cicli for quando mi capita di iterare su tuple: list_of_coordinates = [(2, 4, 5), (2, 4, 6), (2, 5, 7), (2, 5, 8)] for (x, y, z) in list_of_coordinates: print(x + 1) l'alternativa, secondo me, è più illeggibile: list_of_coordinates = [(2, 4, 5), (2, 4, 6), (2, 5, 7), (2, 5, 8)] for coord in list_of_coordinates: print(coord[0] + 1) Federico Il giorno mar 16 ott 2018 alle ore 14:24 Davide Brunato ha scritto: > On 10/16/18 1:06 PM, Alessandro Dentella wrote: > > mi sono accorto dopo tanti anni di uso di Python di non avere idea di > > questa sintassi: > > > > [tmp_loc] = glob.glob(os.path.join(tmp_dest, '*')) > > > > che trovate usata qui: > > > > #L1740 > > > > Che cosa fa? che senso ha usarla quando mi vengono in mente vari altri > > modi di ottenere quello che (forse, penso) faccia. > > > > Soprattutto, quella riga st creandomi problemi... > > > > Chi mi sa illuminare? > > > Può servire ad estrarre da un iterabile/lista/tupla una sequenza di > valori, generando un errore in caso di discordanza nel numero di > elementi o se l'operando a destra non è un iterabile: > > >>> [a] = 1 > Traceback (most recent call last): > File "", line 1, in > TypeError: 'int' object is not iterable > >>> [a] = 1, > >>> a > 1 > >>> [a] = 1, 2 > Traceback (most recent call last): > File "", line 1, in > ValueError: too many values to unpack > >>> [a] = [] > Traceback (most recent call last): > File "", line 1, in > ValueError: need more than 0 values to unpack > > Credo sia equivalente alla sintassi con parentesi tonde, o a quella con > virgole, usata solitamente per il doppio assegnamento: > > >>> a, b = [4, 5] > >>> a, b > (4, 5) > >>> a, = [6] > >>> a > 6 > > Ciao > > Davide > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Una domanda su una variabile.
Ciao, non trovo la discussione originale di Gabriele a cui rispondere quindi rispondo qui. Come dice Manlio non c'è bisogno di un thread diverso creato manualmente e non c'è bisogno di una variabile globale per intercettare ogni input da tastiera. Io consiglio di usare questo modulo: https://pythonhosted.org/pynput/keyboard.html#monitoring-the-keyboard Basta definire due funzioni di callback che gestiscano la pressione e il rilascio di un tasto. Federico Il giorno sab 21 lug 2018 alle ore 12:11 Manlio Perillo < manlio.peri...@gmail.com> ha scritto: > On Fri, Jul 20, 2018 at 4:23 PM Gabriele Battaglia > wrote: > > > > Buon pomeriggio a tutti. > > > > Se lancio il mio script python il quale lancia a sua volta un thread. > > Questo thread ha il compito di monitorare la variabile v. > > Nello script principale, una istruzione input chiede un valore > > all'utente e poi lo assegna a v. > > > > Il thread secondario, vedrà il valore di v (globale), man mano che > > l'utente lo inserisce da tastiera, o solo dopo che l'utente avrà dato > invio? > > > > Evita di usare una variabile globale, ed evita di accedere ad una > variabile da thread diversi. > Che intendi con "man mano che l'utente lo inserisce da tasciera"? > > > Manlio > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] self, generatori e liste.
Ciao Luca, non ho controllato, ma "a naso" direi che un generatore, anche se definito in line è un oggetto function, e come tale ha il suo namespace chiuso che non può accedere all'esterno. per usare un generatore in un contesto simile potresti fare una cosa così: def iter_orari(self): for s in sorted(self.orario.settimane): yield self.orario.settimane[s] for o in iter_orari(self): print o Il giorno 18 gennaio 2018 16:29, Luca ha scritto: > Il giorno 18 gennaio 2018 16:27, Luca ha scritto: > >> >> for o in (self.orario.settimane[s] for s in sorted(self.orario.settimane)]): >> >>print o >> > > > scusate era: > > for o in (self.orario.settimane[s] for s in sorted(self.orario.settimane)): > >print o > > -- > Luca > > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Iterare una sequenza
Ciao Giuseppe, per trovare la posizione di un oggetto in una sequenza (lista, stringa o altro) puoi usare il metodo '.index' delle liste: dna_seq = 'ACTGATCGATTACGTATAGTAGAATTCTATCATACATATATATCGATGCGTTCAT' target = 'GAATTCT' target_position = dna_seq.index(target) + 1 print('lunghezza pre-target: %d, post-target %d' % (target_position, len(dna_seq)-target_position)) Se vuoi iterare sulla sequenza per farci altro fai bene a usare 'enumerate', ma invece di costruirti la stringa di comparazione di volta in volta puoi prelevarla dalla stringa originale ad ogni ciclo: for position, gene in enumerate(dna_seq): if dna_seq[position:position+len(target)] == target: position += 1 # Aggiungiamo 1 perchè enumerate è 0-based print('lunghezza pre-target: %d, post-target %d' % (position, len(dna_seq)-position)) Federico 2017-11-26 10:42 GMT+01:00 Giuseppe Costanzi : > ciao carlo, > > si, interessante ma vorrei iterare la sequenza mano a mano, > > stavo pensando a qualcosa tipo > > next(iterator, default) > > grazie comunque > > > > On Sun, Nov 26, 2017 at 10:30 AM, Carlo Miron wrote: > > On Sun, Nov 26, 2017 at 10:20 AM, Giuseppe Costanzi > > wrote: > > > >> ho una sequenza del tipo > >> ACTGATCGATTACGTATAGTAGAATTCTATCATACATATATATCGATGCGTTCAT > >> scorrendola devo trovare una sequenza target GAATTC > >> ACTGATCGATTACGTATAGTA "GAATTC" TATCATACATATATATCGATGCGTTCAT > >> quindi dividere la sequenza da G, la prima lettera della sequenza > target, > >> e calcolarmi la lunghezza dei due frammenti risultanti > >> ACTGATCGATTACGTATAGTAG > >> e di questa > >> GAATTCTATCATACATATATATCGATGCGTTCAT > > > > qualcosa tipo > > > seq = "ACTGATCGATTACGTATAGTAGAATTCTATCATACATATATATCGATGCGTTCAT" > target = "GAATTCT" > first, second = seq.split(target, 1) > first += target[1] > second = target[1:] + second > len(first), len(second) > > (22, 33) > > > > ? > > ㎝ > > > > -- > > |:**THE 🍺-WARE LICENSE** *(Revision ㊷)*: > > | wrote this mail. As long as you retain this > > | notice you can do whatever you want with this stuff. > > | If we meet some day, and you think this stuff is worth it, > > | you can buy me a 🍺 in return. —㎝ > > ___ > > Python mailing list > > Python@lists.python.it > > https://lists.python.it/mailman/listinfo/python > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] skcsirt-sa-20170909-pypi
No, su PyPI non ci sono controlli di nessun tipo. Basta registrarsi con una qualsiasi mail ed è possibile registrare e uploadare un package. L'unico controllo è che non puoi registrare un package che ha lo stesso nome di un'altro registrato da un'altro utente. Un'altro vincolo è che registrare e uploadare packages su PyPI con twnie o setuptools non è così immediato, sono pieni di bug :D Il codice che finisce su PyPI non subisce nessun controllo. Neanche su similarità dei nomi o equivalenza dei nomi registrati su pypi con quelli dell'effettivo import. Per esempio io potrei domani rilasciare "djang", un clone di django con dentro codice malevolo, e fare in modo che l'utente lo possa usare scrivendo "import django". A questo punto basta che qualcuno si sbagli a scrivere "pip install django" mancando l'ultima lettera che il mio codice malevolo sarebbe usato nel suo software. L'unico modo per essere sicurissimi di quel che si sta usando/scaricando da PyPI è controllare su PyPI dove punta il link di download del progetto (di solito GitHub o simili), e verificare sul repo del progetto il codice o le referenze del progetto stesso "a occhio". Il giorno 16 settembre 2017 15:06, Federico Pasqua < federico.pasqua...@gmail.com> ha scritto: > Pensavo ci fossero dei controlli anche solo superficiali su PyPI > > Il 16 set 2017 1:16 PM, "Enrico Bianchi" ha > scritto: > >> http://www.nbu.gov.sk/skcsirt-sa-20170909-pypi/ >> >> >> >> Enrico >> >> ___ >> Python mailing list >> Python@lists.python.it >> https://lists.python.it/mailman/listinfo/python >> >> > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Interview per lavoro su python (e django)
itertools.count() senza parametri o con solo un parametro è un generatore infinito. Usandolo dentro ad un generatore il risultato è un FizzBuzz infinito. Il giorno 7 settembre 2017 11:25, Roberto Pomoni ha scritto: > Perchè "itertools.count()" e non un semplice "range()"? > > Risparmio una riga di import, se lo scopo è scrivere meno codice > possibile. :) > > Roberto > > "Difficilmente l'uomo fa uso delle libertà che lui ha, per esempio la > libertà di pensiero; in compenso insiste a richiedere la libertà di parola" > Søren Kierkegaard > > 2017-09-07 11:21 GMT+02:00 Federico Cerchiari >: > >> ('FizzBuzz'[4*bool(n%3):4+4*bool(not n%5)] or n for n in >> itertools.count()) >> >> per quella delle lettere: set(frase) == set(list(map(chr, range(97, >> 123 >> >> p.s: itertools.count l'ho copiato da Carlo Miron :P >> >> Il giorno 7 settembre 2017 11:13, Pietro Brunetti >> ha scritto: >> >>> Una domanda carina (che mi hanno fatto) è scrivere una funzione che >>> controlli che in una frase ci siano tutte le lettere dell'alfabeto. >>> >>> Comunque dovremmo davvero organizzare più spesso un po' di code-fu in >>> lista >>> >>> SPOILER >>> La soluzione migliore passa per i set >>> >>> >>> >>> Il giorno 7 settembre 2017 11:02, Carlo Miron ha >>> scritto: >>> >>>> 2017-09-07 0:58 GMT+02:00 Karim : >>>> >>>> > 2017-09-06 8:25 GMT+10:00 Riccardo Magliocchetti >>>> > : >>>> >> >>>> >> Nel primo caso per profili junior anni fa chiedevo tra le altre >>>> queste >>>> >> due: >>>> >> - quale linguaggi conosci di più e quanto bene da 1 a 10 >>>> >> - fizzbuzz in che linguaggio preferisci >>>> > >>>> > Fantastico, non conoscevo fizzbuzz. Ho provato a farlo e ho salvato la >>>> > faccia, allora ho proposto lo stesso esercizio sul gruppo facebook... >>>> > diciamo che ha acceso gli animi :D >>>> >>>> E così parte il golfing sulla soluzione più breve. la mia è >>>> >>>> ("Fizz"*(not x%3)+"Buzz"*(not x%5) or x for x in itertools.count(1)) >>>> >>>> :P >>>> >>>> ㎝ >>>> >>>> -- >>>> |:**THE 🍺-WARE LICENSE** *(Revision ㊷)*: >>>> | wrote this mail. As long as you retain this >>>> | notice you can do whatever you want with this stuff. >>>> | If we meet some day, and you think this stuff is worth it, >>>> | you can buy me a 🍺 in return. —㎝ >>>> ___ >>>> Python mailing list >>>> Python@lists.python.it >>>> https://lists.python.it/mailman/listinfo/python >>>> >>> >>> >>> >>> -- >>> There is a crack, a crack in everything. That’s how the light gets in >>> L. Cohen >>> >>> ___ >>> Python mailing list >>> Python@lists.python.it >>> https://lists.python.it/mailman/listinfo/python >>> >>> >> >> ___ >> Python mailing list >> Python@lists.python.it >> https://lists.python.it/mailman/listinfo/python >> >> > > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Interview per lavoro su python (e django)
('FizzBuzz'[4*bool(n%3):4+4*bool(not n%5)] or n for n in itertools.count()) per quella delle lettere: set(frase) == set(list(map(chr, range(97, 123 p.s: itertools.count l'ho copiato da Carlo Miron :P Il giorno 7 settembre 2017 11:13, Pietro Brunetti ha scritto: > Una domanda carina (che mi hanno fatto) è scrivere una funzione che > controlli che in una frase ci siano tutte le lettere dell'alfabeto. > > Comunque dovremmo davvero organizzare più spesso un po' di code-fu in lista > > SPOILER > La soluzione migliore passa per i set > > > > Il giorno 7 settembre 2017 11:02, Carlo Miron ha > scritto: > >> 2017-09-07 0:58 GMT+02:00 Karim : >> >> > 2017-09-06 8:25 GMT+10:00 Riccardo Magliocchetti >> > : >> >> >> >> Nel primo caso per profili junior anni fa chiedevo tra le altre queste >> >> due: >> >> - quale linguaggi conosci di più e quanto bene da 1 a 10 >> >> - fizzbuzz in che linguaggio preferisci >> > >> > Fantastico, non conoscevo fizzbuzz. Ho provato a farlo e ho salvato la >> > faccia, allora ho proposto lo stesso esercizio sul gruppo facebook... >> > diciamo che ha acceso gli animi :D >> >> E così parte il golfing sulla soluzione più breve. la mia è >> >> ("Fizz"*(not x%3)+"Buzz"*(not x%5) or x for x in itertools.count(1)) >> >> :P >> >> ㎝ >> >> -- >> |:**THE 🍺-WARE LICENSE** *(Revision ㊷)*: >> | wrote this mail. As long as you retain this >> | notice you can do whatever you want with this stuff. >> | If we meet some day, and you think this stuff is worth it, >> | you can buy me a 🍺 in return. —㎝ >> ___ >> Python mailing list >> Python@lists.python.it >> https://lists.python.it/mailman/listinfo/python >> > > > > -- > There is a crack, a crack in everything. That’s how the light gets in > L. Cohen > > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] TemPy - OOP template engine in python - cerco opinioni e collaboratori
Verissimo! Un importer di HTML é sicuramente un TODO molto importante! Il 12 ago 2017 17:12, "Matteo Scarpa" ha scritto: > > > Il giorno sab 12 ago 2017 alle ore 16:56 Matteo Scarpa < > fundor...@gmail.com> ha scritto: > >> >> Ho pensato di implementare qualcosa di simile a BeautifulSoup per la >>> navigazione del DOM, sopratutto per la parte di ricerca come find_all() e >>> simili. Oltre a quello ho provato/pensato di usare direttamente lmxl. >>> Nel mio caso li ho scartati perchè avrebbero richiesto un refactor >>> troppo profondo e l'aggiunta di una dipendenza. >>> >>> Conosci altre librerie che implementano algoritmi di ricerca in alberi? >>> non vorrei riscrivermi da capo una ricerca che sicuramente è già stata >>> fatta. >>> >> >> Personalmente penso che sarebbe bene iniziare con una di queste due >> librerie in "pancia" in quanto molto solide e stabili e ottimizzate proprio >> per fare questo genere di lavoro su html, xml e affini per poi, in un >> secondo momento, pensare di sostituirle con qualcosa di più specifico o su >> misura. >> >> Contando poi che BeutifullSoup può anche essere utilizzato per validare >> le pagine web non sarebbe una cattiva idea spendere del tempo per >> includerla nel progetto. >> >> In più, leggendo il codice di esempio, sembra che hai sbagliato le >> tabelle delle Performance >> > > Ho capito un problema fondamentale del tuo progetto!!! Non posso importare > gli html! > > Mi spiego: > Cliente Tonto (o cliente medio) arriva e mi da il suo sito "vecchio"/html/ > quello che il grafico ha prodotto e io devo implementarlo con il template > engine. Se io avessi la possibilità di convertire un html nel "python" > corrispondente e/o avesse la possibilità di convertire temi Jinja2/Mako > sarebbe un ottimo punto di forza dell'engine > -- > > Fundor333 > https://fundor333.com > > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] TemPy - OOP template engine in python - cerco opinioni e collaboratori
@ Matteo Scarpa Ho pensato di implementare qualcosa di simile a BeautifulSoup per la navigazione del DOM, sopratutto per la parte di ricerca come find_all() e simili. Oltre a quello ho provato/pensato di usare direttamente lmxl. Nel mio caso li ho scartati perchè avrebbero richiesto un refactor troppo profondo e l'aggiunta di una dipendenza. Conosci altre librerie che implementano algoritmi di ricerca in alberi? non vorrei riscrivermi da capo una ricerca che sicuramente è già stata fatta. Il giorno 12 agosto 2017 13:21, Matteo Scarpa ha scritto: > Dai una occhiata a BeautifullSoup che usa un sistema simile per > strutturare l'albero di oggetti che rappresenta una paginaa web che, anche > se lo scopo del pacchetto è quello di ottenere dati da una pagina html, > secondo me può tornarti utile per stutturare la pagina > > Il giorno sab 12 ago 2017 alle ore 12:02 Federico Cerchiari < > federicocerchi...@gmail.com> ha scritto: > >> Opps, https://github.com/Hrabal/TemPy >> >> Il giorno 12 agosto 2017 12:01, Jacopo Cascioli > > ha scritto: >> >>> Sembra interessante, ma non ci sono link. Sono io che non lo vedo? >>> >>> ___ >>> Python mailing list >>> Python@lists.python.it >>> https://lists.python.it/mailman/listinfo/python >>> >>> >> ___ >> Python mailing list >> Python@lists.python.it >> https://lists.python.it/mailman/listinfo/python >> > -- > > Fundor333 > https://fundor333.com > > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] TemPy - OOP template engine in python - cerco opinioni e collaboratori
Opps, https://github.com/Hrabal/TemPy Il giorno 12 agosto 2017 12:01, Jacopo Cascioli ha scritto: > Sembra interessante, ma non ci sono link. Sono io che non lo vedo? > > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] TemPy - OOP template engine in python - cerco opinioni e collaboratori
Ciao a tutti, ho iniziato questo progetto per "mantenermi in forma" e visto che potrebbe essere utile a qualcuno ho deciso di renderlo pubblico con l'idea di farlo crescere e rilasciarlo su PyPi. Si tratta di un template engine per la generazione di HTML votato all'OOP, in pratica serve per la generazione di pagine HTML utilizzando oggetti python invece che scrivere HTML in un template Jinja2/Mako o altro. A questo ho aggiunto delle api in stile jQuery per la navigazione e manipolazione dell'albero html. Sto cercando opinioni suggerimenti e critiche per miglioralo (siate spietati! :P) , ma sopratutto persone interessate a collaborare! Federico ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Liste: rimuovere elementi.
Ciao, il metodo pop ritorna sempre il valore che viene tolto dalla lista. Come dice Francesco Pischedda è probabile che tu stia lavorando nell'interprete, se non vuoi creare una variabile ad hoc per nascondere il valore poppato puoi usare la puoi usare la variabile di throwaway "_": _ = lista.pop(i) una alternativa, decisamente troppo complicata (e anche rischiosa) per ottenere lo stesso effetto è: map(lista.pop, (i,)) Il giorno 28 giugno 2017 10:05, Francesco Pischedda < francesco.pische...@gmail.com> ha scritto: > Ciao, > > Il giorno 28 giugno 2017 09:51, Gabriele Battaglia ha > scritto: > >> Salve. >> Se ho una lista: >> l=['a','b','c'] >> E desidero eliminare l'elemento 'b', ma voglio cercarlo per indice, non >> per valore, invece di usare l.remove('b') devo usare l.pop(1). >> La domanda è: per evitare che pop stampi a schermo il valore rimosso, >> l'unico modo è quello di assegnarlo ad una variabile o esiste un modo per >> non far produrre output a pop? >> >> gc = l.pop(1) >> 'b' >> > > immagino tu stia vedendo la stampa a schermo perchè stai eseguendo quella > riga di codice dall'interprete interattivo che di solito stampa il > risultato dell'ultima operazione, lanciando invece uno script contente quel > codice questo non dovrebbe succedere a meno che tu non lo faccia > esplicitamente con una print > > -- > "Unix IS user friendly. It's just selective about who its friend are" > > "Nevertheless I still think it’s a bad idea to make things harder for > ourselves if we can avoid it." > > "C is quirky, flawed, and an enormous success." >-- Dennis Ritchie > > "Shipping is a feature. A really important feature. Your product must have > it." > > "There is no such a thing as a temporary change or workaround: In most > cases, workarounds are tech debt." > > "La gatta frettolosa ha fatto i gattini ciechi" > > > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > > ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Modificare i valori di una colonna di un file csv
Ciao Paolo, non sono un esperto di Pandas, ma se i tuoi file non sono troppo grandi puoi farne a meno ed utilizzare il modulo csv: import csv # Leggi i due file with open('file1.csv', 'rb') as f1: with open('file2.csv', 'rb') as f2: # Dal secondo crei un dizionario di mapping mapping = {row[0]: row[1] for row in csv.reader(f2, delimiter=' ')} # Dal primo estrai le righe e sostituisci i valori, se non è presente il valore nel secondo file, hai come fallback il valore originale result = [mapping.get(row[0], row[0]) for row in csv.reader(f1, delimiter=' ')] # Salvi nel primo file quello che hai ottenuto with open('file1.csv', 'wb') as f1: csv.writer(f1).writerows(result) Il giorno 16 maggio 2017 18:50, Paolo Di Ieso ha scritto: > La stanchezza, ero sicuro di aver creato ex-novo l'email. Riprovo come > consigliato da Gollum! ;) > > Dicevo che sono alle prime armi con Pandas e ho questo problema: in due > dataframe ho il contenuto di due file CSV, entrambi con un header e qualche > decina di colonne. Iterando sulle righe di entrambi voglio modificare il 1° > file in modo tale che quando un valore della colonna "srvid" del 1° file > coincide con il valore dell'omonima colonna "srvid" del 2° file, nella > colonna "srvid" del 1° file metto il valore preso dalla colonna "srvname" > del 2°. Un esempio: > > Situazione iniziale 1° file: > > srvid > 42 > 63 > 63 > 63 > 42 > 42 > > Situazione iniziale 2° file: > > srvid srvname > 42HOTSPOT > 43WiFi 6M > 44WiFi 8M > > > Situazione 1° file dopo le modifiche: > > srvid > HOTSPOT > 63 > 63 > 63 > HOTSPOT > HOTSPOT > > Tutti i valori 42 della colonna "srvid" del 1° file sono stati sostituiti > dal valore "HOTSPOT" trovato in "srvname" del 2° file quando l'adiacente > "srvid" ha anch'essa valore 42. Ho iniziato scrivendo > > df = pd.read_csv(rm_users_in, sep=";", > usecols=rm_users_to_o4w_column.keys(), > dtype={"zip": object} # fix value from 50015.0 to 50015 > ) > df2 = pd.read_csv(rm_services_in, sep=";", > usecols=rm_services_to_o4w_column.keys() > ) > for row in df.itertuples(): > for row2 in df2.itertuples(): > if row.srvid == row2.srvid: > row["srvid"] = row2.srvname > > ma dal traceback capisco di non essere sulla strada giusta. Mi date una > mano a tornare sulla retta via? > > Grazie mille. > Paolo > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python