Denna artikel kommer att hjälpa läsaren att fortsätta från den tidigare bloggen om Python-funktioner tillsammans med några grundläggande tillämpningar i verkliga livet. Vi kommer att använda Visual Studio Code som vår kodredigerare. Om du inte har installerat Visual Studio Code, ges instruktionerna i den första bloggen.

Avancerade funktioner i Python – innehållsförteckning:

  1. Överföra funktioner till andra funktioner
  2. Använda funktioner inuti en funktion
  3. *Args i Python
  4. “*” operator i Python
  5. **kwargs i Python

Överföra funktioner till andra funktioner

Som diskuterats i den tidigare bloggen, behandlas funktioner i Python som objekt. Så som objekt i Python kan funktioner också överföras som ett argument till en annan funktion.

Till exempel:

def mul(x, y):
    return x*y
 
 
def add(mul, y):
    return mul+y
 
 
x = add(mul(9, 10), 10)
print(x)

I den ovanstående kodblocket kan man se att mul-funktionen överförs som ett argument till add-funktionen och lagras i variabeln x som sedan skrivs ut för att verifiera svaret.

100

Använda funktioner inuti en funktion

I Python kan vi definiera en funktion inuti en annan funktion. Dessa funktioner kallas för nästlade funktioner. Men i detta användningsfall kan den inre funktionen eller nästlade funktionen inte anropas separat. Båda exemplen illustreras i följande kodblock.

Låt oss skriva vår första funktion.

def mul(x, y):
 
    m = x*y
 
    def square(m):
        return m*m
 
    return square(m)
 
 
x = mul(9, 10)
 
print(x)
Output:
8100

I den ovanstående kodblocket är den yttre funktionen “mul” som returnerar funktionen square som tar ett argument “m” som är produkten av de två argumenten som ges till “mul”-funktionen. Kodexekveringen börjar först med att anropa “mul”-funktionen, sedan lagras produkten av “x” och “y” i variabeln “m”. Eftersom denna funktion returnerar square-funktionen, anropas “square”-funktionen och den slutliga produkten som är kvadraten av “m” returneras.

Låt oss lära oss några viktiga saker i Python, som kommer att göra din kodningsresa med Python mycket bättre.

*Args i Python

Dessa är argumenten som vi använder som funktionsparametrar. Låt oss skriva en vanlig funktion med vad vi har lärt oss hittills. Vi kommer att skriva en funktion som kan ge oss den maximala arean av en rektangel givet 2 rektangelområden som parametrar till funktionen.

def maxarea(a, b):
    if a > b:
        return f'rektangel a har den större arean som är {a}'
    else:
        return f'rektangel a har den större arean som är {b}'
 
 
x = maxarea(100, 60)
print(x)
 
Output:
rektangel a har den större arean som är 100
[code lang="js"]

Denna funktion är bra för 2 parametrar eller argument, men vad händer om vi behöver jämföra mer än 2 områden. Ett tillvägagångssätt skulle vara att överföra en lista med områden till funktionen.

def maxarea(lis):
 
    max = 0
    for i in lis:
        if i > max:
            max = i
 
    return f"rektangel som har den större arean är {max}"
 
 
x = maxarea([100, 60, 50])
print(x)
Output:
rektangel som har den större arean är 100

Detta tillvägagångssätt är bra, men vi bör veta antalet parametrar eller argument att ge i förväg. I verklig kodexekvering skulle detta vara besvärligt. Därför, för att göra programmerarens liv enklare, använder Python *args och **kwargs.

“*” operator i Python

Denna operator är en uppackningsoperator som vanligtvis används för att överföra ett ospecificerat antal parametrar eller argument.

Uppackning av argument till tuple med hjälp av * operator

Som vi har sett används “*” operatorn för att packa upp värden. Exemplet illustreras nedan.


x = [1, 2, 3, 4]
y = [5, 6, 7, 8]
 
z = *x, *y
 
print(type(z))
print(z)
Output:
<class 'tuple'>
(1, 2, 3, 4, 5, 6, 7, 8)

Som vi kan se har uppackningsoperatorn packat upp listan x och listan y till en tuple som är z. Vi kan också se att resultatet är en tuple.

Låt oss skriva samma funktion med hjälp av *Args.

def maxarea(*lis):
 
    max = 0
    for i in lis:
        if i > max:
            max = i
 
    return f"rektangel som har den större arean är {max}"
 
 
x = maxarea(100, 60, 50, 200)
y = maxarea(100, 60, 50, 200, 9000)
z = maxarea(100, 60, 50, 20, 90)
print(x)
print(y)
print(z)
Output:
rektangel som har den större arean är 200
rektangel som har den större arean är 9000
rektangel som har den större arean är 100

I detta kodblock kan vi se att argumenten nu är dynamiska, vi kan lägga till ett valfritt antal argument som kommer att packas upp i maxarea-funktionen för att ge oss det önskade resultatet. Dessutom kan vi jämföra ett valfritt antal områden i detta sammanhang.

**kwargs i Python

kwargs är som args men det accepterar positionsargument. Det använder ** operatorn som har vissa egenskaper som att packa upp flera positionsargument av valfri längd, kan också packa upp ordböcker, kan också användas för att kombinera två ordböcker.

Sammanfoga ordböcker

a = {"h": 1, "n": 2}
b = {"m": 5, "l": 10}
 
c = {**a, **b}
 
print(type(c))
print(c)
 

Vi kan se från den ovanstående koden att vi har 2 ordböcker a och b som sammanfogas med hjälp av ** operatorn för att ge en annan ordbok.
Output:
 
<class 'dict'>
{'h': 1, 'n': 2, 'm': 5, 'l': 10}

När vi använder * operatorn istället för ** operatorn, illustreras koden för detta fall nedan.

a = {"h": 1, "n": 2}
b = {"m": 5, "l": 10}
 
c = {*a, *b}
 
print(type(c))
print(c)
Output:
<class 'set'>
{'n', 'l', 'm', 'h'}

Därför, när * operatorn används på två ordböcker för att sammanfoga, kommer resultatet att vara en mängd med endast nycklarna från ordboken.

maxarea-funktionen med hjälp av **kwargs illustreras i nedanstående kodblock.

def maxarea(**lis):
 
    max = 0
    for i in lis.values():
        if i > max:
            max = i
 
    return f"rektangel som har den större arean är {max}"
 
 
x = maxarea(a=1, b=2, c=3)
y = maxarea(a=1, b=2)
z = maxarea(a=1, b=2, c=3, d=9)
print(x)
print(y)
print(z)
Output:
rektangel som har den större arean är 3
rektangel som har den större arean är 2
rektangel som har den större arean är 9

I denna blogg om avancerade funktioner i Python har vi täckt ämnen som att överföra funktioner till andra funktioner, använda funktioner inuti en funktion, *Args i Python, “*” operator i Python, **kwargs i Python, och mer. De vidare ämnen som inkluderar klasser kommer att täckas i den nästa blogginlägget. Hemläxa angående avancerade funktioner i Python ges nedan.

advanced_functions_in_Python

Agnieszka Markowska-Szmaj

View all posts →