IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Comment utiliser les fonctions d'un autre fichier?


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut Comment utiliser les fonctions d'un autre fichier?
    Bonjour,

    Je me demandais juste comment on faisais pour utiliser les fonctions qui se trouvent dans un autre fichier...? c'est du genre import 'my file.py' ???

    Merci de bien vouloir m'éclairer parce que là je ne vois que des import de fichiers "systemes" etc...

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    bonjour, il faut importer ton module dans ton script.
    il doit être dans le dossier de ton script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import my_fyle
    ....
    .....
    a=my_file.une_fonction()
    a+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    En fait, j'ai un fichier a.py qui doit utiliser les fonctions du fichier b.py

    Sauf que quand je fais import b.py dans le fichier a.py
    Ensuite quand je lance python a.py
    Il execute ce qui se trouve dans le fichier b.py et me dit que le module py n'a pas été trouvé???

    J'ai jamais des import de mes fichiers que j'avais ecris...

  4. #4
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    as tu bien mis ton code sous forme de fonction?
    peux tu mettre un exemple de ton code!

    pour l'import il ne faut pas mettre l'extention
    c'est bon
    c'est une erreur

    ++

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    J'ai enlevé l'extention .py mais ca marche toujours pas...

    Bon sans vraiment rentrer dans le contenu, voici l'allure de mes fichiers...

    Voici mon fichier bit.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    def getBit (value, bit) :
        return (value >> bit) & 1
     
    def setBit (value, bit, bitValue) :
        bitValue    = (bitValue&1)<<bit
        mask     = (1)<<bit
        return (value & ~mask) | bitValue
     
    def initKbit (k) :
        # on a besoin de k bit pour encoder les nombres du dico 
        # mais a la fin on ecrit quand meme des octets, donc on initialise les octets
        # dans leur totalite
        k =  k + k%8 
        value = 0
        for i in range (0,k) :
            value = setBit (value, i, 0)
        return value
     
    def printBit (value, k) :
        # On affiche le contenu complet des octets occupes
        k =  k + k%8 
        for i in range (0,k) :
            print getBit (value,i)
     
    def writeBit2Oct (value, k) :
        iB = 0
        iE = 8
        c = initKbit (8)
        while iB < iE :
            c = setBit (value,iB,getBit(value,iB))
            iB = iB + 1
        print 'writeBit2Oct'
        print 'c = '
        print chr(c)
     
    def getOctet (value,o) :
        print 'getOctet'
        r = initKbit (8)
        for i in range (o*8,(o+1)*8) :
            r = setBit (r,i%8, getBit (value,i))
        print 'r = '
        printBit (r,8)
        print 'fin r'
        return r
    Et mon fichier lzwDico.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    import os, sys, math, bit
    from math import log
     
    global x
    global s
    global out
     
    def isInDico(p) :
        if len(p) == 1 :
            return True
        for i in dico :
            if i == p :
                return True
        return False
     
    def getCodeDico(p) :
        j = 1
        for i in dico :
            if i == p :
                return j
            j = j+1
     
    def lire() :
        return inFile.read(1)
     
    def produire(p) :
        print 'produire'
        print 'p ->'
        print p
        print 'nbBitWord ->'
        print nbBitWord
        if len(p) == 1 :
    #       binOnKBit(ord(p),nbBitWord, out)
            print 'ord(p) ->'
            print ord(p)
            writeOct (ord(p),nbBitWord,out)
            outFile.write(str(ord(p)))
        else :
    #       binOnKBit(getCodeDico(p) + 255, nbBitWord, out)
            writeOct (getCodeDico(p) + 255, nbBitWord, out)
            outFile.write(str(getCodeDico(p) + 255))
        outFile.write(';')
     
    ...

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Quelle est l'erreur?

  7. #7
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    je ne vois pas d'erreur de code.
    mais je ne vois pas non plus ou tu utilise tes fonctions inclues dans bit.py

    redonne nous le message d'erreur.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    Voici l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Traceback (most recent call last):
      File "lzwDico.py", line 101, in ?
        step(x,s,dicoSize)
      File "lzwDico.py", line 52, in step
        produire(s)
      File "lzwDico.py", line 36, in produire
        writeOct (ord(p),nbBitWord,out) 
      File "lzwDico.py", line 82, in writeOct
        print  chr (getOctet (x,i))
    NameError: global name 'getOctet' is not defined
    Et le fichier complet lzwDico.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    import os, sys, math, bit
    from math import log
     
    global x
    global s
    global out
     
    def isInDico(p) :
        if len(p) == 1 :
            return True
        for i in dico :
            if i == p :
                return True
        return False
     
    def getCodeDico(p) :
        j = 1
        for i in dico :
            if i == p :
                return j
            j = j+1
     
    def lire() :
        return inFile.read(1)
     
    def produire(p) :
        print 'produire'
        print 'p ->'
        print p
        print 'nbBitWord ->'
        print nbBitWord
        if len(p) == 1 :
    #       binOnKBit(ord(p),nbBitWord, out)
            print 'ord(p) ->'
            print ord(p)
            writeOct (ord(p),nbBitWord,out)
            outFile.write(str(ord(p)))
        else :
    #       binOnKBit(getCodeDico(p) + 255, nbBitWord, out)
            writeOct (getCodeDico(p) + 255, nbBitWord, out)
            outFile.write(str(getCodeDico(p) + 255))
        outFile.write(';')
     
    def step(x,s,dicoSize) :
        x = lire()
        while x != '' :
            if isInDico(s+x) :
                s += x
            else :
                if len(dico) < dicoSize :
                    dico.append (s+x)
                produire(s)
                s=x
            x = lire()
        produire(s)
     
    def log2(n) :
        return math.log(n) / math.log(2)
     
    def int2bin(n):
        res = ''
        while n != 0: n,  res = n >> 1, `n & 1` + res
        return res
     
    def binOnKBit(b, k, out) :
        bin = int2bin (b)
        res = initKbit (k)
        print "bin = "
        printBit (res,k)
        for i in range (0,len(bin)) :
            res = setBit (res, i, int(bin[i]))
            print 'i + bin[i]'
            print i
            print bin[i]
     
    def writeOct (b,k,out) :
        o = int (k/8)
        if k%8 != 0 :
            o = o + 1
        for i in range (0,o) :
            #out = out + chr (getOctet (x,i))   
            print  chr (getOctet (x,i))
        #print out
     
    print "Compression LZW"
    if len(sys.argv) <= 1 :
        print 'Vous devez passer en argument un nom de fichier a compresser !'
    else :
        if os.path.exists(sys.argv[1]) :
            if len(sys.argv) >= 3 :
                dicoSize = float(sys.argv[2])
                nbBitWord = int(log2(dicoSize))
                print 'Log = '
                print nbBitWord
                inFile = open(sys.argv[1],'r')
                outFile = open(sys.argv[1]+'.lzw','w')
                dico = []
                x = ''
                s = ''
                out = ''
                step(x,s,dicoSize)
                inFile.close()
                outFile.close()
            else :
                print 'Vous devez passez en deuxieme argument la taille limite du dictionnaire'
        else :
            print 'Vous devez passez en argument un nom de fichier valide !'

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Quand tu importes un module de cette façon, il n'est pas importé à la manière d'un #include en C par exemple, ce serait plutôt du genre C++ avec un namespace
    Pour accéder à la fonction getOctet importée du module bit il faut appeler bit.getOctet

Discussions similaires

  1. une Dll peut elle utiliser les fonctions d'une autre dll?
    Par kantelise dans le forum Windows
    Réponses: 7
    Dernier message: 18/05/2006, 04h45
  2. Réponses: 4
    Dernier message: 03/05/2006, 18h34
  3. comment utiliser les fonctions d'une dll
    Par sebled dans le forum MFC
    Réponses: 3
    Dernier message: 24/02/2006, 17h59
  4. Réponses: 3
    Dernier message: 01/01/2006, 00h09
  5. Réponses: 11
    Dernier message: 22/12/2003, 22h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo