Kuinka kutsua funktio pythonissa

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 function

Menetelmä 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 keyword

Vaihe 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 default

Vaihe 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-only

Vaihe 8:Vaati vain avainsanat-argumentit asettamalla*ennen heitä.

def scale(*, factor):
    print(f"Scaling by {factor}")

scale(factor=3)  # OK
# scale(3)       # TypeError: keyword-only

Menetelmä 3: Kaappaa ja käytä toiminnon palautusarvoa

Vaihe 1:Palauttaa arvon kanssareturntoiminnon sisällä.

def times5(x):
    return 5 * x

Vaihe 2:Määritä palautusarvo muuttujalle.

result = times5(9)

Vaihe 3:Käytä arvoa lisäkoodissa tai tulosta se.

print(result)  # 45

Menetelmä 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 math

Vaihe 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.0

Vaihe 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 shout

Vaihe 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 argument

Vaihe 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.

Related Posts