Başlangıç
Google'ın online Python eğitimine hoş geldiniz. Bu kurs, şirket içinde sunulan Python'a giriş kursunu temel alır. Kurulum sayfasında belirtildiği gibi, bu materyal Python 3'ü ele almaktadır.
Tamamlayıcı bir MOOC kursu arıyorsanız Udacity ve Coursera’daki (programlamaya giriş [yeni başlayanlar] veya Python'a giriş) kurslarını deneyin. Son olarak, video izlemeden kendi temponuzda online eğitim almak istiyorsanız bu gönderinin sonunda listelenenleri deneyin. Bu kaynaklarda, her özellikle ilgili öğrenme içeriği ve alıştırma yapabileceğiniz Python etkileşimli çevirmenleri yer almaktadır. Bu "yorumlayıcı" nedir? nelerden bahsediyoruz? Bunu bir sonraki bölümde öğreneceksiniz.
Dil Tanıtımı
Python, dinamik, yorumlanmış (bayt kodu derlenmiş) bir dildir. Kaynak kodunda değişken, parametre, işlev veya yöntem için tür bildirimleri bulunmuyor. Bu, kodu kısa ve esnek hale getirir ve kaynak kodun derleme süresi türü kontrolünü kaybedersiniz. Python, çalışma zamanında tüm değer türlerini izler ve çalışırken bir anlam ifade etmeyen kodu işaretler.
Python kodunun nasıl çalıştığını görmenin mükemmel bir yolu, Python yorumlayıcısını çalıştırmak ve kodu doğrudan bu koda yazmaktır. "list
için bir int
eklersem ne olur?" gibi bir sorunuz olursa Sorunu görmenin hızlı ve muhtemelen en iyi yolu Python çevirmen aracına yazmaktır. (Gerçekte ne olduğunu görmek için aşağıya bakın!)
$ python3 ## Run the Python interpreter Python 3.X.X (XXX, XXX XX XXXX, XX:XX:XX) [XXX] on XXX Type "help", "copyright", "credits" or "license" for more information. >>> a = 6 ## set a variable in this interpreter session >>> a ## entering an expression prints its value 6 >>> a + 2 8 >>> a = 'hi' ## 'a' can hold a string just as well >>> a 'hi' >>> len(a) ## call the len() function on a string 2 >>> a + len(a) ## try something that doesn't work Traceback (most recent call last): File "" , line 1, inTypeError: can only concatenate str (not "int") to str >>> a + str(len(a)) ## probably what you really wanted 'hi2' >>> foo ## try something else that doesn't work Traceback (most recent call last): File " " , line 1, inNameError: name 'foo' is not defined >>> ^D ## type CTRL-d to exit (CTRL-z in Windows/DOS terminal)
İki çizgili piton, Python'u yazdıktan sonra ve >>> işaretinden önce yazdırır istem size ve nerede oluşturulduğuna dair bir fikriniz var. Yazdırılan ilk şey "Python 3." gibi bir sürüm kullanıyorsanız bu örnekler işinize yarayacaktır.
Yukarıda görebileceğiniz gibi, değişkenler ve operatörlerle kolayca deneme yapabilirsiniz. Ayrıca çevirmen de kod, herhangi bir değer atanmamış bir değişkeni okumaya çalıştığında çalışma zamanı hatası oluşur. C++ ve Java gibi, Python da büyük/küçük harfe duyarlıdır; dolayısıyla, "a" ve "A" farklı değişkenlerdir. Satırın sonu, bir ifadenin sonunu belirtir. Bu nedenle, C++ ve Java'dan farklı olarak Python'da her ifadenin sonuna noktalı virgül eklenmesi gerekmez. Yorumlar "#" ile başlar ve satırın sonuna kadar uzanır.
Python kaynak kodu
Python kaynak dosyaları ".py" kullanır "modüller" olarak adlandırılır. hello.py
Python modülünde çalıştırmanın en kolay yolu "python hello.py Alice" kabuk komutunu kullanmaktır Bu işlem, Python yorumlayıcısını hello.py
içinde kodu yürütmesi için çağırarak "Ali" komut satırı bağımsız değişkenini iletir.
Python'u komut satırından çalıştırırken kullanabileceğiniz tüm farklı seçenekleri öğrenmek için resmi dokümanlar sayfasına göz atın.
Burada çok basit bir hello.py
programı görüyorsunuz (kod bloklarının süslü ayraçlar yerine girinti kullanılarak ayrıldığına dikkat edin. Bu konuya ilerleyen kısımlarda değineceğiz!):
#!/usr/bin/python3 # import modules used here -- sys is a very standard one import sys # Gather our code in a main() function def main(): print('Hello there', sys.argv[1]) # Command line args are in sys.argv[1], sys.argv[2] ... # sys.argv[0] is the script name itself and can be ignored # Standard boilerplate to call the main() function to begin # the program. if __name__ == '__main__': main()
Bu programı komut satırından çalıştırmak aşağıdaki gibi görünür:
$ python3 hello.py Guido Hello there Guido $ ./hello.py Alice ## without needing 'python3' first (Unix) Hello there Alice
İçe aktarma işlemleri, komut satırı bağımsız değişkenleri ve len()
Bir Python dosyası veya "modül" içindeki en dıştaki ifadeler, bir defalık kurulumunu yapar. Bu ifadeler, modülün bir yere ilk aktarıldığında değişkenleri ve işlevleri ayarlanır. Bu ifadeler yukarıdan aşağıya doğru çalışır. Python modülü, python3 hello.py Bob
yukarıda belirtildiği gibi doğrudan çalıştırılabilir veya başka bir modül tarafından içe aktarılıp kullanılabilir. Bir Python dosyası doğrudan çalıştırıldığında "__name__" özel değişkeni "__main__" olarak ayarlanmış. Bu nedenle, yukarıda gösterilen ortak if __name__ ==...
öğesinin, modül doğrudan çalıştırıldığında bir main() işlevini çağırması yaygındır. Ancak modül başka bir modül tarafından içe aktarıldığında bu durum yaygın değildir.
Standart bir Python programında sys.argv
listesi, komut satırı bağımsız değişkenlerini standart şekilde içerir. sys.argv[0] programın kendisi, sys.argv[1] ise ilk bağımsız değişkendir ve bu şekilde devam eder. argc
veya bağımsız değişken sayısı hakkında bilginiz varsa yukarıdaki etkileşimli çevirmen kodunda yaptığımız gibi, bu değeri Python'dan len(sys.argv)
ile isteyebilirsiniz. len()
genel olarak bir dizenin ne kadar uzun olduğunu, listelerdeki ve gruplardaki öğe sayısını (dizi benzeri başka bir veri yapısı) ve bir sözlükteki anahtar/değer çiftlerinin sayısını söyleyebilir.
Kullanıcı Tanımlı İşlevler
Python'daki işlevler şu şekilde tanımlanır:
# Defines a "repeat" function that takes 2 arguments. def repeat(s, exclaim): """ Returns the string 's' repeated 3 times. If exclaim is true, add exclamation marks. """ result = s + s + s # can also use "s * 3" which is faster (Why?) if exclaim: result = result + '!!!' return result
Ayrıca, işlevi veya eğer deyimini oluşturan satırların, hepsi aynı girintiye sahip olacak şekilde nasıl gruplandırıldığına da dikkat edin. Ayrıca, daha kullanıcı dostu olan + operatörünü kullanarak dizeleri tekrarlamanın 2 farklı yolunu sunduk. Ancak * aynı zamanda Python'un "tekrarlama" yöntemi olduğu için işe yarar. operatörü kullanılır. '-' * 10
, '----------'
değerini, ekranda bir "satır" oluşturmak için kullanışlı bir yöntem sağlar. Kod açıklamasında, * işaretinin + simgesinden daha hızlı çalıştığını belirtmiştik. Bunun nedeni, * işlevinin sonuçta ortaya çıkan nesnenin boyutunu bir kez hesaplaması, + ile ise bu hesaplamanın + her çağrıldığında yapılmasıdır. Hem + hem de *, "aşırı yüklenmiş" olarak adlandırılır işleçleri, sayılar ve dizeler (ve diğer veri türleri) için farklı anlamları ifade ettiğinden emin olun.
def
anahtar kelimesi, işlevi parantez içinde parametreleriyle ve kodu girintili olarak tanımlar. Bir işlevin ilk satırı, işlevin ne yaptığını açıklayan bir dokümantasyon dizesi ("docstring") olabilir. Belge dizesi, tek satırlı veya yukarıdaki örnekte gösterildiği gibi çok satırlı bir açıklama olabilir. (Evet, bunlar Python'a özgü bir özellik olan "üç tırnak işareti"dir.) İşlevde tanımlanan değişkenler söz konusu işlev için yerel olduğundan "sonuç" işlevi, bir "sonuç"tan ayrıdır. değişkeni kullanabilirsiniz. return
ifadesi, bağımsız değişkeni alabilir. Bu durumda, arayana döndürülen değer budur.
Yukarıdaki tekrar() işlevini çağıran ve döndürdüğü şeyi yazdıran kodu burada görebilirsiniz:
def main(): print(repeat('Yay', False)) ## YayYayYay print(repeat('Woo Hoo', True)) ## Woo HooWoo HooWoo Hoo!!!
Çalışma zamanında, işlevler bir "def" yürütülmesiyle tanımlanmalıdır çağrılmadan önce kontrol edin. Dosyanın alt kısmında, üzerinde çağırdığı işlevlerle birlikte bir main() işlevini tanımlamak yaygın bir uygulamadır.
Girinti
Alışılmadık bir Python özelliği, kod parçasındaki boşluk girintisinin anlamını etkilemesidir. Bir işlevi oluşturanlar gibi mantıksal ifade bloklarının tümü, üst işlevlerinin girintisinden veya "if" (if) ifadesiyle ayarlanmış aynı girintiye sahip olmalıdır. başka bir şey var. Bir gruptaki satırlardan birinin girintisi farklıysa bu, söz dizimi hatası olarak işaretlenir.
Python'un boşluk kullanımı başlangıçta biraz tuhaf gelse de gayet mantıklı geldi ve buna çok çabuk alıştığımı fark ettim. Girinti düzenini büyük ölçüde karmaşık hale getirdiğinden, SEKME'leri kullanmaktan kaçının (SEKME'ler farklı platformlarda farklı anlamlara gelebilir). Düzenleyicinizi, Python kodu için SEKME yerine boşluk ekleyecek şekilde ayarlayın.
Yeni başlayanların en sık sorduğu soru şudur: "Kaç boşluk girinti?" Resmi Python stil kılavuzuna (PEP 8) göre girintiyi 4 boşlukla eklemeniz gerekir. (İlginç bir bilgi: Google'ın dahili stil kuralı, girintileme işlemini 2 boşluk belirler!)
Çalışma Zamanında Kod Kontrol Edildi
Python, derleme zamanında çok az kontrol gerçekleştirir ve hemen hemen tüm tür, ad vb. kontrolleri o satır çalışana kadar her satırdaki kontrolleri erteler. Yukarıdaki Main() çağrısının şu şekilde tekrar() çağrısı yaptığını varsayalım:
def main(): if name == 'Guido': print(repeeeet(name) + '!!!') else: print(repeat(name))
if-ifadesi bariz bir hata içeriyor. Burada tekrar() işlevi yanlışlıkla repeeeet() olarak yazılır. Python'daki işin ilginç tarafı ... bu kod derlenir ve çalışır, çalışma zamanındaki ad "Guido" olmadığı sürece düzgün şekilde çalışır. Yalnızca çalıştırma gerçekten repeeeet() işlevini yürütmeye çalıştığında böyle bir işlev olmadığını fark edip hata verir. Bu snippet'te ikinci bir hata daha vardır. ad 'Guido' ile karşılaştırılmadan önce bir değer atanmamıştır. Python bir "NameError" hatası döndürecek atanmamış bir değişkeni değerlendirmeye çalışırsanız. Bu örnekler, bir Python programını ilk kez çalıştırdığınızda gördüğünüz ilk hatalardan bazılarının basit yazım hataları veya bu gibi başlatılmamış değişkenler olduğunu gösteren bazı örneklerdir. Bu, Java gibi daha ayrıntılı türde bir sisteme sahip dillerin avantajlı olduğu bir alandır. Bu tür hataları derleme sırasında yakalayabilirler (tabii ki bu tür bilgileri korumanız gerekir ve bu bir ödün vermektir).
Python 3'te tür ipuçları kullanıma sunulmuştur.
Tür ipuçları, bir işlevdeki her bağımsız değişken için hem türü hem de
işlevin döndürdüğü nesnenin türünü belirler.
Örneğin, ek açıklamalı def is_positive(n: int) -> bool:
işlevindeki bağımsız değişken
n
bir int
ve döndürülen değer bool
.
Bu türlerin ne anlama geldiğini daha sonra ele alacağız. Yine de tür ipuçları tamamen isteğe bağlıdır.
Tür ipuçlarından faydalanan giderek daha fazla kod göreceksiniz. Çünkü kullanırsanız kullanın,
cider-v ve VS.code gibi bazı düzenleyiciler işlevlerinizin
ekleyebilirsiniz. Hatta siz kodu düzenlerken bağımsız değişkenler önerebilir ve bunları doğrulayabilir.
Bu eğitimde tür ipuçlarını ele almayacağız, ancak
görmek istemeyebilirler.
Değişken Adları
Python değişkenlerinin kaynak kodunda herhangi bir türü bulunmadığından, neler olduğunu hatırlamak için değişkenlerinize anlamlı adlar vermeniz daha faydalı olur. Bu nedenle, tek bir ad ve "adlar" ise liste bir ad ve "tuple" ise fark edebilirsiniz. Temel Python hatalarının çoğu, her değişkende ne tür bir değerin bulunduğunu unutmaktan kaynaklanır. Bu nedenle, her şeyi düzeltmek için değişken adlarınızı kullanın.
Gerçek adlandırmaya gelirsek, bazı diller "birden fazla kelimeden" oluşan değişken adları için Underscored_parts'ı tercih eder Ancak diğer diller camelCasing'i tercih eder. Genel olarak Python, alt çizgi yöntemini tercih eder ancak geliştiricileri, bu stili zaten kullanan mevcut Python koduna entegre ettikleri takdirde camelCasing'i erteleme konusunda yönlendirir. Okunabilirlik önemlidir. PEP 8'deki adlandırma kuralları bölümünde daha fazla bilgi edinebilirsiniz.
Tahmin edebileceğiniz gibi, "if" gibi anahtar kelimeler, ve "when" değişkeni adı olarak kullanılamaz — kullanırsanız bir söz dizimi hatası alırsınız. Ancak yerleşik değişkenleri değişken adı olarak kullanmamaya dikkat edin. Örneğin, 'str', 'list' ve "print" bu sistem değişkenlerini geçersiz kılarsınız. Yerleşik öğeler anahtar kelime değildir ve bu nedenle, yeni Python geliştiricilerinin yanlışlıkla kullanmaya açıktır.
Modüller ve Ad Alanları hakkında daha fazla bilgi
"binky.py" şeklinde bir modülünüz olduğunu varsayalım içerir. Bu foo işlevinin tam adı "binky.foo"dur. Bu şekilde, çeşitli Python modülleri işlevlerini ve değişkenlerini istedikleri gibi adlandırabilir ve değişken adları çakışmaz. Module1.foo, model2.foo'dan farklıdır. Python sözlüğünde binky, modül1 ve modül2'nin kendi "ad alanları" olduğunu söyleriz. Bunlar, tahmin edebileceğiniz gibi değişken addan nesneye bağlamadır.
Örneğin, "sys" modülünü kullanabilirsiniz. "Sistemi içe aktar" ifadesiyle daha sonra, sys modülündeki tanımlara erişebilir ve bunları tam nitelikli adlarıyla (ör. sys.exit(). (Evet, "sys"te de ad alanı var.)
import sys # Now can refer to sys.xxx facilities sys.exit(0)
Şöyle görünen başka bir içe aktarma formu vardır: "from sys import argv, exit". Bu, argv ve exit() işlevlerini kısa adlarıyla kullanılabilir hale getirir; ancak, bir işlevin veya özelliğin nereden geldiğini belirlemek çok daha kolay olduğundan, tam nitelikli adlara sahip orijinal formu öneririz.
Python yorumlayıcının standart kurulumuyla birlikte gelen çok sayıda modül ve paket vardır. Bu nedenle, bunları kullanmak için fazladan bir şey yapmanız gerekmez. Bunlar topluca "Python Standart Kitaplığı" olarak bilinir. Sık kullanılan modüller/paketler şunlardır:
- sys — exit(), argv, stdin, stdout, ... erişimi
- re — normal ifadeler
- os — işletim sistemi arayüzü, dosya sistemi
Tüm Standart Kitaplık modüllerinin ve paketlerinin belgelerine http://docs.python.org/library adresinden ulaşabilirsiniz.
Çevrimiçi yardım, help()
ve dir()
Python'dan yardım almanın çeşitli yolları vardır.
- "Python listesi" gibi "piton" kelimesiyle bir Google araması yapın veya "python dizesi küçük harf" yazın. Sonuç genellikle ilk isabettir. Bu tekniğin Python'da diğer dillere göre daha iyi sonuç verdiği anlaşılıyor.
- Resmi Python dokümanlar sitesi — docs.python.org — yüksek kaliteli dokümanlar içerir. Yine de genelde birkaç kelimeden oluşan bir Google aramasının daha hızlı olduğunu düşünüyorum.
- Ayrıca, Python ve/veya programlamayı kullanmaya yeni başlayanlar için özel olarak tasarlanmış bir resmi Eğitmen posta listesi de vardır.
- StackOverflow ve Quora'da birçok soru (ve yanıt) bulunabilir.
- help() ve dir() işlevlerini kullanın (aşağıya bakın).
Python yorumlayıcısında help() işlevi çeşitli modüller, işlevler ve yöntemler için belge dizelerini getirir. Bu doküman dizeleri Java'nın javadoc dosyasına benzer. dir() işlevi, bir nesnenin özelliklerini belirtir. Aşağıda, yorumlayıcıdan help() ve dir() işlevlerini çağırmanın bazı yollarını görebilirsiniz:
help(len)
— Yerleşiklen()
işlevi için yardım dizesi; olduğunu unutmayın "len()" değil; bu, işlev için bir çağrıhelp(sys)
—sys
modülü için yardım dizesi (önceimport sys
yapılmalıdır)dir(sys)
—dir()
,help()
gibidir ancak yalnızca tanımlanmış sembollerinin veya "özelliklerinin" kısa bir listesini sunarhelp(sys.exit)
—sys
modülündekiexit()
işlevi için yardım dizesihelp('xyz'.split)
— dize nesneleri içinsplit()
yöntemi için yardım dizesi.help()
öğesini, söz konusu nesnenin kendisi veya söz konusu nesnenin örnek ve özelliğiyle birlikte çağırabilirsiniz. Örneğin,help('xyz'.split)
işlevinin çağrılmasıhelp(str.split)
çağrısıyla aynıdır.help(list)
—list
nesne için yardım dizesidir(list)
— yöntemleri dahil olmak üzerelist
nesne özelliğini görüntülerhelp(list.append)
—list
nesne içinappend()
yöntemi için yardım dizesi