Utilizând o valoare declarată în cadrul unei funcții, în afara funcției

Dacă o funcție definită astfel:

def plop(plop):
    ploplop = 1234
    if plop == ploplop:
         print "I plopped"

Cum să iau ploplop în afara scopului funcției?

0

4 răspunsuri

You return it, and capture it on the other side.

def plop(plop):
    ploplop = 1234
    if plop == ploplop:
         print "I plopped"
    return plopplop

someval = plop(1235)
0
adăugat
Am încercat o variație a codului pe care îl practic și nu a fost rezultatul pe care l-am așteptat. Am vrut să iau o variabilă numită mare care a fost declarată într-o funcție și să o folosesc cu o altă funcție.
adăugat autor Braden, sursa
Bine. Dar totuși trebuie să o faci în acest fel sau să suporți o rescriere majoră a codului.
adăugat autor Ignacio Vazquez-Abrams, sursa

Nu oferiți suficiente informații pentru un răspuns bun. Care este relația dintre cele două funcții și variabila?

Dacă variabila reprezintă un fel de stare persistentă pe care funcționează cele două funcții, atunci doriți să creați o clasă cu două metode și o variabilă membru:

class Plopper( object ):
    ploplop = 1234

    def plop( self, ploppity ):
        if ploppity == self.ploplop:
            print "I plopped"   # ew.

    def plop2( self, ploppity ):
        if ploppity == self.ploplop * 2:
            print "I plopped twice"

a = Plopper()

a.plop( 1234 )
a.plop2( 2468 )

Dacă variabila controlează comportamentul funcțiilor și trebuie doar să fiți siguri că acestea sunt consecvente, trageți variabila din metodă la o metodă globală (rețineți că, contra user1320237, nu trebuie să o declarați globală dacă " citiți numai valoarea sa):

PLOPLOP = 1234    # I like the all-caps convention for global constants

def plop(plop):
    if plop == PLOPLOP:
         print "I plopped" 

def plop2(plop):
    if plop == 2 * PLOPLOP:
         print "I plopped twice" 

plop(1234)
plop2(2468)
0
adăugat
def plop(plop):
    global ploplop 
    ploplop = 1234
    if plop == ploplop:
         print "I plopped"

dar variabilele globale nu ar trebui să fie folosite niciodată

0
adăugat

o altă soluție este adăugarea unui atribut funcției. (Am schimbat numele funcției deoarece există prea multe plops):

def f(plop):
    f.ploplop = 1234
    if plop == f.ploplop:
         print "I plopped"
f(5)
print f.plopplop
0
adăugat
Python România
Python România
100 participanți

Comunitatea pasionaților de Python din România.