Introduction to Python/tr: Difference between revisions

From FreeCAD Documentation
(Created page with "Ancak, myTestFunction () işlevinin doğru çalışmadığını görürsek ne olur? Editörümüze geri dönüyor ve değişiklikler yapıyoruz. Sonra, python yorumlayıcısı...")
(Created page with "Bu dosyayı yeniden adlandırma, Python'un FCMacro uzantısı hakkında bilmediğindendir.")
Line 346: Line 346:
reload(myModule)
reload(myModule)
}}
}}
Bu dosyayı yeniden adlandırma, Python'un FCMacro uzantısı hakkında bilmediğindendir.
This file renaming is because Python doesn't know about the extension FCMacro.


However, there are two alternates: Inside the one macro use Python's exec or execfile functions.
However, there are two alternates: Inside the one macro use Python's exec or execfile functions.

Revision as of 11:51, 9 January 2019

Bu Python'a yeni başlayanlar için kısa bir rehberdir. Python, açık kaynaklı, çoklu bir platformdur programlama dili. Python, onu diğer yaygın programlama dillerinden çok farklı kılan ve sizin gibi yeni kullanıcıların erişebildiği birçok özelliğe sahiptir:

  • Özellikle insanlar tarafından okunması kolay olacak şekilde tasarlandı ve bu yüzden öğrenmesi ve anlaması çok kolay.
  • Yorumlanır, yani C gibi derlenmiş dillerden farklı olarak, programınızın yürütülmeden önce derlenmesi gerekmez. İsterseniz yazdığınız kod, satır satır hemen çalıştırılabilir. Yavaş yavaş adım adım ilerleyebildiğiniz için, kodunuzdaki hataları öğrenmek ve hataları bulmak son derece kolaydır.
  • Kodlama dili olarak kullanılmak üzere diğer programlara gömülebilir. FreeCAD'in yerleşik bir Python yorumlayıcısı vardır; Python kodunu FreeCAD'e yazabilir, örneğin FreeCAD'in parçalarını değiştirebilir, örneğin geometri oluşturmak için. Bu, bazı programcıların kodladığı "küre yarat" etiketli bir düğmeyi tıklamak yerine, son derece güçlüdür; Programcının öngöremeyeceği şekilde veya istediğiniz şekilde tam olarak istediğiniz geometriyi oluşturarak kendi aracınızı kolayca oluşturma özgürlüğüne sahipsiniz.
  • Genişletilebilirdir, Python kurulumunuzdaki yeni modülleri kolayca takabilir ve işlevselliğini artırabilirsiniz. Örneğin, Python'un jpg görüntüleri okuyup yazmasına, twitter ile iletişim kurmasına, işletim sisteminiz tarafından gerçekleştirilecek görevleri zamanlamasına, vb. İzin veren modüllere sahipsiniz.

Aşağıdaki kod parçacıklarını bir Python yorumlayıcısına girmenizi kesinlikle öneririz. Tartışmalarımızın çoğu için önemli olan, pasajın çalıştırılmasından sonraki satırdır, ortaya çıkar. Kodu çalıştırmamak yumruk çizgisi olmadan tümüyle oluşturulur. Öyleyse eller! Aşağıdakiler çok basit bir giriştir ve hiçbir şekilde tam bir eğitim değildir. Ancak bizim umudumuz, bunun FreeCAD mekanizmalarını daha derinlemesine keşfetmek için yeterli temelleri sağlayacağıdır.

Yorumlayıcı

Genellikle, bilgisayar programları yazarken, sadece bir metin editörünü veya özel programlama ortamınızı (genellikle birkaç ek araç içeren bir metin editörüdür) açarsınız, programınızı yazıp derler ve çalıştırırsınız. Genellikle, kod yazma sırasında bir veya daha fazla hata yapıldı ise programınız çalışmayacaktır. Neyin yanlış gittiğini söyleyen bir hata mesajı bile alabilirsiniz. Ardından metin editörünüze döner, hataları düzeltir, tekrar çalıştırırsınız, programınız istenen şekilde çalışıncaya kadar tekrarlarsınız.

Python'daki bu işlem Python yorumlayıcısının içinde şeffaf bir şekilde yapılabilir. Yorumlayıcı, yalnızca Python kodunu yazabileceğiniz bir komut istemi içeren bir Python penceresidir. Bilgisayarınıza Python yüklerseniz (Windows veya Mac’te iseniz Python web sitesinden indirin, eğer Windows veya Mac’te iseniz, GNU / Linux’taysanız paket deponuzdan yükleyin) Başlat menünüzde bir Python yorumlayıcısı var. Ancak FreeCAD'in alt penceresinde bir Python yorumlayıcısı da vardır:

(Eğer bulamadıysanız, Görünüm -> Paneller -> Python konsolu'nu tıklayın.)

Yorumlayıcı, Python versiyonunu ve ardından Python kodunu girdiğiniz komut istemi olan >>> sembolünü gösterir. Yorumlayıcıya kod yazmak basittir: bir satır bir talimattır. Enter tuşuna bastığınızda, kod satırınız yürütülür (hemen ve görünmez bir şekilde derlendikten sonra). Örneğin, şunu yazmayı deneyin:

print "hello"

print , açıkça ekranda bir şey yazdırmak için kullanılan özel bir Python anahtar kelimesidir. Enter tuşuna bastığınızda, işlem yürütülür ve "merhaba" mesajı yazdırılır. Bir hata yaparsanız, örneğin yazalım:

print hello

Python bize merhaba'yı bilmediğini söyleyecek. "Karakterler içeriğin sadece bir jargon, bir metin parçası olan bir dize olduğunu belirtir. " Olmadan, baskı komutu merhaba bir metin parçası değil, özel bir Python anahtar sözcüğüdür. Önemli olan, hemen bir hata yaptığınız konusunda bilgilendirilmenizdir. Yukarı okuna basarak (veya FreeCAD yorumlayıcısında, CTRL yukarı okunda) yazdığınız son komuta geri dönebilir ve düzeltebilirsiniz.

Python yorumlayıcı ayrıca dahili bir yardım sistemine sahiptir. Yazmayı deneyin:

help

veya örneğin, yukarıda basılan merhaba komutumuzda neyin yanlış gittiğini anlamadığımızı varsayalım, "baskı" komutu hakkında özel bilgiler istiyoruz:

help("print")

Print komutunun yapabileceği her şeyin uzun ve eksiksiz bir açıklamasını alırsınız.

Artık yorumlayıcıya hükmettiğimize göre, ciddi şeylerle başlayabiliriz.

Değişkenler

Tabii ki, "merhaba" yazdırmak çok ilginç değil. Daha ilginç olanı, daha önce bilmediğiniz şeyler basmak ya da Python'un sizin için bulmasına izin vermek. Değişken kavramının devreye girdiği yer burasıdır. Bir değişken, yalnızca bir ad altında sakladığınız bir değerdir. Örneğin, şunu yazın:

a = "hello"
print a

Sanırım ne olduğunu anladınız, biz "merhaba" dizesini "a" adı altında "kaydettik". Şimdi, "a" artık bilinmeyen bir isim değil! Herhangi bir yerde, örneğin baskı komutunda kullanabiliriz. İstediğimiz herhangi bir ismi kullanabiliriz, sadece boşluk veya noktalama işareti kullanmama gibi basit kurallara uyun. Örneğin, şunu yazabiliriz:

hello = "my own version of hello"
print hello

Gördünüz mü? şimdi merhaba artık tanımsız bir kelime değil. Ya, kötü şansla, Python'da zaten var olan bir ismi seçersek? Dizimizi "print" adı altında saklamak istediğimizi varsayalım:

print = "hello"

Python çok zeki ve bize bunun mümkün olmadığını söyleyecek. Değiştirilemeyen bazı "ayrılmış" anahtar kelimelere sahiptir. Ancak değişkenlerimiz her zaman değiştirilebilir, bu yüzden değişkenler olarak adlandırılır, içerikleri değişebilir. Örneğin:

myVariable = "hello"
print myVariable
myVariable = "good bye"
print myVariable

MyVariable'ın değerini değiştirdik. Ayrıca değişkenleri de kopyalayabiliriz:

var1 = "hello"
var2 = var1
print var2

Değişkenlerinize anlamlı adlar vermenin önemli olduğunu unutmayın. Bir süre sonra "a" isimli değişkeninizin neyi temsil ettiğini hatırlamayacaksınız. Fakat eğer ismini verdiyseniz, örneğin myWelcomeMessage, amacını kolayca hatırlarsınız. Ayrıca, kodunuz kendi kendini belgelemeye bir adım daha yakın.

Harf boyutu çok önemli. myVariable, myvariable ile aynı değildir; büyük / küçük harf farkı v. print myvariable yazarsanız, tanımlanmayan bir hatayla geri dönecektir.

Sayılar

Elbette, programlamanın yalnızca metin dizeleri için değil, her türlü verinin ve özellikle sayıların işlenmesinde yararlı olduğunu bilmelisiniz. Bir şey önemlidir, Python ne tür verilerle uğraştığını bilmelidir. Merhaba örneğimizde, print komutunun "merhaba" dizgimizi tanıdığını gördük. Bunun nedeni, " kullanarak, özellikle baskı komutunun bundan sonra gelenlerin bir metin dizesi olduğunu söylemiş olmamızdır.

Özel bir Python anahtar kelime türüyle bir değişkenin veri türünü her zaman kontrol edebiliriz:

myVar = "hello"
type(myVar)

Bize myVar'ın içeriğinin Pyrhon jargonundaki string için kısa olan str olduğunu söyleyecektir. Tam sayı ve değişken sayılar gibi diğer temel veri türlerimiz de vardır

firstNumber = 10
secondNumber = 20
print firstNumber + secondNumber
type(firstNumber)

Bu çok daha ilginç, değil mi? Şimdi güçlü bir hesap makinemiz var! Ne kadar iyi çalıştığına bakın, Python 10 ve 20'nin tam sayı olduğunu biliyor. Böylece "int" olarak depolanırlar ve Python onlarla tamsayılarla yapabileceği her şeyi yapabilir. Bunun sonuçlarına bakın:

firstNumber = "10"
secondNumber = "20"
print firstNumber + secondNumber

Gördünüz mü? Python'u iki değişkenimizin sayı değil, sadece metin parçaları olduğunu düşünmeye zorladık. Python iki parçayı bir araya getirebilir, ancak toplamı bulmaya çalışmaz. Fakat biz tamsayılardan bahsediyorduk. Kayan noktalı sayılar da vardır. Fark, tam sayıların ondalık bölüm içermemesi, kayan noktalı sayıların ise ondalık bölüm içermesidir:

var1 = 13
var2 = 15.65
print "var1 is of type ", type(var1)
print "var2 is of type ", type(var2)

Int ve Floats birlikte sorunsuzca karıştırılabilir:

total = var1 + var2
print total
print type(total)

Elbette hepsi ondalık sayıdır, değil mi? Sonra Python otomatik olarak sonucun bir kayan noktalı sayı olduğuna karar verdi. Bunun gibi bazı durumlarda, Python hangi tipin kullanılacağına otomatik olarak karar verir. Diğer durumlarda değil. Örneğin:

varA = "hello 123"
varB = 456
print varA + varB

Bu bize bir hata verecektir, varA bir dizedir ve varB bir int'dir ve Python ne yapacağını bilemez. Ancak, Python'u türler arasında dönüştürmeye zorlayabiliriz:

varA = "hello"
varB = 123
print varA + str(varB)

Şimdi her ikisi de dizgedir, işlem çalışır! Baskı sırasında varB'yi "dizeledik", ancak varB'nin kendisini değiştirmediğimizi unutmayın. VarB'yi kalıcı olarak bir dizgeye çevirmek isteseydik, bunu yapmamız gerekirdi:

varB = str(varB)

İsterseniz int () ve float () işlevini int'ye dönüştürmek için int () ve float () işlevini de kullanabiliriz:

varA = "123"
print int(varA)
print float(varA)

Python komutları ile ilgili not

Bu bölümde print komutunu birkaç şekilde kullandığımızı fark etmiş olmalısınız. Değişkenleri, toplamları, virgülle ayrılmış birçok şeyi ve hatta type () gibi diğer Python komutlarının sonuçlarını bastık. Şu iki emri yerine getirdiğini de farkettiniz,

type(varA)
print type(varA)

tam olarak aynı sonucu verir. Çünkü biz yorumlayıcıdayız ve her şey otomatik olarak basılıyor. Yorumlayıcı dışında çalışan daha karmaşık programlar yazdığımızda, otomatik olarak yazdırılmazlar, bu yüzden print komutunu kullanmamız gerekir. Şu andan itibaren, burada kullanmayı bırakalım, daha hızlı olacak. Böylece basitçe şunu yazabiliriz:

myVar = "hello friends"
myVar

Komut içeriğini sınırlandırmak için Python komutlarının (veya anahtar sözcüklerin) type (), int (), str () vb. Öğelerinin parantez içerdiğini görmüş olmalısınız. Tek istisna, normalde çalıştığı için aslında bir istisna olmayan print komutudur: print ("merhaba"). Ancak, sık kullanıldığından, Python tasarımcıları daha basit bir versiyona izin verdi.

Listeler

Bir başka ilginç veri tipi de bir liste. Bir liste sadece başka bir veri topluluğudur. "" Kullanarak bir metin dizesini tanımladığımız şekilde, [] kullanarak bir liste tanımlarız:

myList = [1,2,3]
type(myList)
myOtherList = ["Bart", "Frank", "Bob"]
myMixedList = ["hello", 345, 34.567]

Herhangi bir tür veri içerebileceğini görüyorsunuz. Listeler çok faydalıdır çünkü değişkenleri birlikte gruplayabilirsiniz. Daha sonra o gruptaki her türlü şeyi yapabilirsiniz; örneğin, onları sayarak:

len(myOtherList)

veya listedeki bir öğeyi almak:

myName = myOtherList[0]
myFriendsName = myOtherList[1]

en () komutu bir listedeki toplam öğe sayısını döndürürken, listedeki "konumları" 0 ile başlar. Listedeki ilk öğe her zaman 0 konumunda, yani myOtherList "Bob" da 2. konumda olacaksınız. Listelerle çok daha fazlasını yapabiliriz, içerikleri sıralama, öğeleri kaldırma veya ekleme gibi [1] adresini okuyabilirsiniz.

Komik ve ilginç bir şey: bir metin dizesi karakter listesine çok benzer! Bunu yapmayı deneyin:

myvar = "hello"
len(myvar)
myvar[2]

Genellikle, listelerde yapabileceğinizi dizelerle de yapabilirsiniz. Aslında hem listeler hem de diziler dizilerdir.

Dizeler, ints, floats ve listeler dışında, sözlükleri gibi daha yerleşik veri türleri vardır veya kendi veri türlerinizi bile oluşturabilirsiniz sınıfları ile.

Girinti

Listelerin büyük ve harika bir kullanımı da, içinde gezinmek ve her öğeyle bir şeyler yapmaktır. Örneğin şuna bakın:

alldaltons = ["Joe", "William", "Jack", "Averell"]
for dalton in alldaltons:
   print dalton + " Dalton"

Listemiz boyunca "for ... in ..." komutunu kullanarak yineledik (programlama jargonu) ve her bir öğe için bir şeyler yaptık. Özel sözdizimine dikkat edin: 'için' komutu ':' 'ile sonlanır ve aşağıdakilerin birden fazla komuttan birinin bir bloğu olacağını belirtir. Tercümanda, biten komut satırına girdikten hemen sonra: komut istemi ... olarak değişecektir, bu da Python'un iki nokta üst üste (:) son satırın gerçekleştiğini ve daha fazlasının geldiğini bildiği anlamına gelir.

Python, for ... operasyonunun içinde bir sonraki satırın kaç tanesinde yürütüleceğini nasıl bilecek? Bunun için Python girintiyi kullanır. Yani, bir sonraki satırınız hemen başlamayacak. Onlara bir boşlukla ya da birkaç boşlukla ya da bir sekmeyle ya da birkaç sekmeyle başlayacaksınız. Diğer programlama dilleri, her şeyi parantez içine koymak vb. Gibi diğer yöntemleri kullanır. Sonraki satırlarınızı 'aynı' girintiyle yazdığınız sürece for-in bloğunun bir parçası olarak kabul edilirler. Bir satıra 2 boşlukla, bir başkasını da 4 ile başlarsanız, bir hata olacaktır. İşiniz bittiğinde, girintisiz başka bir satır yazın veya for-in bloğundan geri dönmek için Enter tuşuna basın

Girinti kullanışlıdır, çünkü programın okunabilirliğine yardımcı olur. Büyük girintiler kullanırsanız (örneğin, boşluklar yerine sekmeler kullanın), büyük bir program yazdığınızda neyin içinde yürütüldüğünün net bir görüntüsünü görürsünüz. For-in dışındaki komutların da girilen kod bloklarını içerebileceğini göreceğiz.

For-in komutları, bir defadan fazla yapılması gereken birçok şey için kullanılabilir. Örneğin, range () komutuyla birleştirilebilir:

serie = range(1,11)
total = 0
print "sum"
for number in serie:
   print number
   total = total + number
print "----"
print total

(Kod örneklerini Kopyalama ve Yapıştırma yoluyla bir yorumlayıcı da çalıştırıyorsanız, önceki metin bloğunun bir hata vereceğini göreceksiniz. Bunun yerine, girintili bloğun sonuna, yani satırın sonuna toplamı kopyalayın = toplam sayı ve ardından yorumlayıcıya yapıştırın. Yorumlayıcı da üç nokta istemi kaybolup kod çalıştırılana kadar bir <enter> basın. Sonra son iki satırı yorumlayıcıya kopyalayın, ardından bir veya daha fazla <enter> cevap görünmelidir.)

Eğer yorumlayıcıya help(range) yazarsanız şunu görürsünüz:

range(...)
    range(stop) -> list of integers
    range(start, stop[, step]) -> list of integers

Burada köşeli parantez isteğe bağlı bir parametreyi gösterir. Ancak hepsinin tamsayı olması bekleniyor. Aşağıda, range parametrelerini int () kullanarak bir tam sayı olmaya zorlayacağız.

decimales = 1000                     # for 3 decimales 
#decimales = 10000                   # for 4 decimales ...
for i in range(int(0 * decimales),int(180 * decimales),int(0.5 * decimales)):
    print float(i) / decimales

Veya bunun gibi daha karmaşık şeyler:

alldaltons = ["Joe", "William", "Jack", "Averell"]
for n in range(4):
   print alldaltons[n], " is Dalton number ", n

Range () komutunun ayrıca, 0 ile başlayan (başlangıç numarasını belirtmezseniz) ve son numarasının belirttiğiniz bitiş numarasından daha az olacağını tuhaf bir özelliğe sahip olduğunu görürsünüz. Bu elbette diğer Python komutları ile iyi çalışır. Örneğin:

alldaltons = ["Joe", "William", "Jack", "Averell"]
total = len(alldaltons)
for n in range(total):
   print alldaltons[n]

Girintili blokların bir başka ilginç kullanımı if komutudur. Bir kod bloğunu yalnızca belirli bir koşul karşılandığında çalıştırırsa, örneğin:

alldaltons = ["Joe", "William", "Jack", "Averell"]
if "Joe" in alldaltons:
   print "We found that Dalton!!!"

Elbette bu her zaman ilk cümleyi yazdıracak, ancak ikinci satırı değiştirmeyi deneyin:

if "Lucky" in alldaltons:

Sonra hiçbir şey basılmaz. Ayrıca başka bir ifade de belirtebiliriz: ifadesi:

alldaltons = ["Joe", "William", "Jack", "Averell"]
if "Lucky" in alldaltons:
   print "We found that Dalton!!!"
else:
   print "Such Dalton doesn't exist!"

Fonksiyonlar

Çok az standart Python komutları vardır. Python'un şu anki versiyonunda, yaklaşık 30 tane var ve biz zaten birkaç tanesini biliyoruz. Ama kendi komutlarımızı icat edip edemeyeceğimizi hayal edin? Yapabiliriz ve bu son derece kolay. Aslında, Python kurulumunuza ekleyebileceğiniz çoğu ek modül tam da bunu yapar, kullanabileceğiniz komutları ekler. Python'daki özel bir komut fonksiyon olarak adlandırılır ve şöyle yapılır:

def printsqm(myValue):
   print str(myValue)+" square meters"
 
printsqm(45)

(Başka bir kopyalama ve yapıştırma hatası, yalnızca girintili bölümün sonuna kopyalayın, yani "square meters" yorumlayıcıya yapıştırın ve üç nokta istemi bir yol gelene kadar <enter> verin, sonra kopyalayıp yapıştırın son satır.)

Son derece basit: def () komutu yeni bir fonksiyon tanımlar. Ona bir isim verin ve parantez içinde fonksiyonumuzda kullanacağımız argümanları tanımlayın. Bağımsız değişkenler, işleve iletilecek verilerdir. Örneğin, len () komutuna bakın. Sadece len () yazarsanız, Python size bir argüman gerektirdiğini söyleyecektir. Yani, len () bir şey istiyorum, değil mi? Sonra, örneğin, len (myList) yazacak ve myList'in uzunluğunu alacaksınız. MyList, len () fonksiyonuna ilettiğiniz bir argümandır. Len () işlevi, kendisine geçenlerle ne yapılacağını bildiği şekilde tanımlanır. Burada yaptığımız gibi.

"MyValue" adı herhangi bir şey olabilir ve yalnızca işlev içinde kullanılacaktır. Bu sadece argümana verdiğiniz bir isimdir, onunla bir şeyler yapabilirsiniz, ancak fonksiyona kaç tane argüman bekleneceğini de söyler. Örneğin, bunu yaparsanız:

printsqm(45,34)

Bir hata olacak. Fonksiyonumuz sadece bir argüman alacak şekilde programlandı, fakat iki, 45 ve 34 aldı. Bunun yerine şöyle bir şey yapabiliriz:

def sum(val1,val2):
   total = val1 + val2
   return total

sum(45,34)
myTotal = sum(45,34)

İki argüman alan, toplayan ve bu değeri veren bir fonksiyon yaptık. Bir şeyi döndürmek çok yararlıdır, çünkü sonucunu myTotal değişkeninde saklamak gibi bir şey yapabiliriz. Elbette, biz tercüman olduğumuz ve her şey basıldığı için:

sum(45,34)

sonucu ekranda yazdırır, ancak yorumlayıcının dışında, işlev içinde herhangi bir yazdırma komutu olmadığından, ekranda hiçbir şey görünmez. Yapmanız gerekenler:

print sum(45,34)

bir şeyin basılması. İşlevler hakkında daha fazla bilgi edinin [2].

Modüller

Şimdi Python'un nasıl çalıştığı hakkında iyi bir fikrimiz olduğuna göre, son bir şeye ihtiyacımız var: Dosya ve modüllerle nasıl çalışılır

Şimdiye kadar, Python komutlarını yorumlayıcıya satır satır yazdık, değil mi? Birlikte birkaç satır yazabilseydik ve hepsini bir kerede yürütebilseydik? Kesinlikle daha karmaşık şeyler yapmak için çok zor olurdu. Ve biz de işimizi kurtarabiliriz. Bu da son derece kolaydır. Basitçe bir metin editörü (Windows not defteri, Linux gedit, emacs veya vi gibi) açın ve tüm Python kodlarınızı, yorumlayıcıya girdiğiniz şekilde, girintilerle vb. Yazın. Ardından, bu dosyayı bir yere kaydedin. , tercihen bir .py uzatma ile. İşte bu, tam bir Python programınız var. Tabii ki, not defterinden çok daha iyi editörler var, ama sadece size bir Python programının bir metin dosyasından başka bir şey olmadığını göstermektir.

Python'un bu programı yürütmesini sağlamak için yüzlerce yol vardır. Pencerelerde, dosyayı sağ tıklayın, Python ile açın ve çalıştırın. Ancak Python tercümandan da çalıştırabilirsiniz. Bunun için tercümanın .py programınızın nerede olduğunu bilmesi gerekir. FreeCAD'de en kolay yol, programınızı FreeCAD'in Python yorumlayıcısının FreeCAD'in bin klasörü veya Mod klasörlerinden herhangi biri gibi varsayılan olarak bildiği bir yere yerleştirmektir. (Linux'ta muhtemelen / home / <kullanıcı adı> /.FreeCAD/Mod dizininiz var, hadi metin dosyasını koyacağımız komut dosyalarına bir alt dizin ekleyelim.) Bunun gibi bir dosya yazdığımızı varsayalım:

def sum(a,b):
    return a + b

print "myTest.py succesfully loaded"

ve bunu FreeCAD/bin dizinine myTest.py olarak kaydedelim (veya Linux'ta /home/<kullanıcı adı> /.FreeCAD/Mod/scripts.) Şimdi FreeCAD'i başlatalım ve yorumlayıcı penceresinde şunu yazın:

import myTest

.py uzantısı olmadan. Bu, tıpkı yorumlayıcıya yazdığımız gibi, dosyanın içeriğini satır satır yürütür. Toplam işlevi oluşturulacak ve mesaj yazdırılacaktır. Büyük bir fark var: import komutu sadece dosyalarımızda yazılan programları yürütmek için değil, aynı zamanda içindeki fonksiyonları yüklemek için de yapılır, böylece yorumlayıcı da kullanılabilir hale gelirler. Bizimki gibi fonksiyonlar içeren dosyalara modüller denir.

Normal olarak, yorumlayıcıya bir sum () işlevi yazdığımızda, onu sadece şöyle uygularız:

sum(14,45)

Daha önce yaptığımız gibi. Sum () fonksiyonumuzu içeren bir modülü içe aktardığımızda, sözdizimi biraz farklıdır. Şöyle yaparız:

myTest.sum(14,45)

Yani, modül bir "konteyner" olarak içe aktarılır ve tüm fonksiyonları içeridedir. Bu son derece kullanışlıdır, çünkü birçok modülü içe aktarabilir ve her şeyi iyi organize edebiliriz. Yani, temelde, her yerde something.somethingElse', arada bir nokta varken, bu somethingElse something içindedir demektir.

Sum() fonksiyonumuzu doğrudan ana yorumlayıcı alanına da aktarabiliriz, şöyle:

from myTest import *
sum(12,54)

Temel olarak tüm modüller böyle davranır. Bir modülü içe aktarırsanız, işlevlerini kullanabilirsiniz: module.function (argument). Neredeyse tüm modüller bunu yapar: yorumlayıcı da veya kendi Python modüllerinde kullanabileceğiniz işlevleri, yeni veri türlerini ve sınıflarını tanımlar, çünkü hiçbir şey sizin modülünüzün içine diğer modülleri içe aktarmanızı engellemez!

Son derece yararlı bir şey. Hangi modüllere sahip olduğumuzu, hangi fonksiyonların içinde olduğunu ve nasıl kullanılacağını (yani, ne tür argümanlara ihtiyaç duyduklarını) nasıl biliyoruz? Python'un bir help () işlevi olduğunu zaten gördük. Şunu yapın:

help()
modules

Mevcut tüm modüllerin bir listesini verir. Şimdi etkileşimli yardımdan çıkmak ve bunlardan herhangi birini almak için q yazabiliriz. Hatta dir () komutuyla içeriğine göz atabiliriz.

import math
dir(math)

Matematik modülünde yer alan tüm fonksiyonları ve ayrıca __doc__, __dosya__, __name__ adında garip şeyleri göreceğiz. __Doc__ son derece kullanışlıdır, bir belge metnidir. (İyi yapılmış) modüllerin her işlevi, nasıl kullanılacağını açıklayan bir __doc __ işlevine sahiptir. Örneğin, matematik modülünün yanında bir sin işlevi olduğunu görüyoruz. Nasıl kullanılacağını bilmek ister misiniz?

print math.sin.__doc__

(Açık olmayabilir, ancak dokümanın her iki tarafında iki alt çizgi karakter vardır.)

Ve son olarak son bir küçük tüyo: Yeni veya mevcut bir modül üzerinde çalışırken, dosya uzantısını py gibi bir ile değiştirmek en iyisidir: myModule.FCMacro => myModule.py. Sık sık test etmek istiyoruz, böylece yukarıdaki gibi yükleyeceğiz.

import myModule
myModule.myTestFunction()

Ancak, myTestFunction () işlevinin doğru çalışmadığını görürsek ne olur? Editörümüze geri dönüyor ve değişiklikler yapıyoruz. Sonra, python yorumlayıcısını kapatmak ve yeniden açmak yerine, modülü şu şekilde güncelleyebiliriz:

reload(myModule)

Bu dosyayı yeniden adlandırma, Python'un FCMacro uzantısı hakkında bilmediğindendir.

However, there are two alternates: Inside the one macro use Python's exec or execfile functions.

f = open("myModule","r")
d = f.read()
exec d

or

execfile "myModule"

To share code across macros, you can access the FreeCAD or FreeCADGui module (or any other Python module) and set any attribute to it. This should survive the execution of the macro.

import FreeCAD
if hasattr(FreeCAD,"macro2_executed"):
    ...
else:
    FreeCAD.macro2_executed = True # you can assign any value because we only check for the existence of the attribute
    ... execute macro2

Starting with FreeCAD

Well, I think you now have a good idea of how Python works, and you can start exploring what FreeCAD has to offer. FreeCAD's Python functions are all well organized in different modules. Some of them are already loaded (imported) when you start FreeCAD. So, just do

dir()

and read on to FreeCAD Scripting Basics...

Of course, we saw here only a very small part of the Python world. There are many important concepts that we didn't mention. There are three very important Python reference documents on the net:

Be sure to bookmark them!


Macros
Python scripting tutorial