2014-05-18 8 views
7

Napisałem trochę kodu Pythona, który działa, ale Pylint nie lubi tej gwiazdy. Powtarza mi się:Możliwa do sformatowania listy bez * magii?

Used * or ** magic (star-args) 

Czy można napisać mój kod bez gwiazdki? Niektóre informacje: używam lxml; self.xml jest plikiem XML objectified.

@property 
def version_string(self): 
    '''Return the version as a string.''' 
    try: 
     version_format = self.xml.version.get("format") 
    except AttributeError: 
     return None 
    version_values = (v.text for v in self.xml.version.v) 
    return version_format.format(*version_values) 

Odpowiedz

11

Nie ma nic złego w operatorze splat. Nie wiedząc, co robi funkcja version_format, nie można powiedzieć, czy można przekazać wartość iterowalną, czy też iterować funkcję bezpośrednio, ale szczerze mówiąc nie ma powodu.

+6

Całkowicie się zgadzam, nic złego w używaniu rozpakowywania argumentów do formatowania ciągów znaków. Po prostu [wyłączę ostrzeżenie PyLint] (http://stackoverflow.com/a/20639659/1599111). –

+0

'version_format' to tylko ciąg znaków. –

7

Jeśli nie podoba ci się ostrzeżenie o pilocie, wyłącz go. Zostało ono pierwotnie wprowadzone, ponieważ ma wiele znaczników:

def some_function(*args, **kwargs): 
    pass 

obniża czytelność/łatwość obsługi kodu.

+0

To wydaje się być błędem w ich specyfikacjach, aby złapać splat, a nie definicję funkcji splat. – Marcin

4

star-args (W0142) nie jest już obecny w pylint (przynajmniej od wersji 1.4.3). Wygląda na to, że zostały usunięte dość niedawno.