Introduction to Python/tr

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:

, 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:

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:

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:

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:

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:

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:

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'ın değerini değiştirdik. Ayrıca değişkenleri de kopyalayabiliriz:

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:

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

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:

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:

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

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:

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:

Ş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:

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

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,

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:

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:

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:

veya listedeki bir öğeyi almak:

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 adresini okuyabilirsiniz.

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

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:

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:

(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 basın. Sonra son iki satırı yorumlayıcıya kopyalayın, ardından bir veya daha fazla cevap görünmelidir.)

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

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.

Veya bunun gibi daha karmaşık şeyler:

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:

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:

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

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

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:

(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 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:

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

İ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:

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:

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

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

Until now, we wrote Python instructions line by line in the interpreter, right? What if we could write several lines together, and have them executed all at once? It would certainly be handier for doing more complex things. And we could save our work too. Well, that too, is extremely easy. Simply open a text editor (such as the windows notepad, Linux gedit, emacs, or vi), and write all your Python lines, the same way as you write them in the interpreter, with indentations, etc. Then, save that file somewhere, preferably with a .py extension. That's it, you have a complete Python program. Of course, there are much better editors than notepad, but it is just to show you that a Python program is nothing else than a text file.

To make Python execute that program, there are hundreds of ways. In windows, simply right-click your file, open it with Python, and execute it. But you can also execute it from the Python interpreter itself. For this, the interpreter must know where your .py program is. In FreeCAD, the easiest way is to place your program in a place that FreeCAD's Python interpreter knows by default, such as FreeCAD's bin folder, or any of the Mod folders. (In Linux, you probably have a directory /home/ /.FreeCAD/Mod, let's add a subdirectory to that called scripts where we will put the text file.) Suppose we write a file like this:

and we save it as myTest.py in our FreeCAD/bin directory (or on Linux to /home/ /.FreeCAD/Mod/scripts.) Now, let's start FreeCAD, and in the interpreter window, write:

without the .py extension. This will simply execute the contents of the file, line by line, just as if we had written it in the interpreter. The sum function will be created, and the message will be printed. There is one big difference: the import command is made not only to execute programs written in files, like ours, but also to load the functions inside, so they become available in the interpreter. Files containing functions, like ours, are called modules.

Normally when we write a sum function in the interpreter, we execute it simply like that:

Like we did earlier. When we import a module containing our sum function, the syntax is a bit different. We do:

That is, the module is imported as a "container", and all its functions are inside. This is extremely useful, because we can import a lot of modules, and keep everything well organized. So, basically, everywhere you see something.somethingElse, with a dot in between, that means somethingElse is inside something.

We can also import our sum function directly into the main interpreter space, like this:

Basically all modules behave like that. You import a module, then you can use its functions: module.function(argument). Almost all modules do that: they define functions, new data types and classes that you can use in the interpreter or in your own Python modules, because nothing prevents you from importing other modules inside your module!

One last extremely useful thing. How do we know what modules we have, what functions are inside and how to use them (that is, what kind of arguments they need)? We saw already that Python has a help function. Doing:

Will give us a list of all available modules. We can now type q to get out of the interactive help, and import any of them. We can even browse their content with the dir command

We'll see all the functions contained in the math module, as well as strange stuff named __doc__, __file__, __name__. The __doc__ is extremely useful, it is a documentation text. Every function of (well-made) modules has a __doc__ that explains how to use it. For example, we see that there is a sin function in side the math module. Want to know how to use it?

(It may not be evident, but on either side of doc are two underscore characters.)

And finally one last little goodie: When we work on a new or existing module, it's best to replace the file extension with py such as: myModule.FCMacro => myModule.py. We often want to test it so we will load it as above.

But what if we see that myTestFunction doesn't work correctly? We go back to our editor and make changes. Then, instead of closing and reopening the python interpreter, we can simply update the module like this:

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.

or

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.

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

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!
 * the official Python tutorial with way more information than this one
 * the official Python reference
 * the Dive into Python wikibook/ book.