Suorita se suluilla funktion nimen jälkeen pythonissa. Määritellä funktiodef, kutsu sitä sitten nimelläname(). Katso virallinen opetusohjelma toimintojen määrittelemiseksi osoitteessa docs.python.org.
Menetelmä 1: Soita toiminto suoraan
Vaihe 1:Määritä funktiodef.
def greet():
print("Hello from a function")Vaihe 2:Suorita toiminto lisäämällä suluja nimelleen.
greet() # prints: Hello from a functionMenetelmä 2: Soita argumenteilla (paikannus, avainsana, oletusarvot, muuttujapituus)
Vaihe 1:Soita paikallisilla argumenteilla järjestysparametreissa on määritelty.
def full_name(fname, lname):
print(fname, lname)
full_name("Emil", "Refsnes")Vaihe 2:Soita avainsanoilla argumentteilla määrittääksesi parametrit nimen mukaan (tilauksella ei ole merkitystä).
full_name(lname="Refsnes", fname="Emil")Vaihe 3:Sekoita ensin sijainti, sitten avainsanargumentit; Älä aseta paikallisia argumentteja avainsanojen jälkeen.
Suositeltu lukeminen:Google -arkkien korjaaminen löytää ja korvaa toiminnon, joka ei toimi
def cost(item, quantity, price):
print(f"{quantity} {item} cost ${quantity * price:.2f}")
cost("bananas", quantity=6, price=0.74) # OK
# cost(item="bananas", 6, 0.74) # SyntaxError: positional after keywordVaihe 4:Käytä oletusparametriarvoja jättämällä tämän argumentin puhelussa.
def origin(country="Norway"):
print("I am from", country)
origin() # uses default "Norway"
origin("India") # overrides defaultVaihe 5:Hyväksy muuttuva määrä paikannusargumentteja*args.
def youngest(*kids):
print("The youngest child is", kids[2])
youngest("Emil", "Tobias", "Linus")Vaihe 6:Hyväksy muuttuva määrä avainsanarusgumentteja**kwargs.
def show_last_name(**kid):
print("His last name is", kid["lname"])
show_last_name(fname="Tobias", lname="Refsnes")Vaihe 7:Vaativat vain sijaintipaikat asettamalla/allekirjoituksessa (Python 3.8+).
def echo(x, /):
print(x)
echo(3) # OK
# echo(x=3) # TypeError: positional-onlyVaihe 8:Vaati vain avainsanat-argumentit asettamalla*ennen heitä.
def scale(*, factor):
print(f"Scaling by {factor}")
scale(factor=3) # OK
# scale(3) # TypeError: keyword-onlyMenetelmä 3: Kaappaa ja käytä toiminnon palautusarvoa
Vaihe 1:Palauttaa arvon kanssareturntoiminnon sisällä.
def times5(x):
return 5 * xVaihe 2:Määritä palautusarvo muuttujalle.
result = times5(9)Vaihe 3:Käytä arvoa lisäkoodissa tai tulosta se.
print(result) # 45Menetelmä 4: Soita toiminto nimellä (merkkijono) turvallisesti
Mieluummin attribuutin hakueval. KäyttäägetattrJos haluat hakea funktio -objektin nimeltä, kutsu sitten sitä. Katso virkamiesgetattrDokumentit osoitteessa docsython.org.
Vaihe 1:Tuo moduuli, joka sisältää toiminnon.
import mathVaihe 2:Noutaa toiminto nimen mukaangetattr(module, "name").
func = getattr(math, "sqrt") # <built-in function sqrt>Vaihe 3:Soita noudettuun toimintoon kuten kaikki muutkin.
print(func(16)) # 4.0Vaihe 4:Tuo moduuli merkkijonollaimportlib.import_moduleKun sekä moduulin että toiminnon nimet ovat dynaamisia.
from importlib import import_module # docs: https://docs.python.org/3/library/importlib.html#importlib.import_module
module_name, func_name = "random", "randint"
mod = import_module(module_name)
print(getattr(mod, func_name)(1, 6))Vaihe 5:Välttääeval-execsoittaminen nimellä.
- He suorittavat mielivaltaisen koodin, joka aiheuttaa vakavia tietoturvariskiä.
- Attribuutin haku on selkeä, turvallisempi ja helpompi testata.
Menetelmä 5: Käytä lähetyssanakirjaa käyttäjän valitsemiin toimiin
Karttatulolähteet kutsutaan, etsi sitten ylös ja soita - tämä yksinkertaistaa pitkääif/elifKetjut ja pitää koodin ylläpidettävissä.
Vaihe 1:Rakenna komentoimien sanakirja toimintoihin.
def bw(img): ...
def sepia(img): ...
def pencil_sketch(img, mode): ...
# wrap different signatures if needed
def psg(img): return pencil_sketch(img, 1)
def psc(img): return pencil_sketch(img, 2)
EFFECTS = {
"bw": bw,
"sepia": sepia,
"psg": psg,
"psc": psc,
}Vaihe 2:Haettavissa oleva kartoitus ja suorita se.
effect = input("Effect: ").strip().lower()
img = ... # your image
func = EFFECTS.get(effect)
if func:
func(img)
else:
print("Please enter a valid effect name.")Vaihe 3:Säilytä osat tai lambdat, jos joudut sitomaan argumentteja etukäteen.
from functools import partial
EFFECTS = {
"psc": partial(pencil_sketch, mode=2),
# later: EFFECTS["psc"](img)
}Menetelmä 6: Soita toiminto toisesta tiedostosta (moduuli)
Vaihe 1:Tuo moduuli tai tarvitsemasi toiminto.
# file: utils.py
def shout(msg):
print(msg.upper())
# file: app.py
import utils
from utils import shoutVaihe 2:Soita joko moduulin määritteellä tai suoraan tuotulla nimillä.
# via module
utils.shout("hello")
# via direct import
shout("hello")Vaihe 3:Pidä moduulipolut tuodaan (nykyinen työhakemisto tai pakettiPYTHONPATH), siten tuonti ratkaisee luotettavasti.
Nopeat tarkastukset ja yleiset virheet
Vaihe 1:Varmista, että funktio määritetään ennen kuin sitä kutsutaan suorituksen aikana.
# OK: bar is defined by the time foo() runs
def foo():
bar() # fine because bar is defined before this call executes
def bar():
print("bar")
foo()Vaihe 2:Vastaa odotettua argumenttien lukumäärää tai anna oletusarvoja.
def add(a, b): return a + b
# add(1) # TypeError: missing required positional argumentVaihe 3:Muista, että toiminnon kutsuminen vaatii suluja; Pelkästään nimen käyttäminen viittaa toimintoobjektiin.
def hello(): return "hi"
print(hello) # <function hello at ...>
print(hello()) # "hi"Näiden kuvioiden avulla voit soittaa Python -toimintoiksi suoraan, välittää oikean tyyppiset argumentit, kaapata tuloksia ja jopa kutsua kutsutaan nimeltä ilman vaarallista koodia. Pidä käyttöliittymä selkeästi, suosittele nimenomaisia hakujaeval, ja funktiopuhelut pysyvät yksinkertaisina ja ennustettavissa.














