Come formattare questa linea in base a PEP 8? [chiuso]

0

Sto cercando di rispettare PEP 8 , con un limite di 78 caratteri su la lunghezza delle mie linee.

Ho la seguente dichiarazione:

startTime = time.strptime(request.GET.get('st', (dt.datetime.now() - dt.timedelta(days=1)).strftime("%d/%b/%Y:%H:%M:%S")), "%d/%b/%Y:%H:%M:%S")

Come dovrei formattare in modo che aderisca a PEP8 (dove dovrei romperlo in nuove linee?)

    
posta Todd Davies 24.07.2013 - 12:19
fonte

1 risposta

4

Non dovresti suddividerlo in nuove righe, poiché il codice stesso è sbagliato.

Per prima cosa, hai la duplicazione del codice. Il compilatore non ti biasimerà e non lo qualificherà come un errore, ma sicuramente i programmatori che dovranno mantenere il tuo codice lo faranno sicuramente.

Rimuovendo la duplicazione del codice anziché:

startTime = time.strptime(request.GET.get('st', (dt.datetime.now() - dt.timedelta(days = 1)).strftime("%d/%b/%Y:%H:%M:%S")), "%d/%b/%Y:%H:%M:%S")

ottieni:

const dateFormat = "%d/%b/%Y:%H:%M:%S"
startTime = time.strptime(request.GET.get('st', (dt.datetime.now() - dt.timedelta(days = 1)).strftime(dateFormat)), dateFormat)

Un altro errore è che stai facendo troppo in una singola riga. Per chi stai scrivendo? Il compilatore o altri sviluppatori (incluso te stesso in sei mesi)?

  • Se stai scrivendo per un compilatore, infatti, il collasso di tutto in un gran casino può darti qualche microsecondo di vantaggio in termini di tempo di compilazione e qualche microsecondo di vantaggio ogni volta che l'app è in esecuzione. O forse non c'è guadagno. O forse tale codice è più lento. Devi profilarlo per sapere.

  • Se stai scrivendo per gli umani, e dovresti, allora non essere avido di spazi, newline, variabili intermedie e funzioni. Ad esempio, tutte quelle parentesi insieme sono un incubo di manutenzione. Non riuscivo a trovare ciò che è chiuso dove. È anche difficile capire cosa sta facendo il codice semplicemente guardandolo.

Che dire:

const dateFormat = "%d/%b/%Y:%H:%M:%S"
dayAgo = (dt.datetime.now() - dt.timedelta(days = 1)).strftime(dateFormat)
webResponse = request.GET.get('st', dayAgo)
startTime = time.strptime(webResponse, , dateFormat)

Nota che gli standard sono buoni per quello che sono. Sono qui per te, non il contrario. Dovrebbero aiutarti, non costringerti a passare ore a fare cambiamenti insignificanti.

Se uno standard indica che la linea deve essere lunga 80 caratteri, ma hai un caso perfettamente valido di una riga leggibile con 81 caratteri al suo interno, avvita lo standard.

In questo caso particolare, la riga originale era effettivamente scritta male, ed è stato un caso in cui lo standard ti ha dato un suggerimento che qualcosa non andava. Questo non è sempre il caso.

    
risposta data 24.07.2013 - 12:32
fonte

Leggi altre domande sui tag