Re: [Python] Insiemi

2021-05-25 Per discussione Federico Cerchiari
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

2020-10-03 Per discussione Federico Cerchiari
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 *

2019-12-10 Per discussione Federico Cerchiari
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.

2019-02-12 Per discussione Federico Cerchiari
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...

2018-10-16 Per discussione Federico Cerchiari
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.

2018-07-22 Per discussione Federico Cerchiari
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.

2018-01-18 Per discussione Federico Cerchiari
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

2017-11-26 Per discussione Federico Cerchiari
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

2017-09-16 Per discussione Federico Cerchiari
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)

2017-09-07 Per discussione Federico Cerchiari
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)

2017-09-07 Per discussione 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


Re: [Python] TemPy - OOP template engine in python - cerco opinioni e collaboratori

2017-08-12 Per discussione Federico Cerchiari
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

2017-08-12 Per discussione Federico Cerchiari
@ 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

2017-08-12 Per discussione Federico Cerchiari
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

2017-08-12 Per discussione Federico Cerchiari
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.

2017-06-28 Per discussione Federico Cerchiari
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

2017-05-16 Per discussione Federico Cerchiari
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