16 ottobre, 2019
Python 3.8 - cosa c'è di nuovo
Comincio con il tricheco, the walrus (questa notte ravanavo sulla traduzione ma ho eroicamente resistito alla tentaziione di alzarmi, alla fine ci sono arrivato, via Alice, attraverso lo specchio).
There is new syntax := that assigns values to variables as part of a larger expression.
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
e anche
# Loop over fixed length blocks
while (block := f.read(256)) != '':
process(block)
Sì, semplifica, evita ripetizioni, lo laiko 👌
Parametri solo posizionali, [t]here is a new function parameter syntax / to indicate that some function parameters must be specified positionally and cannot be used as keyword arguments.
In the following example, parameters a and b are positional-only, while c or d can be positional or keyword, and e or f are required to be keywords:
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
esempio valido:
f(10, 20, 30, d=40, e=50, f=60)
esempi non corretti:
f(10, b=20, c=30, d=40, e=50, f=60)
# b cannot be a keyword argument
f(10, 20, 30, 40, 50, f=60)
# e must be a keyword argument
Uhmmm... conviene fare un salto al PEP570:
This PEP proposes to introduce a new syntax, /, for specifying positional-only parameters in Python function definitions.
Positional-only parameters have no externally-usable name. When a function accepting positional-only parameters is called, positional arguments are mapped to these parameters based solely on their order.
For example, the built-in pow() function does not accept keyword arguments:
def pow(x, y, z=None, /):
"Emulate the built in pow() function"
r = x ** y
return r if z is None else r%z
OK, devo valutare se mi serve; di solito uso parametri posizionali, ma ci sono eccezioni.
Parallel filesystem cache for compiled bytecode files, credo che per adesso posso ignorare questa possibilità, per ragioni di semplicità (e trasferibilità) limito sempre le condizioni di configurazione. Però OK, so che si può.
Debug build uses the same ABI as release build, specialistico, vale quanto detto per il paragrafo precedente.
f-strings support = for self-documenting expressions and debugging.
Added an = specifier to f-strings. An f-string such as f'{expr=}' will expand to the text of the expression, an equal sign, then the representation of the evaluated expression. For example:
>>> user = 'eric_idle'
>>> member_since = date(1975, 7, 31)
>>> f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"
potrebbe essere utile anche fuori dal debug per variabili con nome significativo.
Python Runtime Audit Hooks, credo di potermi limitare a sapere che c'è al PEP578.
Python Initialization Configuration: tante nuove funzioni di configurazione nel modulo PyConfig; c'è tutto in PEP587.
C'è poi qualche modifica nel linguaggio, per esempio il metodo as_integer_ratio() per bool, int e fractions.Fraction.
Inoltre cose nuove e rinnovate in diversi moduli. Ma quando uso uno di queste lo faccio sempre con la documentazione aperta (ho una pessima memoria che uso principalmente per altre cose).
Conclusione: Python è vivo, costantemente aggiornato. OK. La vera novità (per le masse, per me) è il walrus :=.
Ah! momenti dimenticavo di dire che ho copiato da qui:
🔴
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento