Forum >> Principianti >> For In

Pagina: 1

Salve a tutti non riesco a capire questo passaggio, ovvero l'utilizzo di if e in if. accade che la condizione è vera anche se ret = "" preso dal seguente codice:



8)]def enum(**enums):
8)]return type('Enum', (), enums)Status = enum(ERR=['ERROR', 'Fail'], OK=['OK', 'ready', 'no change', 'SEND OK'], BUSY='busy', LINK='Link')....while ser.inWaiting():
ret = ser.readline().strip("\r\n")
print str(ret)
if (ret in Status.LINK):
has_link = True
ipd_str = '+IPD,'
if ipd_str in ret:
cid = ret[ret.find(ipd_str) + len(ipd_str)8)] 8)]if8)] has_link: send_response(response, cid)

Qualcuno ha idea del perchè? e di come funzioa il if-in?Grazie

--- Ultima modifica di mhmbox in data 2016-03-11 11:58:10 ---


--- Ultima modifica di mhmbox in data 2016-03-14 08:43:15 ---
Ciao a te e benvenuto.

NOTA: ricorda che per postare codice devi usare il bottone code, quello con questa icona , che trovi proprio subito prima della tavolozza dei colori quando compili un nuovo messaggio. L'indentazione è una parte fondamentale del linguaggio, non può essere omessa.

Facciamo un esempio per capire l'in in un ciclo if, che è davvero molto semplice. Infatti in verifica se il valore è presente nell'oggetto che cerco di confrontare:
>>> una_lista_a_caso = [1,2,3,6,7,8,9,10,18,88,99,1001,15215,1361568,161515658]
>>> una_lista_di_controllo = [4,9,1361568,456987741]
>>> [n for n in una_lista_di_controllo if n in una_lista_a_caso]
[9, 1361568]
Quindi leggiamo insieme la terza riga. Chiediamo a Python di restituirci per tutti i valori di n presenti in una_lista_di_controllo solo se questi sono presenti in una_lista_a_caso.

Come vedi tutto estremamente semplice, ora non ti resta che applicarlo alle tue esigenze, non sapendo a priori che succede di preciso nel tuo script.
Cya
def enum(**enums):
	return type('Enum', (), enums)Status = enum(ERR=['ERROR', 'Fail'], OK=['OK', 'ready', 'no change','SEND OK'], BUSY='busy', LINK='Link')
...
def process_request(response):
	has_link = False
	cid = '0'
	while( ser.inWaiting() ):
		ret = ser.readline().strip( "\r\n" )
		# print ret
		if (ret in Status.LINK):
			has_link = True
		ipd_str = '+IPD,'
		if (ipd_str in ret):
			cid = ret[ret.find(ipd_str) + len(ipd_str)]
	
	if has_link:
		# process response
		send_response(response, cid)
Ok grazie per la dritta credo di esserci finalmente riuscito.
Spiegazione chiarissima ed è anche intuitiva la risposta ma non capisco perchè la condizione risulta vera anche per ret="" in if (ret in Status.LINK):
Il codice proviene da un progetto github per il famoso ESP8266






--- Ultima modifica di mhmbox in data 2016-03-14 09:44:57 ---

--- Ultima modifica di mhmbox in data 2016-03-14 09:56:26 ---


Pagina: 1



Esegui il login per scrivere una risposta.