Megjelent a Python 3.6

Címkék

Több mint egy évnyi fejlesztés után megjelent a Python programnyelv 3.6-os verziója. A kiadás számos újdonsággal rendelkezik, közöttük új szintaktikai elemekkel (f-sztring formázás, aszinkron generátorok, változók típus-annotációi, alulvonás numerikus kifejezésekben), CPython fejlesztésekkel (pl. gyorsabb dict, kulcsszavas argumentumok sorrendjének megtartása), és egy új kriptográfiai modullal (secrets). Továbbá a Windowst használók számára fontos változás, hogy immáron alapértelmezetté vált az UTF8 használata a fájlrendszerben, illetve a konzolban is.

Letöltés | Változások listája | Újdonságok

Néhány példa az új szintaktikai elemekre:

PEP-498: Formázott sztring kifejezések


>>> kutya_neve = "Fickó"
>>> f"{kutya_neve} jó kutya."
'Fickó jó kutya.'
>>> kitoltes = 10
>>> pontossag = 4
>>> szam = decimal.Decimal("12.34567")
>>> f"eredmény: {szam:{kitoltes}.{pontossag}}"
'eredmény:         12.35'

Emellett természetesen változatlanul használható a format(), vagy a %-jeles kifejezés.

PEP-484: Típus-jelölés változókhoz


primszamok: List[int] = []  # Egész számokból álló lista

nev: str  # Sztring

class PeldaOsztaly:
    valami: Dict[str, int] = {}

A Python értelmező nem végez azonban semmilyen típus-vizsgálatot, csupán eltárolja azokat a modul vagy osztály

__annotations__

attribútumában. A cél egy sztenderd típus-annotáció bevezetése volt, amit külső eszközök (Mypy, Pytype) felhasználhatnak statikus forráskód elemzésre.

PEP-515: Alulvonás numerikus kifejezésekben


>>> 1_000_000_000_000_000
1000000000000000
>>> 0x_FF_FF_FF_FF
4294967295

>>> '{:_}'.format(1000000)
'1_000_000'
>>> '{:_x}'.format(0xFFFFFFFF)
'ffff_ffff'

PEP-492: Aszinkron generátorok


async def ticker(delay, to):
    """Yield numbers from 0 to *to* every *delay* seconds."""
    for i in range(to):
        yield i
        await asyncio.sleep(delay)

PEP-530: Aszinkron listaképzés


# List, set, dict listaképzőkre és generátorokra is alkalmazható
async_list = [i async for i in aiter() if i % 2]  

# Await szintaktika bármilyen listaképzőre
result = [await fun() for fun in funcs if await condition()]  

Hozzászólások

Nem a flame miatt, de nekiálltam megtanulni és ritka ocsmány tákolmány ez a nyelv.

És még divat a PHP-t szidni...

Igazabol azt nem ertem, hogy miert kell varni evtizedeket a numerikus allandog tagolasahoz.

Az Ada kb. 33 eve mar "tudta" ezt, persze ott fontosnak tartottak az olvashatosagot; idokozben a "mai" nyelvek tervezoi nem maguktol, de engedve a "nyomasnak" belevettek a nyelvekbe igy 2016 kornyeken. nNem is ertem, hogy amikor valaki tervez egy nyelvet, miert nem alap az, hogy tamogassa a nyelv a numerikus ertekek tagolasat az olvashatosag miatt.

(Annyira egyszeru a logikaja, hogy nem hiszem, hogy jelentosege lenne a forras feldolgozasanak hatekonysagaban.)

+1
ezen én is meg voltam lepődve, hogy pl.: a Kotlin se tudta az 1.0-ra...

Egész egyszerűen, még ha nincs is rá szükség a mindennapokban (nem tudnám megmondani, production kódban mikor írtam ilyet utoljára, de az elmúlt 2-3 év alatt szerintem 10 alatt van), de ilyen teszt-példa kódokban elő-előfordul. Meg amikor kell, akkor nagyon-nagyon hasznos...
--
blogom

Ha mindennap mikrokontrollereket abajgat az ember, akkor nem art ha pl. 16 MHz leirhato olvashatoan.

Ez mennyi? 16000000

Es ez? 16_000_000

Persze keruloutak vannak, de annyira egyszeru a megoldas tagolassal, hogy egyszeruen latokorhianyosak a nyelvtervezok, akik elsore kihagyjak. Ichbiaheknak miert sikerult elsore; tul nagy volt rajtuk a nyomas?