Python - Başka bir dosyadaki Fonksiyonlar Kullanılabiliyor mu?

Selamlar herkese, Python da fonksiyonlarımı başka bir Python dosyasında tutarak çalışmasını istediğim farklı bir Python dosyasına çekebilir miyim? Örneğin;

fonksiyonlar.py dosyasında yer alan tanımlanmış fonksiyonlarımı login_panel.py dosyasında kullanabiliyor muyum? Böyle bir şey mümkün müdür?

1 Beğeni

Merhaba. Evet, istediğiniz şey mümkündür.
https://python-istihza.yazbel.com/moduller.html
Kısa bir örnek isterseniz de bunu buldum
https://ertugruldeniz.com/python-pythonda-kendi-modulumuzu-nasil-yazariz-ve-moduller-nasil-kullanilir-110

1 Beğeni

inceliyorum dönüş yapacağım tekrardan

1 Beğeni

python da kendi modüllerimizi oluşturup, programımız da import ettikten sonra çağırıp kullanabiliyoruz doğru mu anladım?

1 Beğeni

Evet, bu kadar basit.

1 Beğeni

peki teşekkür ederim. kendi modülümü kayıt edeceğim yer çalıştıracağım dosya ile aynı konumda olması gerekiyor dimi? çalıştıracağım dosya masaüstünde yer alıyorsa modülüm de masaüstünde olmalı doğru mu düşünüyorum?

1 Beğeni

Evet, normal şartlarda öyle olması lazım. Ama çok istiyorsanız herhangi bir yerdeki dosyaları içe aktarmanın da yolları var.

Pek tabii mümkün.
fonksiyonlar.py adlı dosyanızın içeriğinin şu olduğunu varsayalım;

import random 

def get_random():
    list = [*range(1, 5)]
    a = random.choice(list)
    list.remove(a)
    print("Seçilen = ", a)
    print("Yeni liste = ", list)

def init(app, gui, *args, **kwargs):
    global w, root
    w = gui
    root = app
    
if __name__ == '__main__':
    import login_panel
    login_panel.start_gui()

login_panel.py adlı dosyanızda yukarıdaki fonksiyonları şu şekilde çağırabilirsiniz.

try:
    import Tkinter as tk
except:
    import tkinter as tk

def start_gui():
    global root
    root = tk.Tk()
    app = Uygulama(root)
    fonksiyonlar.init(root,app)

class Uygulama:
    def __init__(self, app=None):
        self.button= tk.Button(app, text="Rastgele getir", command=fonksiyonlar.get_random)
        self.button.pack()

if __name__ == '__main__':
    import fonksiyonlar
    start_gui()

Eğer fonksiyonlar.py dosyanızda login_panel.py adlı dosyadan herhangi bir widgete erişmek istiyorsanız da;

w.button.configure(text="yeni text")

şeklinde çağırabilirsiniz.

import random 

def get_random():
    list = [*range(1, 5)]
    a = random.choice(list)
    list.remove(a)
    print("Seçilen = ", a)
    print("Yeni liste = ", list)
    w.button.configure(text="yeni text")

def init(app, gui, *args, **kwargs):
    global w, root
    w = gui
    root = app
    
if __name__ == '__main__':
    import login_panel
    login_panel.start_gui()

Modül oluşturma konusunu yeni öğrenmeye başlayan birine niçin sınıfları ve bir UI kütüphanesini kullarak örnek verdiğinizi anlayamadım (konu sıralamasının bu şekilde olmadığını düşünüyorum). Ayrıca kodunuzda import fonksiyonlar diye bir yer göremedim.

4 Beğeni

Düzeltme için teşekkürler hemen düzenleme yapıyorum. Haklısınız, gereksiz oldu UI kütüphanesini kullanmak. Ancak verilen bir kod bloğu olsaydı onu düzenlemek, soruyu soran kişinin bilgisi anlamak için daha iyi olurdu ve UI kütüphanesini kullanmaya zorlamazdım bende. Aklıma ilk geldiği şekilde örnek verdiğim için böyle oldu. Sınıflar konusuna gelecek olursak, başka dosyadan bir fonksiyon çekmek isteyen kişinin sınıflar konusunu bitirmiş olması gerekir diye düşünüyorum.

2 Beğeni

Ben yeni bir konuyu öğretirken basit örneklerle başlamayı tercih ediyorum.

Python belgeleri öyle demiyor sanki:

Hocam buyrun o vakit benim kodları düzenleyin, şayet müsait iseniz :slight_smile:

fonksiyonlar.py dosyasında şöyle fonksiyonlar var diyelim:

def topla(x, y):
    return x + y

def cikar(x, y):
    return x - y

def carp(x, y):
    return x * y

def bol(x, y):
    return x / y

Aşağıdaki de login_panel.py içinde yer alan kodlar olsun:

import fonksiyonlar

print(fonksiyonlar.topla(2, 3))

veya fonksiyonlar içindeki belirli fonksiyonları dosyanıza aktarmak için şöyle de yapabilirsiniz.

from fonksiyonlar import topla, cikar

print(topla(2 , 3))
print(cikar(3, 2))

Veya bütün nesneleri, fonksiyonlar.py scriptinin ismi ile beraber değil de sadece isimleriyle çağırmak istiyorsanız şöyle yazabilirsiniz:

from fonksiyonlar import *

print(topla(3, 2))
5 Beğeni

Tüm cevaplar için tek tek teşekkürlerimi sunuyorum. Aklımda bir çok şey canlandı sayenizde deneyerek, araştırarak hepsini pekiştirmeye çalışacağım teşekkürler.

1 Beğeni

Arkadarşlar aynı sorundan bende müzdaribim aşağıda verdiğim kodları bir türlü çalıştıramadım AttributeError: ‘function’ object has no attribute ‘cursor’ hatası veriyor??
“”"
from sqlServer import localSqlServer as lss

import time

class Cihazlar:

def __init__(self, musteri = "", cihaz = "", cihazSeriNo = "", musteriTel = "", sikayet = "", kisaNot = "", alinanUcret = 0, yapilanIslem = "", kullanilanMalzeme = "", malzemeFiyati = "", sonDurum = "", girisTarihi = "", guncellemeTarihi = ""):

    self.musteri = musteri

    self.cihaz = cihaz

    self.cihazSeriNo = cihazSeriNo

    self.musteriTel = musteriTel

    self.sikayet = sikayet

    self.kisaNot = kisaNot

    self.alinanUcret = alinanUcret

    self.yapilanIslem = yapilanIslem

    self.kullanilanMalzeme = kullanilanMalzeme

    self.malzemeFiyati = malzemeFiyati

    self.sonDurum = sonDurum

    self.girisTarihi = girisTarihi

    self.guncellemeTarihi = guncellemeTarihi



def cihazEkle(self):

    lss.cursor.execute("INSERT INTO GirenCihazlar (musteri, cihaz, cihazSeriNo, musteriTel, sikayet, sonDurum, girisTarihi) VALUES(?,?,?,?,?,?,?)",(self.musteri, self.cihaz, self.cihazSeriNo, self.musteriTel, self.sikayet, self.sonDurum, self.tarih()))

    lss.db.commit()



def cihazGuncelle(self):

    pass

def cihazSil(self):

    pass

def cihazTeslimEt(self):

    pass

def teslimDuzenle(self):

    pass

def tarih(self):

    tarih = time.strftime("%d.%m.%Y - %X")

    return tarih

cihaz = Cihazlar(“test”,“test2”,“test3”,“test4”,“test5”,“test6”)

cihaz.cihazEkle()

İmport ettiğim modül ise

import sqlite3 as sql

def localSqlServer():

global cursor, db

db = sql.connect("localDB.db")

cursor = db.cursor()

return cursor, db

localSqlServer()

cursor.execute(“CREATE TABLE IF NOT EXISTS GirenCihazlar(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, musteri TEXT, cihaz TEXT, cihazSeriNo TEXT, musteriTel TEXT, sikayet TEXT, sonDurum TEXT, guncellemeTarihi TEXT, girisTarihi TEXT)”)
“”"