Osittaiset funktiot
Käytä functools.partial-funktiota
Osittaiset funktiot on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on partial
functools.partial luo uuden funktion, jossa osa olemassa olevan funktion argumenteista on jo täytetty. Se vastaa argumenttien esitäyttöä, joten tulosta voi kutsua harvemmilla argumenteilla.
Tuokaa se käyttöön komennolla from functools import partial.
from functools import partial
def power(base, exp):
return base ** exp
square = partial(power, exp=2)
print(square(5))Sijaintiin perustuvien argumenttien esitäyttö
partial-funktiolle välitetyt sijaintiin perustuvat argumentit täyttävät funktion parametrit vasemmalta alkaen. Loput argumentit annetaan partial-funktiota kutsuttaessa.
from functools import partial
def multiply(a, b):
return a * b
double = partial(multiply, 2)
print(double(10))
print(double(50))Avainsana-argumenttien esitäyttö
partial-funktiolle annetut avainsana-argumentit muuttuvat oletusarvoiksi, jotka voi silti ohittaa kutsuhetkellä.
from functools import partial
def greet(name, greeting='Hello'):
return greeting + ', ' + name
hola = partial(greet, greeting='Hola')
print(hola('Ada'))
print(hola('Bob', greeting='Hey'))Partialisointi sisäänrakennetuilla funktioilla
Voitte luoda partial-funktioita myös sisäänrakennetuista funktioista. Tässä int-funktiosta tehdään kantaluvun 2 kokonaislukujäsennin.
from functools import partial
binary = partial(int, base=2)
print(binary('1010'))
print(binary('1111'))Selkeämmät takaisinkutsut
Partial-funktiot sopivat erinomaisesti takaisinkutsuihin, joissa on välitettävä funktio ilman argumentteja tai yhden argumentin funktio, mutta konteksti halutaan esitäyttää.
from functools import partial
def log(level, message):
return '[' + level + '] ' + message
error = partial(log, 'ERROR')
print(error('disk full'))Partial-funktiot mapissa
Partial-funktio sopii luontevasti korkeamman asteen funktioihin, kuten map-funktioon: yksi argumentti voidaan kiinnittää, kun taas toinen vaihtelee alkioittain.
from functools import partial
def add(a, b):
return a + b
add10 = partial(add, 10)
print(list(map(add10, [1, 2, 3])))Partial-funktion tarkastelu
Partial-olio tarjoaa käärityn funktion kohdassa .func, kiinteät sijaintiin perustuvat argumentit kohdassa .args ja kiinteät avainsana-argumentit kohdassa .keywords.
from functools import partial
def f(a, b, c):
return (a, b, c)
p = partial(f, 1, c=3)
print(p.func.__name__)
print(p.args)
print(p.keywords)Partial-funktioiden ketjuttaminen
Voitte muodostaa partial-funktion toisesta partial-funktiosta ja lisätä kiinteitä argumentteja vaiheittain.
from functools import partial
def volume(l, w, h):
return l * w * h
base = partial(volume, 2)
slab = partial(base, 3)
print(slab(4))Partial-funktio vai lambda
lambda voi hoitaa saman tehtävän, mutta partial on usein selkeämpi argumenttien kiinnittämiseen ja tarjoaa käärityn funktion introspektiota varten.
from functools import partial
def power(base, exp):
return base ** exp
cube_p = partial(power, exp=3)
cube_l = lambda b: power(b, 3)
print(cube_p(2), cube_l(2))Käytännön esimerkki: pyöristäminen
Tehkää kahden desimaalin pyöristäjä luomalla partial-funktio sisäänrakennetusta round-funktiosta.
from functools import partial
round2 = partial(round, ndigits=2)
print(round2(3.14159))
print(round2(2.71828))partialmethod luokille
Siihen liittyvä functools.partialmethod tekee saman luokan määrittelyn sisällä oleville metodeille ja esitäyttää metodin argumentteja.
from functools import partialmethod
class Light:
def set(self, state):
self.state = state
return state
on = partialmethod(set, True)
off = partialmethod(set, False)
l = Light()
print(l.on())
print(l.off())Pikatarkistus
Mitä functools.partial tekee?
Kertaus: partial-funktiot
Opitte, että functools.partial:
- Luo uuden funktion, jonka osa argumenteista on esitäytetty sijaintiin tai avainsanoihin perustuvasti.
- Antaa ohittaa määritetyt avainsana-argumenttien oletusarvot kutsuhetkellä.
- Sopii erinomaisesti takaisinkutsuihin,
map-funktioon ja toiston vähentämiseen. - Tarjoaa attribuutit
.func,.argsja.keywords, ja sillä on metodeille tarkoitettu muunnelmapartialmethod.
from functools import partial
add = lambda a, b: a + b
plus1 = partial(add, 1)
print(plus1(41))Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 76
- Oppitunnit
- 320
Usein kysytyt kysymykset
Onko oppitunti ”Osittaiset funktiot” ilmainen?
Kyllä – oppitunnin ”Osittaiset funktiot” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Osittaiset funktiot”?
Käytä functools.partial-funktiota Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Osittaiset funktiot”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?
Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.