Python Hızlı Kılavuzu

Python, yüksek seviyeli, yorumlanmış, etkileşimli ve nesne yönelimli bir betik dilidir. Python, son derece okunabilir olacak şekilde tasarlanmıştır. Diğer dillerin noktalama işaretlerini kullandığı yerlerde sık sık İngilizce anahtar sözcükler kullanır ve diğer dillerden daha az sözdizimsel yapıya sahiptir.

  • Python is Interpreted- Python, yorumlayıcı tarafından çalışma zamanında işlenir. Programınızı çalıştırmadan önce derlemenize gerek yoktur. Bu PERL ve PHP'ye benzer.

  • Python is Interactive - Aslında bir Python komut istemine oturabilir ve programlarınızı yazmak için doğrudan yorumlayıcıyla etkileşime girebilirsiniz.

  • Python is Object-Oriented - Python, nesneleri nesnelerin içinde barındıran Nesne Yönelimli stili veya programlama tekniğini destekler.

  • Python is a Beginner's Language - Python, başlangıç ​​seviyesindeki programcılar için harika bir dildir ve basit metin işlemeden WWW tarayıcılarına ve oyunlara kadar geniş bir uygulama yelpazesinin geliştirilmesini destekler.

Python Tarihi

Python, seksenlerin sonlarında ve doksanların başlarında Guido van Rossum tarafından Hollanda'daki Ulusal Matematik ve Bilgisayar Bilimleri Araştırma Enstitüsü'nde geliştirildi.

Python, ABC, Modula-3, C, C ++, Algol-68, SmallTalk ve Unix kabuğu ve diğer komut dosyası dilleri dahil olmak üzere diğer birçok dilden türetilmiştir.

Python telif hakkı ile korunmaktadır. Perl gibi, Python kaynak kodu artık GNU Genel Kamu Lisansı (GPL) altında mevcuttur.

Guido van Rossum ilerlemesini yönlendirmede hala hayati bir role sahip olmasına rağmen, Python şimdi enstitüdeki bir çekirdek geliştirme ekibi tarafından sürdürülüyor.

Python Özellikleri

Python'un özellikleri şunları içerir:

  • Easy-to-learn- Python'da birkaç anahtar kelime, basit yapı ve açıkça tanımlanmış bir sözdizimi vardır. Bu, öğrencinin dili hızlı bir şekilde almasını sağlar.

  • Easy-to-read - Python kodu daha net tanımlanmıştır ve gözler tarafından görülebilir.

  • Easy-to-maintain - Python'un kaynak kodunun bakımı oldukça kolaydır.

  • A broad standard library - Python'un kütüphanenin büyük kısmı çok taşınabilir ve UNIX, Windows ve Macintosh'ta çapraz platform uyumludur.

  • Interactive Mode - Python, kod parçacıklarının etkileşimli testine ve hata ayıklamasına izin veren etkileşimli bir mod desteğine sahiptir.

  • Portable - Python, çok çeşitli donanım platformlarında çalışabilir ve tüm platformlarda aynı arayüze sahiptir.

  • Extendable- Python yorumlayıcısına düşük seviyeli modüller ekleyebilirsiniz. Bu modüller, programcıların araçlarını daha verimli olacak şekilde eklemelerini veya özelleştirmelerini sağlar.

  • Databases - Python, tüm büyük ticari veritabanlarına arayüz sağlar.

  • GUI Programming - Python, Windows MFC, Macintosh ve Unix'in X Window sistemi gibi birçok sistem çağrısına, kitaplığa ve Windows sistemine oluşturulabilen ve taşınabilen GUI uygulamalarını destekler.

  • Scalable - Python, büyük programlar için kabuk komut dosyalarına göre daha iyi bir yapı ve destek sağlar.

Yukarıda belirtilen özelliklerin yanı sıra, Python'da iyi özelliklerin büyük bir listesi vardır, birkaç tanesi aşağıda listelenmiştir -

  • İşlevsel ve yapılandırılmış programlama yöntemlerinin yanı sıra OOP'yi de destekler.

  • Bir komut dosyası dili olarak kullanılabilir veya büyük uygulamalar oluşturmak için bayt koduna derlenebilir.

  • Çok yüksek düzeyde dinamik veri türleri sağlar ve dinamik tür denetimini destekler.

  • Otomatik çöp toplamayı destekler.

  • C, C ++, COM, ActiveX, CORBA ve Java ile kolayca entegre edilebilir.

Python, Linux ve Mac OS X dahil olmak üzere çok çeşitli platformlarda mevcuttur. Python ortamımızı nasıl kuracağımızı anlayalım.

Yerel Ortam Kurulumu

Bir terminal penceresi açın ve önceden kurulu olup olmadığını ve hangi sürümün kurulu olduğunu öğrenmek için "python" yazın.

  • Unix (Solaris, Linux, FreeBSD, AIX, HP / UX, SunOS, IRIX, vb.)
  • 9x / NT / 2000 kazanın
  • Macintosh (Intel, PPC, 68K)
  • OS/2
  • DOS (birden çok sürüm)
  • PalmOS
  • Nokia cep telefonları
  • Windows CE
  • Meşe palamudu / RISC OS
  • BeOS
  • Amiga
  • VMS/OpenVMS
  • QNX
  • VxWorks
  • Psion
  • Python ayrıca Java ve .NET sanal makinelerine de taşındı

Python Alma

En güncel ve güncel kaynak kodu, ikili dosyalar, belgeler, haberler vb. Python'un resmi web sitesinde mevcuttur. https://www.python.org/

Python belgelerini şuradan indirebilirsiniz: https://www.python.org/doc/. Belgeler HTML, PDF ve PostScript formatlarında mevcuttur.

Python'u Yükleme

Python dağıtımı çok çeşitli platformlar için mevcuttur. Yalnızca platformunuz için geçerli olan ikili kodu indirmeniz ve Python'u kurmanız gerekir.

Platformunuz için ikili kod mevcut değilse, kaynak kodunu manuel olarak derlemek için bir C derleyicisine ihtiyacınız vardır. Kaynak kodunu derlemek, kurulumunuzda ihtiyaç duyduğunuz özelliklerin seçimi açısından daha fazla esneklik sunar.

İşte Python'u çeşitli platformlara kurmaya hızlı bir bakış -

Unix ve Linux Kurulumu

Python'u Unix / Linux makinesine kurmanın basit adımları.

  • Bir Web tarayıcısı açın ve şuraya gidin: https://www.python.org/downloads/.

  • Unix / Linux için mevcut olan sıkıştırılmış kaynak kodunu indirmek için bağlantıyı takip edin.

  • Dosyaları indirin ve çıkarın.

  • Bazı seçenekleri özelleştirmek istiyorsanız Modüller / Kurulum dosyasını düzenleme .

  • ./configure komut dosyasını çalıştırın

  • make

  • kurmak yap

Bu, Python'u / usr / local / bin standart konumuna ve kitaplıklarını / usr / local / lib / pythonXX'e yükler ; burada XX, Python sürümüdür.

Windows Kurulumu

Python'u Windows makineye kurmanın adımları.

  • Bir Web tarayıcısı açın ve şuraya gidin: https://www.python.org/downloads/.

  • Windows yükleyici python-XYZ.msi dosyası için bağlantıyı izleyin; burada XYZ, yüklemeniz gereken sürümdür.

  • Bu yükleyiciyi kullanmak için python-XYZ.msi , Windows sisteminin Microsoft Installer 2.0'ı desteklemesi gerekir. Yükleyici dosyasını yerel makinenize kaydedin ve ardından makinenizin MSI'yı destekleyip desteklemediğini öğrenmek için çalıştırın.

  • İndirilen dosyayı çalıştırın. Bu, kullanımı gerçekten kolay olan Python kurulum sihirbazını getirir. Varsayılan ayarları kabul edin, kurulum bitene kadar bekleyin ve bitirdiniz.

Macintosh Kurulumu

Son Mac'ler Python yüklü olarak gelir, ancak birkaç yıl eski olabilir. Görmekhttp://www.python.org/download/mac/Mac'te geliştirmeyi desteklemek için ek araçlarla birlikte mevcut sürümü edinme talimatları için. Mac OS X 10.3'ten önceki eski Mac OS'ler için (2003'te piyasaya sürüldü), MacPython mevcuttur.

Jack Jansen bunu sürdürür ve tüm belgelere kendi web sitesinden tam erişebilirsiniz - http://www.cwi.nl/~jack/macpython.html. Mac OS kurulumu için eksiksiz kurulum ayrıntılarını bulabilirsiniz.

PATH kurulumu

Programlar ve diğer yürütülebilir dosyalar birçok dizinde olabilir, bu nedenle işletim sistemleri, işletim sisteminin yürütülebilir dosyaları aradığı dizinleri listeleyen bir arama yolu sağlar.

Yol, işletim sistemi tarafından tutulan adlandırılmış bir dize olan bir ortam değişkeninde saklanır. Bu değişken, komut kabuğunda ve diğer programlarda bulunan bilgileri içerir.

path değişken, Unix'te PATH veya Windows'ta Yol olarak adlandırılır (Unix büyük / küçük harfe duyarlıdır; Windows değildir).

Mac OS'de, yükleyici yol ayrıntılarını yönetir. Herhangi bir dizinden Python yorumlayıcısını çağırmak için, Python dizinini yolunuza eklemelisiniz.

Unix / Linux'ta yol belirleme

Python dizinini Unix'te belirli bir oturumun yoluna eklemek için -

  • In the csh shell - setenv PATH "$ PATH: / usr / local / bin / python" yazın ve Enter'a basın.

  • In the bash shell (Linux) - export PATH = "$ PATH: / usr / local / bin / python" yazın ve Enter'a basın.

  • In the sh or ksh shell - PATH = "$ PATH: / usr / local / bin / python" yazın ve Enter'a basın.

  • Note - / usr / local / bin / python, Python dizininin yoludur

Windows'ta yol belirleme

Python dizinini Windows'ta belirli bir oturumun yoluna eklemek için -

At the command prompt - yol% yol%; C: \ Python yazın ve Enter tuşuna basın.

Note - C: \ Python, Python dizininin yoludur

Python Ortam Değişkenleri

İşte Python tarafından tanınabilecek önemli ortam değişkenleri -

Sr.No. Değişken ve Açıklama
1

PYTHONPATH

PATH'e benzer bir role sahiptir. Bu değişken, Python yorumlayıcısına bir programa aktarılan modül dosyalarını nerede bulacağını söyler. Python kaynak kitaplık dizinini ve Python kaynak kodunu içeren dizinleri içermelidir. PYTHONPATH bazen Python yükleyicisi tarafından önceden ayarlanmıştır.

2

PYTHONSTARTUP

Python kaynak kodunu içeren bir başlatma dosyasının yolunu içerir. Yorumlayıcıyı her başlattığınızda yürütülür. Unix'te .pythonrc.py olarak adlandırılır ve yardımcı programları yükleyen veya PYTHONPATH'ı değiştiren komutlar içerir.

3

PYTHONCASEOK

Windows'ta Python'a bir import deyimindeki ilk büyük / küçük harfe duyarlı olmayan eşleşmeyi bulması talimatını vermek için kullanılır. Bu değişkeni etkinleştirmek için herhangi bir değere ayarlayın.

4

PYTHONHOME

Alternatif bir modül arama yoludur. Modül kitaplıklarını değiştirmeyi kolaylaştırmak için genellikle PYTHONSTARTUP veya PYTHONPATH dizinlerine gömülüdür.

Python çalıştırma

Python'u başlatmanın üç farklı yolu vardır -

Etkileşimli Tercüman

Python'u Unix, DOS veya size bir komut satırı yorumlayıcısı veya kabuk penceresi sağlayan başka bir sistemden başlatabilirsiniz.

Giriş python komut satırı.

Etkileşimli yorumlayıcıda hemen kodlamaya başlayın.

$python # Unix/Linux
or
python% # Unix/Linux
or
C:> python # Windows/DOS

İşte tüm mevcut komut satırı seçeneklerinin listesi -

Sr.No. Seçenek ve Açıklama
1

-d

Hata ayıklama çıktısı sağlar.

2

-O

Optimize edilmiş bayt kodu üretir (sonuç olarak .pyo dosyalarıyla sonuçlanır).

3

-S

Başlangıçta Python yollarını aramak için içe aktarma sitesini çalıştırmayın.

4

-v

ayrıntılı çıktı (ithalat deyimlerinde ayrıntılı izleme).

5

-X

sınıf tabanlı yerleşik istisnaları devre dışı bırakın (yalnızca dizeleri kullanın); 1.6 sürümünden itibaren kullanılmamaktadır.

6

-c cmd

cmd dizesi olarak gönderilen Python betiğini çalıştırın

7

file

verilen dosyadan Python betiğini çalıştır

Komut satırından komut dosyası

Bir Python betiği, aşağıdaki gibi uygulamanızda yorumlayıcıyı çalıştırarak komut satırında çalıştırılabilir -

$python script.py # Unix/Linux

or

python% script.py # Unix/Linux

or 

C: >python script.py # Windows/DOS

Note - Dosya izin modunun yürütmeye izin verdiğinden emin olun.

Entegre geliştirme ortamı

Sisteminizde Python'u destekleyen bir GUI uygulamanız varsa, Python'u bir Grafik Kullanıcı Arayüzü (GUI) ortamından da çalıştırabilirsiniz.

  • Unix - IDLE, Python için ilk Unix IDE'dir.

  • Windows - PythonWin, Python için ilk Windows arayüzüdür ve GUI'li bir IDE'dir.

  • Macintosh - IDLE IDE ile birlikte Python'un Macintosh sürümü ana web sitesinden edinilebilir, MacBinary veya BinHex dosyaları olarak indirilebilir.

Ortamı düzgün bir şekilde ayarlayamıyorsanız, sistem yöneticinizden yardım alabilirsiniz. Python ortamının doğru şekilde kurulduğundan ve mükemmel şekilde çalıştığından emin olun.

Note - Sonraki bölümlerde verilen tüm örnekler, Linux'un CentOS çeşidinde bulunan Python 2.4.3 sürümü ile yürütülmüştür.

Teori öğrenirken aynı anda mevcut tüm örnekleri çevrimiçi olarak yürütebilmeniz için çevrimiçi Python Programlama ortamını zaten kurduk. Herhangi bir örneği değiştirmekten ve çevrimiçi yürütmekten çekinmeyin.

Python dilinin Perl, C ve Java ile birçok benzerliği vardır. Bununla birlikte, diller arasında bazı kesin farklılıklar vardır.

İlk Python Programı

Programları farklı programlama modlarında çalıştıralım.

Etkileşimli Mod Programlama

Yorumlayıcıyı bir komut dosyası dosyasını parametre olarak iletmeden çağırmak aşağıdaki istemi getirir -

$ python
Python 2.4.3 (#1, Nov 11 2010, 13:34:43)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Python istemine aşağıdaki metni yazın ve Enter tuşuna basın -

>>> print "Hello, Python!"

Python'un yeni sürümünü çalıştırıyorsanız, o zaman parantezli print deyimini kullanmanız gerekir. print ("Hello, Python!");. Ancak Python 2.4.3 sürümünde, bu aşağıdaki sonucu verir -

Hello, Python!

Komut Dosyası Modu Programlama

Yorumlayıcının bir komut dosyası parametresiyle çağrılması, komut dosyasının yürütülmesine başlar ve komut dosyası bitene kadar devam eder. Komut dosyası bittiğinde, yorumlayıcı artık etkin değildir.

Bir betik içinde basit bir Python programı yazalım. Python dosyalarının uzantısı var.py. Aşağıdaki kaynak kodunu bir test.py dosyasına yazın -

print "Hello, Python!"

PATH değişkeninde Python yorumlayıcısının ayarlandığını varsayıyoruz. Şimdi, bu programı aşağıdaki gibi çalıştırmayı deneyin -

$ python test.py

Bu, aşağıdaki sonucu verir -

Hello, Python!

Bir Python betiğini yürütmenin başka bir yolunu deneyelim. İşte değiştirilmiş test.py dosyası -

#!/usr/bin/python

print "Hello, Python!"

/ Usr / bin dizininde Python yorumlayıcınız olduğunu varsayıyoruz. Şimdi, bu programı aşağıdaki gibi çalıştırmayı deneyin -

$ chmod +x test.py     # This is to make file executable
$./test.py

Bu, aşağıdaki sonucu verir -

Hello, Python!

Python Tanımlayıcıları

Bir Python tanımlayıcısı, bir değişkeni, işlevi, sınıfı, modülü veya başka bir nesneyi tanımlamak için kullanılan bir addır. Tanımlayıcı, A'dan Z'ye veya a'dan z'ye bir harfle veya alt çizgiyle (_) başlar ve ardından sıfır veya daha fazla harf, alt çizgi ve rakam (0'dan 9'a) gelir.

Python, tanımlayıcılar içinde @, $ ve% gibi noktalama karakterlerine izin vermez. Python, büyük / küçük harfe duyarlı bir programlama dilidir. Böylece,Manpower ve manpower Python'da iki farklı tanımlayıcıdır.

Python tanımlayıcıları için adlandırma kuralları şunlardır -

  • Sınıf adları büyük harfle başlar. Diğer tüm tanımlayıcılar küçük harfle başlar.

  • Bir tanımlayıcıya tek bir alt çizgi ile başlamak, tanımlayıcının özel olduğunu gösterir.

  • Önde gelen iki alt çizgi ile bir tanımlayıcı başlatmak, son derece özel bir tanımlayıcıyı gösterir.

  • Tanımlayıcı ayrıca iki sonda alt çizgiyle bitiyorsa, tanımlayıcı dil tanımlı özel bir addır.

Ayrılmış kelimeler

Aşağıdaki liste Python anahtar kelimelerini gösterir. Bunlar ayrılmış sözcüklerdir ve bunları sabit veya değişken veya başka herhangi bir tanımlayıcı ad olarak kullanamazsınız. Tüm Python anahtar kelimeleri yalnızca küçük harf içerir.

ve exec değil
iddia etmek en sonunda veya
kırmak için geçmek
sınıf itibaren Yazdır
devam et küresel yükseltmek
def Eğer dönüş
del ithalat Deneyin
elif içinde süre
Başka dır-dir ile
dışında lambda Yol ver

Çizgiler ve Girinti

Python, sınıf ve işlev tanımları veya akış denetimi için kod bloklarını belirtmek için parantez içermez. Kod blokları, katı bir şekilde uygulanan satır girintisi ile belirtilir.

Girintideki boşlukların sayısı değişkendir, ancak blok içindeki tüm ifadeler aynı miktarda girintilenmelidir. Örneğin -

if True:
   print "True"
else:
   print "False"

Ancak, aşağıdaki blok bir hata oluşturur -

if True:
print "Answer"
print "True"
else:
print "Answer"
print "False"

Böylece, Python'da aynı sayıda boşlukla girintili tüm sürekli çizgiler bir blok oluşturacaktır. Aşağıdaki örnekte çeşitli ifade blokları vardır -

Note- Bu noktada mantığı anlamaya çalışmayın. Ayraçsız olsalar bile çeşitli blokları anladığınızdan emin olun.

#!/usr/bin/python

import sys

try:
   # open file stream
   file = open(file_name, "w")
except IOError:
   print "There was an error writing to", file_name
   sys.exit()
print "Enter '", file_finish,
print "' When finished"
while file_text != file_finish:
   file_text = raw_input("Enter text: ")
   if file_text == file_finish:
      # close the file
      file.close
      break
   file.write(file_text)
   file.write("\n")
file.close()
file_name = raw_input("Enter filename: ")
if len(file_name) == 0:
   print "Next time please enter something"
   sys.exit()
try:
   file = open(file_name, "r")
except IOError:
   print "There was an error reading file"
   sys.exit()
file_text = file.read()
file.close()
print file_text

Çok Satırlı İfadeler

Python'daki ifadeler genellikle yeni bir satırla biter. Bununla birlikte Python, satırın devam etmesi gerektiğini belirtmek için satır devam karakterinin (\) kullanılmasına izin verir. Örneğin -

total = item_one + \
        item_two + \
        item_three

[], {} Veya () parantez içinde bulunan ifadelerin satır devam karakterini kullanmasına gerek yoktur. Örneğin -

days = ['Monday', 'Tuesday', 'Wednesday',
        'Thursday', 'Friday']

Python'da Alıntı

Python, aynı tip alıntı dizeyi başlatıp bitirdiği sürece dize değişmezlerini belirtmek için tek ('), çift (") ve üçlü (' '' veya" "") tırnak işaretlerini kabul eder.

Üçlü tırnaklar, dizeyi birden çok satıra yaymak için kullanılır. Örneğin, aşağıdakilerin tümü yasaldır -

word = 'word'
sentence = "This is a sentence."
paragraph = """This is a paragraph. It is
made up of multiple lines and sentences."""

Python'da Yorumlar

Bir dize değişmezi içinde olmayan bir karma işareti (#) bir açıklamaya başlar. # İşaretinden sonraki ve fiziksel satırın sonuna kadar olan tüm karakterler yorumun bir parçasıdır ve Python yorumlayıcısı bunları yok sayar.

#!/usr/bin/python

# First comment
print "Hello, Python!" # second comment

Bu, aşağıdaki sonucu verir -

Hello, Python!

Bir ifadeden veya ifadeden sonra aynı satıra bir yorum yazabilirsiniz -

name = "Madisetti" # This is again comment

Birden çok satırı aşağıdaki gibi yorumlayabilirsiniz -

# This is a comment.
# This is a comment, too.
# This is a comment, too.
# I said that already.

Boş Satırları Kullanma

Yalnızca beyaz boşluk içeren, muhtemelen bir yorum içeren bir satır boş satır olarak bilinir ve Python bunu tamamen yok sayar.

Etkileşimli bir tercüman oturumunda, çok satırlı bir ifadeyi sonlandırmak için boş bir fiziksel satır girmelisiniz.

Kullanıcıyı Bekliyorum

Programın aşağıdaki satırında komut istemi görüntülenir, "Çıkmak için enter tuşuna basın" ifadesi yer alır ve kullanıcının işlem yapmasını bekler -

#!/usr/bin/python

raw_input("\n\nPress the enter key to exit.")

Burada, gerçek satırı görüntülemeden önce iki yeni satır oluşturmak için "\ n \ n" kullanılır. Kullanıcı tuşa bastığında program sona erer. Bu, kullanıcı bir uygulamayla işini bitirene kadar konsol penceresini açık tutmak için güzel bir püf noktasıdır.

Tek Bir Satırda Birden Çok İfade

Noktalı virgül (;), hiçbir ifadenin yeni bir kod bloğu başlatmaması koşuluyla, tek satırda birden çok ifadeye izin verir. İşte noktalı virgül kullanan bir örnek alıntısı -

import sys; x = 'foo'; sys.stdout.write(x + '\n')

Paket Olarak Birden Çok İfade Grubu

Tek bir kod bloğu oluşturan bir grup bağımsız ifade denir suitesPython'da. İf, while, def ve class gibi bileşik veya karmaşık ifadeler bir başlık satırı ve bir paket gerektirir.

Başlık satırları ifadeye (anahtar sözcükle) başlar ve iki nokta üst üste (:) ile sonlanır ve ardından paketi oluşturan bir veya daha fazla satır gelir. Örneğin -

if expression : 
   suite
elif expression : 
   suite 
else : 
   suite

Komut Satırı Bağımsız Değişkenleri

Nasıl çalıştırılmaları gerektiği hakkında size bazı temel bilgiler sağlamak için birçok program çalıştırılabilir. Python bunu -h ile yapmanızı sağlar -

$ python -h
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-c cmd : program passed in as string (terminates option list)
-d     : debug output from parser (also PYTHONDEBUG=x)
-E     : ignore environment variables (such as PYTHONPATH)
-h     : print this help message and exit

[ etc. ]

Ayrıca betiğinizi çeşitli seçenekleri kabul etmesi için programlayabilirsiniz. Komut Satırı Bağımsız Değişkenleri gelişmiş bir konudur ve Python kavramlarının geri kalanından geçtikten sonra biraz sonra çalışılmalıdır.

Değişkenler, değerleri saklamak için ayrılmış bellek konumlarından başka bir şey değildir. Bu, bir değişken oluşturduğunuzda bellekte biraz yer ayırdığınız anlamına gelir.

Bir değişkenin veri türüne bağlı olarak, yorumlayıcı belleği ayırır ve ayrılmış bellekte nelerin saklanabileceğine karar verir. Bu nedenle, değişkenlere farklı veri türleri atayarak, bu değişkenlerde tamsayılar, ondalık sayılar veya karakterler saklayabilirsiniz.

Değişkenlere Değer Atama

Python değişkenlerinin bellek alanı ayırmak için açık bildirime ihtiyacı yoktur. Bir değişkene bir değer atadığınızda bildirim otomatik olarak gerçekleşir. Eşittir işareti (=) değişkenlere değer atamak için kullanılır.

= Operatörünün solundaki işlenen, değişkenin adıdır ve = operatörünün sağındaki işlenen, değişkende depolanan değerdir. Örneğin -

#!/usr/bin/python

counter = 100          # An integer assignment
miles   = 1000.0       # A floating point
name    = "John"       # A string

print counter
print miles
print name

Burada 100, 1000.0 ve "John" sırasıyla counter , miles ve name değişkenlerine atanan değerlerdir . Bu, aşağıdaki sonucu verir -

100
1000.0
John

Çoklu Atama

Python, aynı anda birkaç değişkene tek bir değer atamanıza izin verir. Örneğin -

a = b = c = 1

Burada, 1 değeriyle bir tamsayı nesnesi oluşturulur ve üç değişkenin tümü aynı bellek konumuna atanır. Ayrıca birden çok değişkene birden çok nesne atayabilirsiniz. Örneğin -

a,b,c = 1,2,"john"

Burada, 1 ve 2 değerlerine sahip iki tamsayı nesnesi sırasıyla a ve b değişkenlerine atanır ve "john" değerine sahip bir dize nesnesi c değişkenine atanır.

Standart Veri Türleri

Hafızada saklanan veriler birçok türde olabilir. Örneğin, bir kişinin yaşı sayısal bir değer olarak ve adresi alfanümerik karakterler olarak saklanır. Python, üzerlerinde olası işlemleri ve her biri için depolama yöntemini tanımlamak için kullanılan çeşitli standart veri türlerine sahiptir.

Python'da beş standart veri türü vardır -

  • Numbers
  • String
  • List
  • Tuple
  • Dictionary

Python Numaraları

Sayı veri türleri sayısal değerleri depolar. Sayı nesneleri, onlara bir değer atadığınızda oluşturulur. Örneğin -

var1 = 1
var2 = 10

Del deyimini kullanarak bir sayı nesnesine yapılan başvuruyu da silebilirsiniz. Del ifadesinin sözdizimi -

del var1[,var2[,var3[....,varN]]]]

Del ifadesini kullanarak tek bir nesneyi veya birden çok nesneyi silebilirsiniz. Örneğin -

del var
del var_a, var_b

Python dört farklı sayısal türü destekler -

  • int (işaretli tamsayılar)
  • long (uzun tamsayılar, sekizlik ve onaltılık olarak da gösterilebilirler)
  • float (kayan nokta gerçek değerleri)
  • karmaşık (karmaşık sayılar)

Örnekler

İşte bazı sayı örnekleri -

int uzun yüzen karmaşık
10 51924361L 0.0 3.14j
100 -0x19323L 15.20 45.j
-786 0122L -21.9 9.322e-36j
080 0xDEFABCECBDAECBFBAEl 32.3 + e18 .876j
-0490 535633629843L -90. -.6545 + 0J
-0x260 -052318172735L -32.54e100 3e + 26J
0x69 -4721885298529L 70.2-E12 4.53e-7j
  • Python, long ile küçük l harfini kullanmanıza izin verir, ancak 1 rakamıyla karışıklığı önlemek için yalnızca büyük L harfini kullanmanız önerilir. Python, uzun tamsayıları büyük L harfiyle görüntüler.

  • Karmaşık bir sayı, x + yj ile gösterilen sıralı bir gerçek kayan noktalı sayı çiftinden oluşur; burada x ve y gerçek sayılardır ve j hayali birimdir.

Python Dizeleri

Python'daki dizeler, tırnak işaretleri içinde gösterilen bitişik bir karakter kümesi olarak tanımlanır. Python, tek veya çift tırnak çiftlerine izin verir. Dizelerin alt kümeleri, dizinin başlangıcında 0'dan başlayan ve sonunda -1'den başlayan dizinler ile dilim operatörü ([] ve [:]) kullanılarak alınabilir.

Artı (+) işareti, dize birleştirme operatörü ve yıldız işareti (*), tekrar operatörüdür. Örneğin -

#!/usr/bin/python

str = 'Hello World!'

print str          # Prints complete string
print str[0]       # Prints first character of the string
print str[2:5]     # Prints characters starting from 3rd to 5th
print str[2:]      # Prints string starting from 3rd character
print str * 2      # Prints string two times
print str + "TEST" # Prints concatenated string

Bu, aşağıdaki sonucu verecektir -

Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST

Python Listeleri

Listeler, Python'un bileşik veri türlerinin en çok yönlü olanıdır. Bir liste, virgülle ayrılmış ve köşeli parantez ([]) içine alınmış öğeler içerir. Listeler bir dereceye kadar C'deki dizilere benzer. Aralarındaki bir fark, bir listeye ait tüm öğelerin farklı veri türünde olabilmesidir.

Bir listede saklanan değerlere, listenin başında 0'dan başlayan dizinler ile dilim operatörü ([] ve [:]) kullanılarak ve -1'in sonuna kadar kendi yollarına çalışılarak erişilebilir. Artı (+) işareti liste birleştirme operatörüdür ve yıldız işareti (*) tekrar operatörüdür. Örneğin -

#!/usr/bin/python

list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']

print list          # Prints complete list
print list[0]       # Prints first element of the list
print list[1:3]     # Prints elements starting from 2nd till 3rd 
print list[2:]      # Prints elements starting from 3rd element
print tinylist * 2  # Prints list two times
print list + tinylist # Prints concatenated lists

Bu, aşağıdaki sonucu verir -

['abcd', 786, 2.23, 'john', 70.2]
abcd
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.2, 123, 'john']

Python Tuples

Tuple, listeye benzer başka bir dizi veri türüdür. Bir demet, virgülle ayrılan birkaç değerden oluşur. Listelerden farklı olarak, kayıtlar parantez içine alınır.

Listeler ve demetler arasındaki temel farklar şunlardır: Listeler köşeli parantezler ([]) içine alınır ve öğeleri ve boyutları değiştirilebilirken, başlıklar parantez (()) içine alınır ve güncellenemez. Tuples şu şekilde düşünülebilir:read-onlylisteler. Örneğin -

#!/usr/bin/python

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
tinytuple = (123, 'john')

print tuple               # Prints the complete tuple
print tuple[0]            # Prints first element of the tuple
print tuple[1:3]          # Prints elements of the tuple starting from 2nd till 3rd 
print tuple[2:]           # Prints elements of the tuple starting from 3rd element
print tinytuple * 2       # Prints the contents of the tuple twice
print tuple + tinytuple   # Prints concatenated tuples

Bu, aşağıdaki sonucu verir -

('abcd', 786, 2.23, 'john', 70.2)
abcd
(786, 2.23)
(2.23, 'john', 70.2)
(123, 'john', 123, 'john')
('abcd', 786, 2.23, 'john', 70.2, 123, 'john')

Aşağıdaki kod, tuple ile geçersiz, çünkü izin verilmeyen bir demeti güncellemeye çalıştık. Listelerde de benzer durum mümkündür -

#!/usr/bin/python

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
list = [ 'abcd', 786 , 2.23, 'john', 70.2  ]
tuple[2] = 1000    # Invalid syntax with tuple
list[2] = 1000     # Valid syntax with list

Python Sözlüğü

Python'un sözlükleri bir tür karma tablo türüdür. Perl'de bulunan ilişkilendirilebilir diziler veya karmalar gibi çalışırlar ve anahtar-değer çiftlerinden oluşurlar. Sözlük anahtarı hemen hemen her Python türü olabilir, ancak genellikle sayılar veya dizelerdir. Öte yandan değerler, rastgele herhangi bir Python nesnesi olabilir.

Sözlükler küme parantezleri ({}) içine alınır ve değerler, köşeli parantezler ([]) kullanılarak atanabilir ve erişilebilir. Örneğin -

#!/usr/bin/python

dict = {}
dict['one'] = "This is one"
dict[2]     = "This is two"

tinydict = {'name': 'john','code':6734, 'dept': 'sales'}


print dict['one']       # Prints value for 'one' key
print dict[2]           # Prints value for 2 key
print tinydict          # Prints complete dictionary
print tinydict.keys()   # Prints all the keys
print tinydict.values() # Prints all the values

Bu, aşağıdaki sonucu verir -

This is one
This is two
{'dept': 'sales', 'code': 6734, 'name': 'john'}
['dept', 'code', 'name']
['sales', 6734, 'john']

Sözlüklerin öğeler arasında düzen kavramı yoktur. Elemanların "sıra dışı" olduğunu söylemek yanlıştır; onlar sırasızdır.

Veri Türü Dönüşümü

Bazen yerleşik türler arasında dönüştürme yapmanız gerekebilir. Türler arasında dönüştürme yapmak için, tür adını işlev olarak kullanmanız yeterlidir.

Bir veri türünden diğerine dönüştürme gerçekleştirmek için birçok yerleşik işlev vardır. Bu işlevler, dönüştürülen değeri temsil eden yeni bir nesne döndürür.

Sr.No. İşlev ve Açıklama
1

int(x [,base])

X'i bir tam sayıya dönüştürür. base, x bir dizge ise tabanı belirtir.

2

long(x [,base] )

X'i uzun bir tam sayıya dönüştürür. base, x bir dizge ise tabanı belirtir.

3

float(x)

X'i kayan noktalı sayıya dönüştürür.

4

complex(real [,imag])

Karmaşık bir sayı oluşturur.

5

str(x)

X nesnesini bir dizgi gösterimine dönüştürür.

6

repr(x)

X nesnesini bir ifade dizesine dönüştürür.

7

eval(str)

Bir dizeyi değerlendirir ve bir nesne döndürür.

8

tuple(s)

S'yi bir demete dönüştürür.

9

list(s)

S'yi bir listeye dönüştürür.

10

set(s)

S'yi bir kümeye dönüştürür.

11

dict(d)

Bir sözlük oluşturur. d bir (anahtar, değer) tuple dizisi olmalıdır.

12

frozenset(s)

S'yi donmuş bir kümeye dönüştürür.

13

chr(x)

Bir tamsayıyı bir karaktere dönüştürür.

14

unichr(x)

Bir tamsayıyı Unicode karakterine dönüştürür.

15

ord(x)

Tek bir karakteri tam sayı değerine dönüştürür.

16

hex(x)

Bir tamsayıyı onaltılık bir dizeye dönüştürür.

17

oct(x)

Bir tamsayıyı sekizlik bir dizeye dönüştürür.

Operatörler, işlenenlerin değerini değiştirebilen yapılardır.

4 + 5 = 9 ifadesini düşünün. Burada 4 ve 5 operand olarak adlandırılır ve + operatör olarak adlandırılır.

Operatör Türleri

Python dili aşağıdaki operatör türlerini destekler.

  • Aritmetik operatörler
  • Karşılaştırma (İlişkisel) Operatörleri
  • Atama Operatörleri
  • Mantıksal operatörler
  • Bitsel Operatörler
  • Üyelik Operatörleri
  • Kimlik Operatörleri

Tüm operatörlere tek tek göz atalım.

Python Aritmetik Operatörleri

A değişkeninin 10 ve b değişkeninin 20 olduğunu varsayın, o zaman -

[ Örneği Göster ]

Şebeke Açıklama Misal
+ Toplama İşlecin her iki tarafına da değerler ekler. a + b = 30
- Çıkarma Sağ el işleneni sol el işlenenden çıkarır. a - b = -10
* Çarpma işlemi İşlecin her iki tarafındaki değerleri çarpar a * b = 200
/ Bölünme Sol el işleneni sağ el işlenene böler b / a = 2
% Modül Sol el işleneni sağ el işlenene böler ve kalanı döndürür b% a = 0
** Üs Operatörlerde üstel (güç) hesaplama gerçekleştirir a ** b = 10 üzeri 20
// Kat Bölümü - Sonucun, ondalık virgülden sonraki rakamların kaldırıldığı bölüm olduğu, işlenenlerin bölümü. Ancak işlenenlerden biri negatifse, sonuç tabanlanır, yani sıfırdan uzağa yuvarlanır (negatif sonsuza doğru) - 9 // 2 = 4 ve 9.0 // 2.0 = 4.0, -11 // 3 = -4, -11.0 // 3 = -4.0

Python Karşılaştırma Operatörleri

Bu operatörler her iki taraftaki değerleri karşılaştırır ve aralarındaki ilişkiye karar verir. Bunlara İlişkisel operatörler de denir.

A değişkeninin 10 ve b değişkeninin 20 olduğunu varsayın, o zaman -

[ Örneği Göster ]

Şebeke Açıklama Misal
== İki işlenenin değerleri eşitse, koşul doğru olur. (a == b) doğru değil.
! = İki işlenenin değerleri eşit değilse, koşul doğru olur. (a! = b) doğrudur.
<> İki işlenenin değerleri eşit değilse, koşul doğru olur. (a <> b) doğrudur. Bu,! = Operatörüne benzer.
> Sol işlenenin değeri sağ işlenenin değerinden büyükse, koşul doğru olur. (a> b) doğru değil.
< Sol işlenenin değeri sağ işlenenin değerinden küçükse, koşul doğru olur. (a <b) doğrudur.
> = Sol işlenenin değeri, sağ işlenenin değerinden büyük veya ona eşitse, koşul doğru olur. (a> = b) doğru değil.
<= Sol işlenenin değeri sağ işlenenin değerinden küçük veya ona eşitse, koşul doğru olur. (a <= b) doğrudur.

Python Atama Operatörleri

A değişkeninin 10 ve b değişkeninin 20 olduğunu varsayın, o zaman -

[ Örneği Göster ]

Şebeke Açıklama Misal
= Sağ taraftaki işlenenlerden sol taraftaki işlenene değer atar c = a + b, a + b'nin değerini c'ye atar
+ = VE Ekle Sol operanda sağ operandı ekler ve sonucu sol operanda atar c + = a eşdeğerdir c = c + a
- = Çıkar VE Sağ operandı sol operanddan çıkarır ve sonucu sol operanda atar c - = a eşdeğerdir c = c - a
* = Çarp VE Sağ operandı sol operandla çarpar ve sonucu sol operanda atar c * = a, c = c * a'ya eşdeğerdir
/ = Böl VE Sol operandı sağ operandla böler ve sonucu sol operanda atar c / = a, c = c / a'ya eşdeğerdir
% = Modül VE İki işlenen kullanarak modülü alır ve sonucu sol işlenenlere atar c% = a eşdeğerdir c = c% a
** = Üs VE Operatörlerde üstel (güç) hesaplama gerçekleştirir ve sol işlenene değer atar c ** = a eşdeğerdir c = c ** a
// = Kat Bölümü Operatörlerde kat bölme yapar ve sol operanda değer atar c // = a eşdeğerdir c = c // a

Python Bitsel Operatörleri

Bitsel operatör bitler üzerinde çalışır ve bit işlem gerçekleştirir. Varsayalım ki a = 60; ve b = 13; Şimdi ikili formatta değerleri sırasıyla 0011 1100 ve 0000 1101 olacaktır. Aşağıdaki tablo, Python dili tarafından desteklenen bitsel operatörleri bunlarda birer örnekle listeliyor, yukarıdaki iki değişkeni (a ve b) işlenenler olarak kullanıyoruz -

a = 0011 1100

b = 0000 1101

-----------------

a & b = 0000 1100

a | b = 0011 1101

a ^ b = 0011 0001

~ a = 1100 0011

Python dili tarafından desteklenen aşağıdaki Bitwise operatörleri vardır

[ Örneği Göster ]

Şebeke Açıklama Misal
& Binary AND Operatör, her iki işlenende de varsa sonuca bir bit kopyalar (a & b) (0000 1100 anlamına gelir)
| İkili VEYA Her iki işlenende varsa biraz kopyalar. (a | b) = 61 (0011 1101 anlamına gelir)
^ İkili XOR Bir operanda ayarlanmışsa, ancak her ikisinde birden değilse biti kopyalar. (a ^ b) = 49 (0011 0001 anlamına gelir)
~ İkili Birler Tamamlayıcı Tekli ve bitleri 'çevirme' etkisine sahiptir. (~ a) = -61 (işaretli bir ikili sayı nedeniyle 2'nin tamamlayıcı formunda 1100 0011 anlamına gelir.
<< İkili Sol Kaydırma Soldaki işlenenler değeri, sağ işlenen tarafından belirtilen bit sayısı kadar sola taşınır. a << 2 = 240 (1111 0000 anlamına gelir)
>> İkili Sağa Kaydırma Soldaki işlenenler değeri, sağ işlenen tarafından belirtilen bit sayısı kadar sağa taşınır. a >> 2 = 15 (0000 1111 anlamına gelir)

Python Mantıksal Operatörleri

Python dili tarafından desteklenen aşağıdaki mantıksal operatörler vardır. A değişkeninin 10 ve b değişkeninin 20 olduğunu varsayalım

[ Örneği Göster ]

Şebeke Açıklama Misal
ve Mantıksal AND Her iki işlenen de doğruysa koşul doğru olur. (a ve b) doğrudur.
veya Mantıksal VEYA İki işlenenden herhangi biri sıfır değilse, koşul doğru olur. (a veya b) doğrudur.
Mantıksal Değil DEĞİL İşlenenin mantıksal durumunu tersine çevirmek için kullanılır. Değil (a ve b) yanlıştır.

Python Üyelik Operatörleri

Python'un üyelik operatörleri dizeler, listeler veya tuple'lar gibi bir sıradaki üyeliği test eder. Aşağıda açıklandığı gibi iki üyelik operatörü vardır -

[ Örneği Göster ]

Şebeke Açıklama Misal
içinde Belirtilen dizide bir değişken bulursa doğru, aksi takdirde yanlış olarak değerlendirilir. x in y, burada x, y sekansının bir üyesi ise 1 ile sonuçlanır.
değil Belirtilen sırada bir değişken bulamazsa doğru, aksi takdirde yanlış olarak değerlendirilir. x, y'de değildir, burada x, y dizisinin bir üyesi değilse, 1 ile sonuçlanmaz.

Python Kimlik Operatörleri

Kimlik operatörleri, iki nesnenin bellek konumlarını karşılaştırır. Aşağıda açıklanan iki Kimlik operatörü vardır -

[ Örneği Göster ]

Şebeke Açıklama Misal
dır-dir Operatörün her iki tarafındaki değişkenler aynı nesneyi gösteriyorsa doğru, aksi takdirde yanlış olarak değerlendirilir. x y, burada is id (x), id (y) 'ye eşitse 1 ile sonuçlanır.
değil Operatörün her iki tarafındaki değişkenler aynı nesneyi gösteriyorsa yanlış olarak değerlendirilir ve aksi halde doğrudur. x y değil, burada is not id (x), id (y) 'ye eşit değilse 1 ile sonuçlanır.

Python Operatörlerinin Önceliği

Aşağıdaki tablo en yüksek öncelikten en düşüğe doğru tüm operatörleri listeler.

[ Örneği Göster ]

Sr.No. Operatör ve Açıklama
1

**

Üs alma (kuvvete yükseltme)

2

~ + -

Tamamlayıcı, tekli artı ve eksi (son ikisi için yöntem adları + @ ve - @ şeklindedir)

3

* / % //

Çarp, böl, modülo ve kat bölme

4

+ -

Toplama ve çıkarma

5

>> <<

Sağa ve sola bitsel kaydırma

6

&

Bitsel "VE"

7

^ |

Bit düzeyinde özel "VEYA" ve normal "VEYA"

8

<= < > >=

Karşılaştırma operatörleri

9

<> == !=

Eşitlik operatörleri

10

= %= /= //= -= += *= **=

Atama operatörleri

11

is is not

Kimlik operatörleri

12

in not in

Üyelik operatörleri

13

not or and

Mantıksal operatörler

Karar verme, programın yürütülmesi sırasında ortaya çıkan koşulların öngörülmesi ve koşullara göre alınan eylemlerin belirtilmesidir.

Karar yapıları, sonuç olarak DOĞRU veya YANLIŞ üreten birden çok ifadeyi değerlendirir. Sonuç DOĞRU veya YANLIŞ ise, hangi eylemi gerçekleştireceğinizi ve hangi ifadeleri yürüteceğinizi belirlemeniz gerekir.

Aşağıda, programlama dillerinin çoğunda bulunan tipik bir karar verme yapısının genel biçimi verilmiştir -

Python programlama dili herhangi bir non-zero ve non-null DOĞRU olarak değerler ve eğer biri ise zero veya null, daha sonra YANLIŞ değer olarak kabul edilir.

Python programlama dili aşağıdaki türden karar verme ifadeleri sağlar. Ayrıntılarını kontrol etmek için aşağıdaki bağlantıları tıklayın.

Sr.No. Açıklama ve Açıklama
1 if ifadeleri

Bir if statement bir boole ifadesinin ardından bir veya daha fazla ifadeden oluşur.

2 if ... else ifadeleri

Bir if statement ardından isteğe bağlı bir else statement, boole ifadesi FALSE olduğunda çalıştırılır.

3 yuvalanmış if ifadeleri

Birini kullanabilirsin if veya else if bir başkasının içinde ifade if veya else if beyan (lar).

Her bir karar alma sürecini kısaca gözden geçirelim -

Single Statement Suites

Süiti bir if cümle yalnızca tek bir satırdan oluşur, başlık ifadesiyle aynı satıra gidebilir.

İşte bir örnek one-line if fıkra -

#!/usr/bin/python

var = 100
if ( var == 100 ) : print "Value of expression is 100"
print "Good bye!"

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Value of expression is 100
Good bye!

Genel olarak, ifadeler sıralı olarak yürütülür: Bir fonksiyondaki ilk ifade önce çalıştırılır, ardından ikincisi vb. Bir kod bloğunu birkaç kez çalıştırmanız gereken bir durum olabilir.

Programlama dilleri, daha karmaşık yürütme yollarına izin veren çeşitli kontrol yapıları sağlar.

Bir döngü deyimi, bir deyimi veya deyim grubunu birden çok kez yürütmemizi sağlar. Aşağıdaki diyagram bir döngü ifadesini göstermektedir -

Python programlama dili, döngü gereksinimlerini karşılamak için aşağıdaki döngü türlerini sağlar.

Sr.No. Döngü Tipi ve Açıklaması
1 döngü sırasında

Belirli bir koşul DOĞRU iken bir ifadeyi veya ifade grubunu tekrarlar. Döngü gövdesini çalıştırmadan önce koşulu test eder.

2 döngü için

Bir dizi ifadeyi birden çok kez yürütür ve döngü değişkenini yöneten kodu kısaltır.

3 İç içe geçmiş döngüler

Döngü while, for veya do.. while döngüsü içinde bir veya daha fazla döngü kullanabilirsiniz.

Döngü Kontrol İfadeleri

Döngü kontrol ifadeleri, yürütmeyi normal sırasından değiştirir. Yürütme bir kapsam bıraktığında, bu kapsamda oluşturulan tüm otomatik nesneler yok edilir.

Python aşağıdaki kontrol ifadelerini destekler. Ayrıntılarını kontrol etmek için aşağıdaki bağlantıları tıklayın.

Kısaca döngü kontrol ifadelerinden geçelim

Sr.No. Kontrol İfadesi ve Açıklama
1 break ifadesi

Döngü deyimini sonlandırır ve yürütmeyi döngüden hemen sonra deyime aktarır.

2 devam ifadesi

Döngünün vücudunun geri kalanını atlamasına ve yinelemeden önce durumunu hemen yeniden test etmesine neden olur.

3 beyanı geçmek

Python'daki pass deyimi, bir ifade sözdizimsel olarak gerekli olduğunda, ancak herhangi bir komutun veya kodun çalıştırılmasını istemediğinizde kullanılır.

Sayı veri türleri sayısal değerleri depolar. Değişmez veri türleridir, bir sayı veri türünün değerini değiştirmenin yeni tahsis edilmiş bir nesneye yol açması anlamına gelir.

Sayı nesneleri, onlara bir değer atadığınızda oluşturulur. Örneğin -

var1 = 1
var2 = 10

Ayrıca, bir sayı nesnesine olan başvuruyu, delBeyan. Del ifadesinin sözdizimi -

del var1[,var2[,var3[....,varN]]]]

Tek bir nesneyi veya birden çok nesneyi silebilirsiniz. delBeyan. Örneğin -

del var
del var_a, var_b

Python dört farklı sayısal türü destekler -

  • int (signed integers) - Genellikle tamsayı veya tamsayı olarak adlandırılırlar, ondalık nokta içermeyen pozitif veya negatif tam sayılardır.

  • long (long integers ) - Uzunlar olarak da adlandırılırlar, sınırsız boyutlu tam sayılardır, tamsayılar gibi yazılır ve ardından büyük veya küçük L harfi gelir.

  • float (floating point real values)- Float olarak da adlandırılırlar, gerçek sayıları temsil ederler ve tam sayı ile kesirli kısımları bölen bir ondalık nokta ile yazılırlar. Kayanlar ayrıca bilimsel gösterimde de olabilir, E veya e 10'un gücünü gösterir (2,5e2 = 2,5 x 10 2 = 250).

  • complex (complex numbers)- a + bJ biçimindedir, burada a ve b yüzerdir ve J (veya j) -1'in karekökünü temsil eder (bu hayali bir sayıdır). Sayının gerçek kısmı a ve hayali kısmı b'dir. Python programlamada karmaşık sayılar pek kullanılmaz.

Örnekler

İşte bazı sayı örnekleri

int uzun yüzen karmaşık
10 51924361L 0.0 3.14j
100 -0x19323L 15.20 45.j
-786 0122L -21.9 9.322e-36j
080 0xDEFABCECBDAECBFBAEL 32.3 + e18 .876j
-0490 535633629843L -90. -.6545 + 0J
-0x260 -052318172735L -32.54e100 3e + 26J
0x69 -4721885298529L 70.2-E12 4.53e-7j
  • Python, long ile küçük L harfini kullanmanıza izin verir, ancak 1 rakamıyla karışıklığı önlemek için yalnızca büyük L harfini kullanmanız önerilir. Python, uzun tamsayıları büyük L harfiyle görüntüler.

  • Karmaşık sayı, a + bj ile gösterilen sıralı bir gerçek kayan noktalı sayı çiftinden oluşur; burada a gerçek bölümü ve b, karmaşık sayının sanal bölümüdür.

Sayı Tipi Dönüşümü

Python, karışık türler içeren bir ifadede sayıları değerlendirme için ortak bir türe dönüştürür. Ancak bazen, bir operatörün veya işlev parametresinin gereksinimlerini karşılamak için bir sayıyı açıkça bir türden diğerine zorlamanız gerekir.

  • Tür int(x) x'i düz bir tam sayıya dönüştürmek için.

  • Tür long(x) x'i uzun bir tam sayıya dönüştürmek için.

  • Tür float(x) x'i kayan noktalı sayıya dönüştürmek için.

  • Tür complex(x) x'i gerçek x bölümü ve sanal bölümü sıfır olan karmaşık bir sayıya dönüştürmek için.

  • Tür complex(x, y)x ve y'yi gerçek x bölümü ve hayali y bölümü olan karmaşık bir sayıya dönüştürmek için. x ve y sayısal ifadelerdir

Matematiksel Fonksiyonlar

Python, matematiksel hesaplamalar yapan aşağıdaki işlevleri içerir.

Sr.No. İşlev ve İadeler (açıklama)
1 abs (x)

X'in mutlak değeri: x ile sıfır arasındaki (pozitif) mesafe.

2 tavan (x)

X'in tavanı: x'ten küçük olmayan en küçük tam sayı

3 cmp (x, y)

-1 ise x <y, 0 ise x == y veya 1 ise x> y

4 exp (x)

X: e x'in üstel değeri

5 fabrikalar (x)

X'in mutlak değeri.

6 kat (x)

X'in tabanı: x'ten büyük olmayan en büyük tam sayı

7 günlük (x)

X> 0 için x'in doğal logaritması

8 log10 (x)

X> 0 için x'in 10 tabanlı logaritması.

9 maks (x1, x2, ...)

Argümanlarının en büyüğü: pozitif sonsuza en yakın değer

10 min (x1, x2, ...)

Argümanlarının en küçüğü: negatif sonsuza en yakın değer

11 modf (x)

İki öğeli bir dizide x'in kesirli ve tam sayı kısımları. Her iki parça da x ile aynı işarete sahiptir. Tam sayı bölümü bir kayan nokta olarak döndürülür.

12 pow (x, y)

X ** y'nin değeri.

13 yuvarlak (x [, n])

xondalık noktadan itibaren n basamağa yuvarlanır. Python, bir bağ kırıcı olarak sıfırdan uzaklaşır: yuvarlak (0,5) 1,0'dır ve (-0,5) ise -1,0'dır.

14 sqrt (x)

X> 0 için x'in kare kökü

Rastgele Sayı Fonksiyonları

Rastgele sayılar oyunlar, simülasyonlar, testler, güvenlik ve gizlilik uygulamaları için kullanılır. Python, yaygın olarak kullanılan aşağıdaki işlevleri içerir.

Sr.No. İşlev ve Açıklama
1 seçim (seq)

Listeden, demetten veya dizeden rastgele bir öğe.

2 randrange ([başlat,] durdur [, adım])

Aralıktan rastgele seçilen bir öğe (başlama, durdurma, adım)

3 rastgele ()

0'ın r'den küçük veya ona eşit ve r'nin 1'den küçük olması gibi rastgele bir float r

4 tohum ([x])

Rastgele sayılar oluşturmada kullanılan tamsayı başlangıç ​​değerini ayarlar. Başka herhangi bir rastgele modül işlevini çağırmadan önce bu işlevi çağırın. Yok döndürür.

5 karıştır (lst)

Bir listenin öğelerini yerinde rastgele seçer. Yok döndürür.

6 üniforma (x, y)

Rastgele bir float r, öyle ki x, r'den küçük veya eşittir ve r, y'den küçüktür.

Trigonometrik fonksiyonlar

Python, trigonometrik hesaplamalar yapan aşağıdaki işlevleri içerir.

Sr.No. İşlev ve Açıklama
1 acos (x)

Radyan cinsinden x'in yay kosinüsünü döndür.

2 asin (x)

Radyan cinsinden x'in yay sinüsünü döndür.

3 atan (x)

X'in yay tanjantını radyan cinsinden döndürün.

4 atan2 (y, x)

Radyan cinsinden atan (y / x) değerini döndürün.

5 çünkü (x)

X radyan'ın kosinüsünü döndür.

6 hipot (x, y)

Öklid normunu döndür, sqrt (x * x + y * y).

7 günah (x)

X radyan sinüsünü döndür.

8 tan (x)

X radyan tanjantını döndür.

9 derece (x)

X açısını radyandan dereceye çevirir.

10 radyan (x)

X açısını dereceden radyana dönüştürür.

Matematiksel Sabitler

Modül ayrıca iki matematik sabiti tanımlar -

Sr.No. Sabitler ve Açıklama
1

pi

Matematiksel sabit pi.

2

e

Matematiksel sabit e.

Dizeler, Python'daki en popüler türler arasındadır. Karakterleri tırnak içine alarak oluşturabiliriz. Python, tek tırnakları çift tırnaklarla aynı şekilde ele alır. Dizeler oluşturmak, bir değişkene değer atamak kadar basittir. Örneğin -

var1 = 'Hello World!'
var2 = "Python Programming"

Dizelerdeki Değerlere Erişim

Python bir karakter türünü desteklemez; bunlar bir uzunluktaki dizeler olarak ele alınır, dolayısıyla bir alt dize olarak kabul edilir.

Alt dizelere erişmek için, alt dizenizi elde etmek üzere dizin veya dizinlerle birlikte dilimleme için köşeli parantezleri kullanın. Örneğin -

#!/usr/bin/python

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

var1[0]:  H
var2[1:5]:  ytho

Dizeleri Güncelleme

Bir değişkeni başka bir dizeye (yeniden) atayarak mevcut bir dizgeyi "güncelleyebilirsiniz". Yeni değer, önceki değeriyle veya tamamen farklı bir dizeyle ilişkilendirilebilir. Örneğin -

#!/usr/bin/python

var1 = 'Hello World!'
print "Updated String :- ", var1[:6] + 'Python'

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Updated String :-  Hello Python

Kaçış Karakterleri

Aşağıdaki tablo, ters eğik çizgi gösterimi ile gösterilebilecek bir kaçış veya yazdırılamayan karakterlerin listesidir.

Bir kaçış karakteri yorumlanır; tek tırnaklı ve çift tırnaklı dizelerde.

Ters eğik çizgi gösterimi Onaltılık karakter Açıklama
\ a 0x07 Zil veya uyarı
\ b 0x08 Geri tuşu
\ cx   Ctrl-x
\ Cx   Ctrl-x
\ e 0x1b Kaçış
\ f 0x0c Form besleme
\ M- \ Cx   Meta-Control-x
\ n 0x0a Yeni hat
\ nnn   Sekizli gösterim, burada n 0.7 aralığında
\ r 0x0d Satırbaşı
\ s 0x20 Uzay
\ t 0x09 Sekme
\ v 0x0b Dikey sekme
\ x   Karakter x
\ xnn   Onaltılık gösterim, burada n 0.9, af veya AF aralığındadır

String Özel Operatörleri

Dize değişkenini varsayalım a 'Merhaba' ve değişken tutar b 'Python' tutar, sonra -

Şebeke Açıklama Misal
+ Birleştirme - İşlecin her iki tarafına da değerler ekler a + b, HelloPython verir
* Tekrar - Aynı dizenin birden çok kopyasını birleştirerek yeni dizeler oluşturur a * 2 verir -MerhabaMerhaba
[] Dilim - Verilen dizindeki karakteri verir a [1] e verecektir
[:] Aralık Slice - Verilen aralıktaki karakterleri verir a [1: 4] ell verir
içinde Üyelik - Verilen dizede bir karakter varsa doğru döndürür H in a verecek 1
değil Üyelik - Verilen dizede bir karakter yoksa doğru döndürür M değil 1 verir
r / R Raw String - Escape karakterlerinin gerçek anlamını bastırır. Ham dizelerin sözdizimi, tırnak işaretlerinden önce gelen ham dize operatörü olan "r" harfi dışında, normal dizelerle tamamen aynıdır. "R" küçük harf (r) veya büyük harf (R) olabilir ve ilk tırnak işaretinin hemen önüne yerleştirilmelidir. r '\ n' yazdırır \ n ve R '\ n' baskıları yazdırın \ n
% Biçim - Dize biçimlendirmesini gerçekleştirir Sonraki bölüme bakın

Dize Biçimlendirme Operatörü

Python'un en harika özelliklerinden biri,% dize biçim operatörüdür. Bu operatör dizelere özgüdür ve C'nin printf () ailesinden işlevlere sahip olma paketini oluşturur. Aşağıdaki basit bir örnektir -

#!/usr/bin/python

print "My name is %s and weight is %d kg!" % ('Zara', 21)

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

My name is Zara and weight is 21 kg!

% İle birlikte kullanılabilecek tüm sembollerin listesi aşağıdadır -

Biçim Sembolü Dönüştürmek
% c karakter
% s biçimlendirmeden önce str () aracılığıyla dize dönüştürme
%ben işaretli ondalık tamsayı
% d işaretli ondalık tamsayı
% u işaretsiz ondalık tamsayı
sekizlik tam sayı
% x onaltılık tam sayı (küçük harfler)
% X onaltılık tam sayı (BÜYÜK harfler)
% e üstel gösterim ('e' küçük harfle)
% E üstel gösterim (BÜYÜK harf "E" ile)
% f kayan noktalı gerçek sayı
% g % f ve% e'nin kısası
% G % f ve% E'nin kısası

Desteklenen diğer semboller ve işlevler aşağıdaki tabloda listelenmiştir -

Sembol İşlevsellik
* bağımsız değişken genişliği veya hassasiyeti belirtir
- sol gerekçe
+ işareti göster
<sp> pozitif sayıdan önce boşluk bırakın
# 'x' veya 'X' kullanılmasına bağlı olarak sekizlik baştaki sıfır ('0') veya onaltılık baştaki '0x' veya '0X' ekleyin.
0 soldan sıfırlarla doldurun (boşluklar yerine)
% "%%" size tek bir değişmez "%" bırakır
(var) eşleme değişkeni (sözlük argümanları)
mn m minimum toplam genişliktir ve n ondalık noktadan sonra görüntülenecek basamak sayısıdır (eğer varsa).

Üçlü Alıntılar

Python'un üçlü tırnakları, dizelerin kelimesi kelimesine NEWLINE'lar, TAB'ler ve diğer özel karakterler dahil olmak üzere birden çok satıra yayılmasına izin vererek kurtarmaya gelir.

Üçlü tırnaklar için sözdizimi ardışık üç single or double alıntılar.

#!/usr/bin/python

para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( \t ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ \n ], or just a NEWLINE within
the variable assignment will also show up.
"""
print para_str

Yukarıdaki kod çalıştırıldığında aşağıdaki sonucu verir. Her bir özel karakterin, "yukarı" arasındaki dizenin sonundaki son NEWLINE'a kadar nasıl basılı biçimine dönüştürüldüğüne dikkat edin. ve üçlü tırnakların kapatılması. Ayrıca NEWLINE'ların bir satırın sonunda açık bir satır başı ile veya çıkış koduyla (\ n) oluştuğunu unutmayın -

this is a long string that is made up of
several lines and non-printable characters such as
TAB (    ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
 ], or just a NEWLINE within
the variable assignment will also show up.

Ham dizeler ters eğik çizgiyi özel bir karakter olarak ele almaz. Ham bir dizeye koyduğunuz her karakter, yazdığınız gibi kalır -

#!/usr/bin/python

print 'C:\\nowhere'

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

C:\nowhere

Şimdi ham dizeden yararlanalım. İfade koyardıkr'expression' aşağıdaki gibi -

#!/usr/bin/python

print r'C:\\nowhere'

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

C:\\nowhere

Unicode Dizesi

Python'daki normal dizeler dahili olarak 8-bit ASCII olarak saklanırken, Unicode dizeleri 16-bit Unicode olarak saklanır. Bu, dünyadaki çoğu dilden özel karakterler dahil olmak üzere daha çeşitli karakterlere izin verir. Unicode dizeleriyle ilgili işlemimi aşağıdakilerle sınırlayacağım -

#!/usr/bin/python

print u'Hello, world!'

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Hello, world!

Gördüğünüz gibi, tıpkı ham dizelerin r önekini kullanması gibi, Unicode dizeleri de u önekini kullanır.

Yerleşik Dize Yöntemleri

Python, dizeleri işlemek için aşağıdaki yerleşik yöntemleri içerir -

Sr.No. Açıklamalı Yöntemler
1 büyük harfle yazmak ()

Dizenin ilk harfini büyük yapar

2 merkez (genişlik, fillchar)

Orijinal dize, toplam genişlik sütunlarına ortalanmış olarak boşluk dolgulu bir dize döndürür.

3 count (str, beg = 0, end = len (string))

Başlangıç ​​dizini beg ve bitiş dizini sonu belirtilmişse, dizede veya dizenin bir alt dizesinde kaç kez oluştuğunu sayar.

4 kod çözme (kodlama = 'UTF-8', hatalar = 'katı')

Kodlama için kaydedilmiş kod çözücüyü kullanarak dizenin kodunu çözer. kodlama, varsayılan olarak varsayılan dize kodlamasıdır.

5 kodlama (kodlama = 'UTF-8', hatalar = 'katı')

Dizenin kodlanmış dize sürümünü döndürür; hata durumunda, hatalar 'yoksay' veya 'değiştir' ile verilmediği sürece, varsayılan değer bir Değer Hatası yükseltmektir.

6 endswith (sonek, beg = 0, end = len (dize))

Dizenin veya dizenin bir alt dizesinin (başlangıç ​​dizini beg ve bitiş endeksi verilmişse) sonek ile bitip bitmediğini belirler; eğer öyleyse true, aksi halde false döndürür.

7 expandtabs (tabsize = 8)

Dizedeki sekmeleri birden çok boşluğa genişletir; sekme boyutu sağlanmadıysa varsayılan olarak sekme başına 8 boşluktur.

8 find (str, beg = 0 end = len (string))

Başlangıç ​​dizini beg ve bitiş dizininin sonu verilirse, dizede mi yoksa dizenin bir alt dizesinde mi oluşup oluşmadığını belirleyin, eğer bulunursa endeksi döndürür, aksi halde -1 döndürür.

9 dizin (str, beg = 0, end = len (string))

Find () ile aynıdır, ancak str bulunmazsa bir istisna oluşturur.

10 isalnum ()

Dize en az 1 karakter içeriyorsa ve tüm karakterler alfasayısal ise, aksi takdirde yanlışsa doğru döndürür.

11 isalpha ()

Dize en az 1 karakter içeriyorsa ve tüm karakterler alfabetikse, aksi takdirde yanlışsa doğru döndürür.

12 isdigit ()

Dize yalnızca rakamlar içeriyorsa doğru, aksi takdirde yanlış döndürür.

13 islower ()

Dize en az 1 büyük / küçük harf içeriyorsa ve tüm büyük / küçük harfli karakterler varsa doğru, aksi takdirde yanlış döndürür.

14 isnumeric ()

Bir unicode dizesi yalnızca sayısal karakterler içeriyorsa true, aksi takdirde false döndürür.

15 isspace ()

Dize yalnızca boşluk karakterleri içeriyorsa true, aksi takdirde false döndürür.

16 istitle ()

Dize doğru şekilde "başlık tabanlı" ise doğru, aksi takdirde yanlış döndürür.

17 isupper ()

Dize en az bir büyük harf içeriyorsa ve tüm büyük / küçük harfli karakterler büyük harfli ise doğru, aksi takdirde yanlış döndürür.

18 katılmak (seq)

Sıralı dizideki öğelerin dize temsillerini ayırıcı dizeyle bir dizeyle birleştirir (birleştirir).

19 len (dize)

Dizenin uzunluğunu verir

20 ljust (genişlik [, fillchar])

Orijinal dize, toplam genişlik sütunu olacak şekilde sola yaslanmış olarak boşluk dolgulu bir dize döndürür.

21 daha düşük ()

Dizedeki tüm büyük harfleri küçük harfe dönüştürür.

22 lstrip ()

Dizede baştaki tüm boşlukları kaldırır.

23 maketrans ()

Çeviri işlevinde kullanılacak bir çeviri tablosu döndürür.

24 max (str)

Str dizesindeki maksimum alfabetik karakteri döndürür.

25 min (dizi)

Str dizesindeki minimum alfabetik karakteri döndürür.

26 değiştir (eski, yeni [, maks])

Dize içindeki tüm eski oluşumlarını yeni veya maksimum verilirse en fazla maksimum oluşumla değiştirir.

27 rfind (str, beg = 0, end = len (string))

Find () ile aynı, ancak dizede geriye doğru arama.

28 rindex (str, beg = 0, end = len (string))

İndex () ile aynı, ancak dizede geriye doğru arama.

29 rjust (genişlik, [, fillchar])

Orijinal dize, toplam genişlik sütunlarına sağa yaslanmış olarak boşluk dolgulu bir dize döndürür.

30 rstrip ()

Dizenin sondaki tüm boşluklarını kaldırır.

31 split (str = "", num = string.count (str))

Dizgeyi sınırlayıcı dizeye göre böler (sağlanmadıysa boşluk) ve alt dizelerin listesini döndürür; eğer verilirse en fazla sayıda alt dizeye bölünür.

32 bölünmüş çizgiler (num = string.count ('\ n'))

Dizeyi tüm (veya sayı) NEWLINE'lara böler ve NEWLINE'lar kaldırılmış her satırın bir listesini döndürür.

33 startswith (str, beg = 0, end = len (string))

Dizenin mi yoksa dizenin bir alt dizesinin mi (başlangıç ​​dizini beg ve bitiş endeksi verilmişse) alt dizge ile başlayıp başlamadığını belirler; eğer öyleyse true, aksi halde false döndürür.

34 şerit ([karakter])

String üzerinde hem lstrip () hem de rstrip () gerçekleştirir.

35 takas kutusu ()

Dizedeki tüm harfler için durumu tersine çevirir.

36 Başlık()

Dizenin "başlık tabanlı" sürümünü döndürür, yani tüm kelimeler büyük harfle başlar ve geri kalanlar küçük harflidir.

37 çevir (tablo, deletechars = "")

Dizeyi, del dizesindekileri kaldırarak, çeviri tablosu dizisine (256 karakter) göre çevirir.

38 üst()

Dize içindeki küçük harfleri büyük harfe dönüştürür.

39 zfill (genişlik)

Sol işaretli orijinal dizeyi toplam genişlik karakterine sıfırlar; sayılar için amaçlanan zfill (), verilen herhangi bir işareti tutar (bir sıfırdan az).

40 isdecimal ()

Unicode dizesi yalnızca ondalık karakterler içeriyorsa true, aksi takdirde false döndürür.

Python'daki en temel veri yapısı, sequence. Bir dizinin her öğesine bir numara atanır - konumu veya dizini. İlk dizin sıfırdır, ikinci dizin birdir ve bu böyle devam eder.

Python'da altı yerleşik dizi türü vardır, ancak en yaygın olanları bu eğitimde göreceğimiz listeler ve tuplelardır.

Tüm dizi türleriyle yapabileceğiniz belirli şeyler vardır. Bu işlemler arasında indeksleme, dilimleme, ekleme, çarpma ve üyelik kontrolü bulunur. Ek olarak, Python, bir dizinin uzunluğunu bulmak ve en büyük ve en küçük öğelerini bulmak için yerleşik işlevlere sahiptir.

Python Listeleri

Liste, Python'da bulunan ve köşeli parantezler arasında virgülle ayrılmış değerler (öğeler) listesi olarak yazılabilen çok yönlü bir veri türüdür. Bir listeyle ilgili önemli olan şey, listedeki öğelerin aynı türde olması gerekmemesidir.

Bir liste oluşturmak, köşeli parantezlerin arasına virgülle ayrılmış farklı değerler koymak kadar basittir. Örneğin -

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"]

Dize indekslerine benzer şekilde, liste indeksleri 0'dan başlar ve listeler dilimlenebilir, birleştirilebilir vb.

Listelerdeki Değerlere Erişim

Listelerdeki değerlere erişmek için, o dizinde mevcut olan değeri elde etmek için dizin veya dizinlerle birlikte dilimleme için köşeli parantezleri kullanın. Örneğin -

#!/usr/bin/python

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];
print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

list1[0]:  physics
list2[1:5]:  [2, 3, 4, 5]

Listeleri Güncelleme

Atama operatörünün sol tarafındaki dilimi vererek listelerin tekli veya çoklu öğelerini güncelleyebilir ve append () yöntemiyle bir listedeki öğelere ekleyebilirsiniz. Örneğin -

#!/usr/bin/python

list = ['physics', 'chemistry', 1997, 2000];
print "Value available at index 2 : "
print list[2]
list[2] = 2001;
print "New value available at index 2 : "
print list[2]

Note - append () yöntemi sonraki bölümde ele alınmaktadır.

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Value available at index 2 :
1997
New value available at index 2 :
2001

Liste Öğelerini Sil

Bir liste öğesini kaldırmak için, tam olarak hangi öğeleri sildiğinizi biliyorsanız del ifadesini veya bilmiyorsanız remove () yöntemini kullanabilirsiniz. Örneğin -

#!/usr/bin/python

list1 = ['physics', 'chemistry', 1997, 2000];
print list1
del list1[2];
print "After deleting value at index 2 : "
print list1

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

['physics', 'chemistry', 1997, 2000]
After deleting value at index 2 :
['physics', 'chemistry', 2000]

Note - remove () yöntemi sonraki bölümde ele alınmaktadır.

Temel Liste İşlemleri

Listeler, + ve * operatörlerine dizelere çok benzer şekilde yanıt verir; burada da birleştirme ve tekrar anlamına gelir, ancak sonucun bir dizge değil, yeni bir liste olması dışında.

Aslında listeler, önceki bölümde dizelerde kullandığımız tüm genel sıralama işlemlerine yanıt verir.

Python İfadesi Sonuçlar Açıklama
len ([1, 2, 3]) 3 Uzunluk
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] Birleştirme
['Merhaba!'] * 4 ["Merhaba!", "Merhaba!", "Merhaba!", "Merhaba!"] Tekrarlama
3 [1, 2, 3] Doğru Üyelik
[1, 2, 3] 'deki x için: x yazdır, 1 2 3 Yineleme

İndeksleme, Dilimleme ve Matrisler

Listeler diziler olduğundan, dizin oluşturma ve dilimleme, dizelerde olduğu gibi listeler için de aynı şekilde çalışır.

Aşağıdaki girdiyi varsayarsak -

L = ['spam', 'Spam', 'SPAM!']

Python İfadesi Sonuçlar Açıklama
L [2] İSTENMEYEN E! Ofsetler sıfırdan başlar
L [-2] İstenmeyen e Negatif: sağdan say
L [1:] ['Spam', 'SPAM!'] Dilimleme bölümleri getirir

Yerleşik Liste İşlevleri ve Yöntemleri

Python aşağıdaki liste işlevlerini içerir -

Sr.No. Açıklamalı İşlev
1 cmp (liste1, liste2)

Her iki listenin öğelerini karşılaştırır.

2 len (liste)

Listenin toplam uzunluğunu verir.

3 max (liste)

Listeden maksimum değeri olan öğeyi döndürür.

4 dk (liste)

Listeden minimum değeri olan öğeyi döndürür.

5 liste (seq)

Bir demeti listeye dönüştürür.

Python aşağıdaki liste yöntemlerini içerir

Sr.No. Açıklamalı Yöntemler
1 list.append (obj)

Listeye nesne objesi ekler

2 list.count (obj)

Listede nesnenin kaç kez oluştuğunun sayısını verir

3 list.extend (seq)

Sıranın içeriğini listeye ekler

4 list.index (obj)

Obj'in göründüğü listedeki en düşük dizini döndürür

5 list.insert (dizin, obj)

Offset indeksinde listeye nesne objesi ekler

6 list.pop (obj = list [-1])

Listeden son nesneyi veya objeyi kaldırır ve döndürür

7 list.remove (obj)

Nesneyi listeden kaldırır

8 list.reverse ()

Yerdeki listenin nesnelerini ters çevirir

9 list.sort ([func])

Liste nesnelerini sıralar, verilmişse karşılaştırma işlevini kullanın

Bir demet, değişmez bir Python nesneleri dizisidir. Tuples, tıpkı listeler gibi dizilerdir. Tuple'lar ve listeler arasındaki farklar, listelerin aksine başlıklar değiştirilemez ve başlıklar parantez kullanır, oysa listelerde köşeli parantez kullanılır.

Bir demet oluşturmak, virgülle ayrılmış farklı değerler koymak kadar basittir. İsteğe bağlı olarak bu virgülle ayrılmış değerleri parantez arasına da koyabilirsiniz. Örneğin -

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";

Boş demet, hiçbir şey içermeyen iki parantez olarak yazılır -

tup1 = ();

Tek bir değer içeren bir demet yazmak için, tek bir değer olmasına rağmen virgül eklemeniz gerekir -

tup1 = (50,);

Dize endeksleri gibi, tuple endeksleri de 0'dan başlar ve dilimlenebilir, birleştirilebilir vb.

Demetlerdeki Değerlere Erişim

Demetteki değerlere erişmek için, o dizinde mevcut olan değeri elde etmek için dizin veya endekslerle birlikte dilimleme için köşeli parantezleri kullanın. Örneğin -

#!/usr/bin/python

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5, 6, 7 );
print "tup1[0]: ", tup1[0];
print "tup2[1:5]: ", tup2[1:5];

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

tup1[0]:  physics
tup2[1:5]:  [2, 3, 4, 5]

Grupları Güncelleme

Tuple'lar değişmezdir, yani tuple elemanlarının değerlerini güncelleyemez veya değiştiremezsiniz. Aşağıdaki örnekte gösterildiği gibi, yeni kayıtlar oluşturmak için mevcut kayıtların bölümlerini alabilirsiniz -

#!/usr/bin/python

tup1 = (12, 34.56);
tup2 = ('abc', 'xyz');

# Following action is not valid for tuples
# tup1[0] = 100;

# So let's create a new tuple as follows
tup3 = tup1 + tup2;
print tup3;

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

(12, 34.56, 'abc', 'xyz')

Tuple Öğelerini Sil

Bireysel demet elemanlarını kaldırmak mümkün değildir. Elbette, istenmeyen unsurların atıldığı başka bir demeti bir araya getirmenin yanlış bir tarafı yoktur.

Bir demetinin tamamını açıkça kaldırmak için, delBeyan. Örneğin -

#!/usr/bin/python

tup = ('physics', 'chemistry', 1997, 2000);
print tup;
del tup;
print "After deleting tup : ";
print tup;

Bu, aşağıdaki sonucu verir. Artan bir istisnaya dikkat edin, bunun nedenidel tup tuple artık mevcut değil -

('physics', 'chemistry', 1997, 2000)
After deleting tup :
Traceback (most recent call last):
   File "test.py", line 9, in <module>
      print tup;
NameError: name 'tup' is not defined

Temel Tuples İşlemleri

Tuples, + ve * operatörlerine dizelere çok benzer şekilde yanıt verir; burada da birleştirme ve tekrar anlamına gelirler, tek fark, sonucun bir dizge değil, yeni bir demet olmasıdır.

Aslında, tuplelar, önceki bölümde dizelerde kullandığımız tüm genel dizi işlemlerine yanıt verir -

Python İfadesi Sonuçlar Açıklama
len ((1, 2, 3)) 3 Uzunluk
(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) Birleştirme
('Merhaba!',) * 4 ("Merhaba!", "Merhaba!", "Merhaba!", "Merhaba!") Tekrarlama
3 inç (1, 2, 3) Doğru Üyelik
x in (1, 2, 3) için: x yazdır, 1 2 3 Yineleme

İndeksleme, Dilimleme ve Matrisler

Tuplelar diziler olduğundan, indeksleme ve dilimleme tıpkı dizeler için olduğu gibi tuplelar için de aynı şekilde çalışır. Aşağıdaki girdiyi varsayarsak -

L = ('spam', 'Spam', 'SPAM!')

 

Python İfadesi Sonuçlar Açıklama
L [2] 'İSTENMEYEN E!' Ofsetler sıfırdan başlar
L [-2] 'İstenmeyen e' Negatif: sağdan say
L [1:] ['Spam', 'SPAM!'] Dilimleme bölümleri getirir

Çevreleyen Sınırlayıcı Yok

Bu kısa örneklerde belirtildiği gibi, virgülle ayrılmış, sembolleri tanımlamadan yazılmış birden fazla nesne kümesi, yani listeler için parantezler, başlıklar için parantezler vb.

#!/usr/bin/python

print 'abc', -4.24e93, 18+6.6j, 'xyz';
x, y = 1, 2;
print "Value of x , y : ", x,y;

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

abc -4.24e+93 (18+6.6j) xyz
Value of x , y : 1 2

Yerleşik Tuple İşlevleri

Python aşağıdaki tuple işlevlerini içerir -

Sr.No. Açıklamalı İşlev
1 cmp (tuple1, tuple2)

Her iki dizinin öğelerini karşılaştırır.

2 len (tuple)

Demetin toplam uzunluğunu verir.

3 max (tuple)

Maksimum değere sahip diziden öğe döndürür.

4 min (demet)

Listeden minimum değeri olan öğeyi döndürür.

5 tuple (seq)

Bir listeyi demete dönüştürür.

Her anahtar, değerinden iki nokta üst üste (:) ile ayrılır, öğeler virgülle ayrılır ve her şey küme parantezleri içine alınır. Hiçbir öğe içermeyen boş bir sözlük yalnızca iki küme parantezi ile yazılır, örneğin: {}.

Değerler olmayabilir, ancak anahtarlar sözlük içinde benzersizdir. Bir sözlüğün değerleri herhangi bir türde olabilir, ancak anahtarlar dizeler, sayılar veya diziler gibi değişmez bir veri türünde olmalıdır.

Sözlükteki Değerlere Erişim

Sözlük öğelerine erişmek için, değerini elde etmek için anahtarla birlikte tanıdık köşeli parantezleri kullanabilirsiniz. Aşağıdaki basit bir örnektir -

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "dict['Name']: ", dict['Name']
print "dict['Age']: ", dict['Age']

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

dict['Name']:  Zara
dict['Age']:  7

Sözlüğün parçası olmayan bir anahtarla bir veri öğesine erişmeye çalışırsak, aşağıdaki gibi bir hata alırız -

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "dict['Alice']: ", dict['Alice']

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

dict['Alice']:
Traceback (most recent call last):
   File "test.py", line 4, in <module>
      print "dict['Alice']: ", dict['Alice'];
KeyError: 'Alice'

Sözlük Güncelleniyor

Aşağıdaki basit örnekte gösterildiği gibi yeni bir giriş veya anahtar-değer çifti ekleyerek, mevcut bir girişi değiştirerek veya mevcut bir girişi silerek sözlüğü güncelleyebilirsiniz -

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8; # update existing entry
dict['School'] = "DPS School"; # Add new entry

print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

dict['Age']:  8
dict['School']:  DPS School

Sözlük Öğelerini Sil

Tek tek sözlük öğelerini kaldırabilir veya bir sözlüğün tüm içeriğini temizleyebilirsiniz. Tek bir işlemle sözlüğün tamamını da silebilirsiniz.

Bir sözlüğün tamamını açıkça kaldırmak için, delBeyan. Aşağıdaki basit bir örnektir -

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del dict['Name']; # remove entry with key 'Name'
dict.clear();     # remove all entries in dict
del dict ;        # delete entire dictionary

print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']

Bu, aşağıdaki sonucu verir. Bir istisna oluştuğunu unutmayın çünkü sonradel dict sözlük artık yok -

dict['Age']:
Traceback (most recent call last):
   File "test.py", line 8, in <module>
      print "dict['Age']: ", dict['Age'];
TypeError: 'type' object is unsubscriptable

Note - del () yöntemi sonraki bölümde ele alınmaktadır.

Sözlük Anahtarlarının Özellikleri

Sözlük değerlerinde sınırlama yoktur. Standart nesneler veya kullanıcı tanımlı nesneler gibi rastgele herhangi bir Python nesnesi olabilirler. Ancak, aynı anahtarlar için geçerli değildir.

Sözlük tuşlarıyla ilgili hatırlanması gereken iki önemli nokta var:

(a)Anahtar başına birden fazla girişe izin verilmez. Bu, yinelenen anahtara izin verilmediği anlamına gelir. Atama sırasında yinelenen anahtarlarla karşılaşıldığında, son atama kazanır. Örneğin -

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
print "dict['Name']: ", dict['Name']

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

dict['Name']:  Manni

(b)Anahtarlar değişmez olmalıdır. Bu, dizeleri, sayıları veya tuple'ları sözlük anahtarları olarak kullanabileceğiniz anlamına gelir, ancak ['anahtar'] gibi bir şeye izin verilmez. Aşağıdaki basit bir örnektir -

#!/usr/bin/python

dict = {['Name']: 'Zara', 'Age': 7}
print "dict['Name']: ", dict['Name']

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Traceback (most recent call last):
   File "test.py", line 3, in <module>
      dict = {['Name']: 'Zara', 'Age': 7};
TypeError: unhashable type: 'list'

Yerleşik Sözlük İşlevleri ve Yöntemleri

Python aşağıdaki sözlük işlevlerini içerir -

Sr.No. Açıklamalı İşlev
1 cmp (dict1, dict2)

Her iki diktenin öğelerini karşılaştırır.

2 len (dikte)

Sözlüğün toplam uzunluğunu verir. Bu, sözlükteki öğelerin sayısına eşit olacaktır.

3 str (dikte)

Bir sözlüğün yazdırılabilir bir dize gösterimini üretir

4 tür (değişken)

Aktarılan değişkenin türünü döndürür. Aktarılan değişken sözlük ise, bir sözlük türü döndürür.

Python aşağıdaki sözlük yöntemlerini içerir -

Sr.No. Açıklamalı Yöntemler
1 dict.clear ()

Sözlük diktesinin tüm öğelerini kaldırır

2 dict.copy ()

Sözlük diktesinin basit bir kopyasını verir

3 dict.fromkeys ()

Seq gelen anahtarlar ve değerlerle Yeni sözlük oluştur set için değer .

4 dict.get (anahtar, varsayılan = Yok)

İçin anahtar anahtar anahtar sözlükte yok eğer değeri veya varsayılan döndürür

5 dict.has_key (anahtar)

İade gerçek Sözlük anahtar eğer dict , yanlış aksi

6 dict.items ()

Dikte'nin (anahtar, değer) tuple çiftlerinin bir listesini verir

7 dict.keys ()

Sözlük diktesinin anahtarlarının listesini verir

8 dict.setdefault (anahtar, varsayılan = Yok)

Get () ile benzerdir, ancak anahtar halihazırda dikte değilse dict [key] = varsayılan olarak ayarlanır

9 dict.update (dict2)

Sözlük ekler dict2 için sitesindeki anahtar değerleri çiftlerini dict

10 dict.values ​​()

Sözlük diktesinin değerlerinin listesini verir

Bir Python programı tarih ve saati birkaç şekilde işleyebilir. Tarih formatları arasında dönüşüm, bilgisayarlar için yaygın bir iştir. Python'un zaman ve takvim modülleri, tarihlerin ve saatlerin izlenmesine yardımcı olur.

Tick ​​nedir?

Zaman aralıkları, saniye birimi cinsinden kayan nokta sayılarıdır. Zaman içindeki belirli anlar, 1 Ocak 1970 (epoch) 00:00:00 saatinden itibaren saniye cinsinden ifade edilir.

Popüler var timePython'da zamanlarla çalışma ve temsiller arasında dönüştürme için işlevler sağlayan modül. Fonksiyon time.time () 00:00:00 saat 1 Ocak, 1970 (Epoch) bu yana kene mevcut sistem saati döndürür.

Misal

#!/usr/bin/python
import time;  # This is required to include time module.

ticks = time.time()
print "Number of ticks since 12:00am, January 1, 1970:", ticks

Bu, aşağıdaki gibi bir sonuç üretecektir -

Number of ticks since 12:00am, January 1, 1970: 7186862.73399

Tarih aritmetiğinin tiklerle yapılması kolaydır. Ancak çağdan önceki tarihler bu biçimde gösterilemez. Uzak gelecekteki tarihler de bu şekilde gösterilemez - sınır noktası UNIX ve Windows için bazen 2038'dedir.

TimeTuple nedir?

Python'un zaman işlevlerinin çoğu, aşağıda gösterildiği gibi zamanı 9 sayılık bir demet olarak ele alır -

Dizin Alan Değerler
0 4 basamaklı yıl 2008
1 Ay 1 ila 12
2 Gün 1 - 31
3 Saat 0-23
4 Dakika 0 - 59
5 İkinci 0 - 61 (60 veya 61 artık saniyedir)
6 Haftanın günü 0 - 6 (0 Pazartesi)
7 Yılın günü 1 ila 366 (Jülyen günü)
8 Gün ışığından yararlanma -1, 0, 1, -1, kitaplığın DST'yi belirlediği anlamına gelir

Yukarıdaki tuple eşdeğerdir struct_timeyapı. Bu yapının aşağıdaki nitelikleri vardır -

Dizin Öznitellikler Değerler
0 tm_year 2008
1 tm_mon 1 ila 12
2 tm_mday 1 - 31
3 tm_hour 0-23
4 tm_min 0 - 59
5 tm_sec 0 - 61 (60 veya 61 artık saniyedir)
6 tm_wday 0 - 6 (0 Pazartesi)
7 tm_yday 1 ila 366 (Jülyen günü)
8 tm_isdst -1, 0, 1, -1, kitaplığın DST'yi belirlediği anlamına gelir

Geçerli zaman alınıyor

Epoch kayan nokta değerinden bu yana geçen bir saniyeden bir anı bir zaman dizisine çevirmek için, kayan nokta değerini, tüm dokuz öğenin geçerli olduğu bir zaman çizelgesi döndüren bir işleve (örneğin, yerel zaman) geçirin.

#!/usr/bin/python
import time;

localtime = time.localtime(time.time())
print "Local current time :", localtime

Bu, başka herhangi bir prezentabl formda biçimlendirilebilen aşağıdaki sonucu üretecektir:

Local current time : time.struct_time(tm_year=2013, tm_mon=7, 
tm_mday=17, tm_hour=21, tm_min=26, tm_sec=3, tm_wday=2, tm_yday=198, tm_isdst=0)

Biçimlendirilmiş zamanı alma

Gereksiniminize göre istediğiniz zamanı biçimlendirebilirsiniz, ancak zamanı okunabilir biçimde elde etmenin basit yöntemi asctime () -

#!/usr/bin/python
import time;

localtime = time.asctime( time.localtime(time.time()) )
print "Local current time :", localtime

Bu, aşağıdaki sonucu verecektir -

Local current time : Tue Jan 13 10:17:09 2009

Bir aylık takvim alma

Takvim modülü, yıllık ve aylık takvimlerle oynamak için çok çeşitli yöntemler sunar. Burada, belirli bir ay için bir takvim yazdırıyoruz (Ocak 2008) -

#!/usr/bin/python
import calendar

cal = calendar.month(2008, 1)
print "Here is the calendar:"
print cal

Bu, aşağıdaki sonucu verecektir -

Here is the calendar:
   January 2008
Mo Tu We Th Fr Sa Su
    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

zaman Modülü

Popüler var timePython'da zamanlarla çalışma ve gösterimler arasında dönüştürme için işlevler sağlayan modül. İşte mevcut tüm yöntemlerin listesi -

Sr.No. Açıklamalı İşlev
1 time.altzone

Yerel DST saat diliminin, eğer tanımlanmışsa, UTC'nin batısına saniye cinsinden farkı. Yerel DST saat dilimi UTC'nin doğusundaysa (Birleşik Krallık dahil Batı Avrupa'da olduğu gibi) bu negatiftir. Bunu yalnızca gün ışığı sıfır değilse kullanın.

2 time.asctime ([tupletime])

Bir zaman dizisini kabul eder ve 'Tue Dec 11 18:07:14 2008' gibi okunabilir 24 karakterlik bir dize döndürür.

3 zaman saati( )

Geçerli CPU zamanını kayan noktalı saniye sayısı olarak döndürür. Farklı yaklaşımların hesaplama maliyetlerini ölçmek için time.clock değeri, time.time () değerinden daha kullanışlıdır.

4 time.ctime ([saniye])

Asctime (localtime (secs)) gibi ve argümansız, asctime () gibidir

5 time.gmtime ([sns])

Dönemden beri saniye cinsinden ifade edilen bir anı kabul eder ve UTC saatiyle bir t zaman-tuple döndürür. Not: t.tm_isdst her zaman 0'dır

6 time.localtime ([secs])

Dönemden bu yana saniye cinsinden ifade edilen bir anı kabul eder ve yerel saatle bir t zaman-demeti döndürür (t.tm_isdst, DST'nin yerel kurallar tarafından anlık saniye için geçerli olup olmamasına bağlı olarak 0 veya 1'dir).

7 time.mktime (tupletime)

Yerel zamanda bir zaman dizisi olarak ifade edilen bir anı kabul eder ve çağdan bu yana saniye cinsinden ifade edilen an ile bir kayan nokta değeri döndürür.

8 time.sleep (saniye)

Çağıran iş parçacığını saniyeler için askıya alır.

9 time.strftime (fmt [, tupletime])

Yerel zamanda bir zaman-demeti olarak ifade edilen bir anı kabul eder ve dize fmt ile belirtilen anı temsil eden bir dize döndürür.

10 time.strptime (str, fmt = '% a% b% d% H:% M:% S% Y')

Str'yi fmt dizgesine göre ayrıştırır ve anı zaman-tuple biçiminde döndürür.

11 zaman zaman( )

Dönemden bu yana geçen saniye cinsinden kayan nokta sayısı olan geçerli zaman anını döndürür.

12 time.tzset ()

Kütüphane rutinleri tarafından kullanılan zaman dönüştürme kurallarını sıfırlar. Ortam değişkeni TZ bunun nasıl yapılacağını belirtir.

Let us go through the functions briefly −

There are following two important attributes available with time module −

Sr.No. Attribute with Description
1

time.timezone

Attribute time.timezone is the offset in seconds of the local time zone (without DST) from UTC (>0 in the Americas; <=0 in most of Europe, Asia, Africa).

2

time.tzname

Attribute time.tzname is a pair of locale-dependent strings, which are the names of the local time zone without and with DST, respectively.

The calendar Module

The calendar module supplies calendar-related functions, including functions to print a text calendar for a given month or year.

By default, calendar takes Monday as the first day of the week and Sunday as the last one. To change this, call calendar.setfirstweekday() function.

Here is a list of functions available with the calendar module −

Sr.No. Function with Description
1

calendar.calendar(year,w=2,l=1,c=6)

Returns a multiline string with a calendar for year year formatted into three columns separated by c spaces. w is the width in characters of each date; each line has length 21*w+18+2*c. l is the number of lines for each week.

2

calendar.firstweekday( )

Returns the current setting for the weekday that starts each week. By default, when calendar is first imported, this is 0, meaning Monday.

3

calendar.isleap(year)

Returns True if year is a leap year; otherwise, False.

4

calendar.leapdays(y1,y2)

Returns the total number of leap days in the years within range(y1,y2).

5

calendar.month(year,month,w=2,l=1)

Returns a multiline string with a calendar for month month of year year, one line per week plus two header lines. w is the width in characters of each date; each line has length 7*w+6. l is the number of lines for each week.

6

calendar.monthcalendar(year,month)

Returns a list of lists of ints. Each sublist denotes a week. Days outside month month of year year are set to 0; days within the month are set to their day-of-month, 1 and up.

7

calendar.monthrange(year,month)

Returns two integers. The first one is the code of the weekday for the first day of the month month in year year; the second one is the number of days in the month. Weekday codes are 0 (Monday) to 6 (Sunday); month numbers are 1 to 12.

8

calendar.prcal(year,w=2,l=1,c=6)

Like print calendar.calendar(year,w,l,c).

9

calendar.prmonth(year,month,w=2,l=1)

Like print calendar.month(year,month,w,l).

10

calendar.setfirstweekday(weekday)

Sets the first day of each week to weekday code weekday. Weekday codes are 0 (Monday) to 6 (Sunday).

11

calendar.timegm(tupletime)

The inverse of time.gmtime: accepts a time instant in time-tuple form and returns the same instant as a floating-point number of seconds since the epoch.

12

calendar.weekday(year,month,day)

Returns the weekday code for the given date. Weekday codes are 0 (Monday) to 6 (Sunday); month numbers are 1 (January) to 12 (December).

Other Modules & Functions

If you are interested, then here you would find a list of other important modules and functions to play with date & time in Python −

  • The datetime Module

  • The pytz Module

  • The dateutil Module

İşlev, ilgili tek bir eylemi gerçekleştirmek için kullanılan organize, yeniden kullanılabilir bir kod bloğudur. Fonksiyonlar, uygulamanız için daha iyi modülerlik ve yüksek derecede kod yeniden kullanımı sağlar.

Zaten bildiğiniz gibi, Python size print () vb. Gibi birçok yerleşik işlev sunar, ancak kendi işlevlerinizi de oluşturabilirsiniz. Bu işlevlere kullanıcı tanımlı işlevler denir .

Bir Fonksiyonun Tanımlanması

Gerekli işlevselliği sağlamak için işlevler tanımlayabilirsiniz. Python'da bir işlevi tanımlamak için basit kurallar.

  • Fonksiyon blokları anahtar kelimeyle başlar def ardından işlev adı ve parantezler (()).

  • Herhangi bir girdi parametresi veya bağımsız değişken bu parantez içine yerleştirilmelidir. Bu parantezlerin içinde parametreleri de tanımlayabilirsiniz.

  • Bir işlevin ilk ifadesi isteğe bağlı bir ifade olabilir - işlevin veya docstring'in dokümantasyon dizesi .

  • Her işlevin içindeki kod bloğu iki nokta üst üste (:) ile başlar ve girintilidir.

  • Return [ifade] ifadesi, isteğe bağlı olarak çağırıcıya bir ifade geri göndererek bir işlevden çıkar. Bağımsız değişken içermeyen bir dönüş ifadesi, Hiçbiri döndürmeyle aynıdır.

Sözdizimi

def functionname( parameters ):
   "function_docstring"
   function_suite
   return [expression]

Varsayılan olarak, parametrelerin konumsal bir davranışı vardır ve onları tanımlandıkları sırayla bilgilendirmeniz gerekir.

Misal

Aşağıdaki işlev, girdi parametresi olarak bir dizge alır ve bunu standart ekrana yazdırır.

def printme( str ):
   "This prints a passed string into this function"
   print str
   return

Bir Fonksiyon Çağırma

Bir fonksiyonun tanımlanması ona sadece bir isim verir, fonksiyona dahil edilecek parametreleri belirtir ve kod bloklarını yapılandırır.

Bir fonksiyonun temel yapısı tamamlandıktan sonra, onu başka bir fonksiyondan veya doğrudan Python komut isteminden çağırarak çalıştırabilirsiniz. Printme () işlevini çağırmak için örnek aşağıdadır -

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme("I'm first call to user defined function!")
printme("Again second call to the same function")

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

I'm first call to user defined function!
Again second call to the same function

Referans ve değere göre geçirme

Python dilindeki tüm parametreler (bağımsız değişkenler) referans olarak aktarılır. Bu, bir parametrenin bir işlev içinde neyi ifade ettiğini değiştirirseniz, değişikliğin çağıran işleve geri yansıdığı anlamına gelir. Örneğin -

#!/usr/bin/python

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist.append([1,2,3,4]);
   print "Values inside the function: ", mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

Burada, aktarılan nesnenin referansını koruyoruz ve aynı nesneye değerler ekliyoruz. Yani, bu şu sonucu verecektir -

Values inside the function:  [10, 20, 30, [1, 2, 3, 4]]
Values outside the function:  [10, 20, 30, [1, 2, 3, 4]]

Argümanın referansla iletildiği ve çağrılan işlevin içinde referansın üzerine yazıldığı bir örnek daha var.

#!/usr/bin/python

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist = [1,2,3,4]; # This would assig new reference in mylist
   print "Values inside the function: ", mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

Mylist parametresi , fonksiyon değişikliği için yereldir. Fonksiyonu içinde MyList değiştirme etkilemez MyList . İşlev hiçbir şey başaramaz ve nihayet bu şu sonucu verir:

Values inside the function:  [1, 2, 3, 4]
Values outside the function:  [10, 20, 30]

İşlev Argümanları

Aşağıdaki biçimsel argüman türlerini kullanarak bir işlevi çağırabilirsiniz -

  • Gerekli argümanlar
  • Anahtar kelime argümanları
  • Varsayılan argümanlar
  • Değişken uzunluklu argümanlar

Gerekli argümanlar

Gerekli argümanlar, bir işleve doğru konum sırasına göre iletilen argümanlardır. Burada, işlev çağrısındaki argüman sayısı işlev tanımıyla tam olarak eşleşmelidir.

Printme () işlevini çağırmak için , kesinlikle bir bağımsız değişken geçirmeniz gerekir, aksi takdirde aşağıdaki gibi bir sözdizimi hatası verir -

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme()

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Traceback (most recent call last):
   File "test.py", line 11, in <module>
      printme();
TypeError: printme() takes exactly 1 argument (0 given)

Anahtar kelime argümanları

Anahtar kelime argümanları işlev çağrılarıyla ilgilidir. Bir işlev çağrısında anahtar sözcük bağımsız değişkenleri kullandığınızda, arayan, bağımsız değişkenleri parametre adına göre tanımlar.

Bu, argümanları atlamanıza veya bunları sıra dışı bir yere yerleştirmenize olanak tanır, çünkü Python yorumlayıcısı, değerleri parametrelerle eşleştirmek için sağlanan anahtar kelimeleri kullanabilir. Ayrıca aşağıdaki şekillerde printme () işlevine anahtar sözcük aramaları da yapabilirsiniz -

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme( str = "My string")

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

My string

Aşağıdaki örnek daha net bir resim vermektedir. Parametrelerin sırasının önemli olmadığını unutmayın.

#!/usr/bin/python

# Function definition is here
def printinfo( name, age ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

# Now you can call printinfo function
printinfo( age=50, name="miki" )

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Name:  miki
Age  50

Varsayılan argümanlar

Varsayılan bir bağımsız değişken, o bağımsız değişken için işlev çağrısında bir değer sağlanmadığında varsayılan bir değer kabul eden bir bağımsız değişkendir. Aşağıdaki örnek, varsayılan argümanlar hakkında bir fikir verir, geçirilmezse varsayılan yaşı yazdırır -

#!/usr/bin/python

# Function definition is here
def printinfo( name, age = 35 ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

# Now you can call printinfo function
printinfo( age=50, name="miki" )
printinfo( name="miki" )

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Name:  miki
Age  50
Name:  miki
Age  35

Değişken uzunluklu argümanlar

Fonksiyonu tanımlarken belirttiğinizden daha fazla argüman için bir fonksiyonu işlemeniz gerekebilir. Bu bağımsız değişkenler değişken uzunluklu bağımsız değişkenler olarak adlandırılır ve gerekli ve varsayılan bağımsız değişkenlerin aksine işlev tanımında adlandırılmaz.

Anahtar kelime olmayan değişken bağımsız değişkenlere sahip bir işlevin sözdizimi şudur:

def functionname([formal_args,] *var_args_tuple ):
   "function_docstring"
   function_suite
   return [expression]

Tüm nonkeyword değişken bağımsız değişkenlerinin değerlerini tutan değişken adının önüne bir yıldız işareti (*) yerleştirilir. İşlev çağrısı sırasında ek argüman belirtilmezse bu demet boş kalır. Aşağıdaki basit bir örnektir -

#!/usr/bin/python

# Function definition is here
def printinfo( arg1, *vartuple ):
   "This prints a variable passed arguments"
   print "Output is: "
   print arg1
   for var in vartuple:
      print var
   return;

# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Output is:
10
Output is:
70
60
50

Anonim Fonksiyonlar

Bu işlevler anonim olarak adlandırılır çünkü standart biçimde def anahtar sözcüğü kullanılarak bildirilmezler . Küçük anonim işlevler oluşturmak için lambda anahtar sözcüğünü kullanabilirsiniz .

  • Lambda formları herhangi bir sayıda bağımsız değişken alabilir, ancak bir ifade biçiminde yalnızca bir değer döndürür. Komutlar veya çoklu ifadeler içeremezler.

  • Lambda bir ifade gerektirdiğinden, anonim bir işlev doğrudan yazdırma çağrısı olamaz

  • Lambda işlevlerinin kendi yerel ad alanları vardır ve kendi parametre listesindekiler ve genel ad alanında olanlar dışındaki değişkenlere erişemezler.

  • Lambda'lar bir işlevin tek satırlık bir sürümü gibi görünse de, C veya C ++ 'daki satır içi ifadelere eşdeğer değildirler, amacı performans nedenleriyle çağırma sırasında işlev yığını tahsisini iletmektir.

Sözdizimi

Lambda işlevlerinin sözdizimi yalnızca aşağıdaki gibi tek bir ifade içerir -

lambda [arg1 [,arg2,.....argn]]:expression

Lambda işlevinin nasıl çalıştığını gösteren örnek aşağıdadır -

#!/usr/bin/python

# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2;

# Now you can call sum as a function
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Value of total :  30
Value of total :  40

dönüş Bildirimi

Return [ifade] ifadesi, isteğe bağlı olarak çağırıcıya bir ifade geri göndererek bir işlevden çıkar. Bağımsız değişken içermeyen bir dönüş ifadesi, Hiçbiri döndürmeyle aynıdır.

Yukarıdaki örneklerin tümü herhangi bir değer vermemektedir. Bir işlevden aşağıdaki gibi bir değer döndürebilirsiniz -

#!/usr/bin/python

# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2
   print "Inside the function : ", total
   return total;

# Now you can call sum function
total = sum( 10, 20 );
print "Outside the function : ", total

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Inside the function :  30
Outside the function :  30

Değişkenlerin Kapsamı

Bir programdaki tüm değişkenlere, o programdaki tüm konumlardan erişilemeyebilir. Bu, bir değişkeni nerede tanımladığınıza bağlıdır.

Bir değişkenin kapsamı, programın belirli bir tanımlayıcıya erişebileceğiniz bölümünü belirler. Python'da iki temel değişken kapsamı vardır -

  • Global değişkenler
  • Yerel değişkenler

Global ve Yerel değişkenler

Bir işlev gövdesi içinde tanımlanan değişkenlerin yerel bir kapsamı vardır ve dışında tanımlananların genel bir kapsamı vardır.

Bu, yerel değişkenlere yalnızca bildirildikleri işlev içinde erişilebileceği, oysa küresel değişkenlere tüm işlevler tarafından program gövdesi boyunca erişilebileceği anlamına gelir. Bir işlevi çağırdığınızda, içinde bildirilen değişkenler kapsama alınır. Aşağıdaki basit bir örnektir -

#!/usr/bin/python

total = 0; # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2; # Here total is local variable.
   print "Inside the function local total : ", total
   return total;

# Now you can call sum function
sum( 10, 20 );
print "Outside the function global total : ", total

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Inside the function local total :  30
Outside the function global total :  0

Bir modül, Python kodunuzu mantıksal olarak düzenlemenizi sağlar. İlgili kodu bir modülde gruplamak, kodun anlaşılmasını ve kullanılmasını kolaylaştırır. Bir modül, bağlayıp referans verebileceğiniz, keyfi olarak adlandırılmış özniteliklere sahip bir Python nesnesidir.

Basitçe, bir modül Python kodundan oluşan bir dosyadır. Bir modül, işlevleri, sınıfları ve değişkenleri tanımlayabilir. Bir modül ayrıca çalıştırılabilir kod içerebilir.

Misal

Aname adlı bir modülün Python kodu normalde aname.py adlı bir dosyada bulunur . İşte basit bir modül örneği, support.py

def print_func( par ):
   print "Hello : ", par
   return

ithalat Beyanı

Herhangi bir Python kaynak dosyasını, başka bir Python kaynak dosyasında bir içe aktarma ifadesi çalıştırarak modül olarak kullanabilirsiniz. İthalat sözdizimi aşağıdaki gibidir -

import module1[, module2[,... moduleN]

Yorumlayıcı bir import ifadesiyle karşılaştığında, modül arama yolunda mevcutsa modülü içe aktarır. Arama yolu, yorumlayıcının bir modülü içe aktarmadan önce aradığı dizinlerin bir listesidir. Örneğin, support.py modülünü içe aktarmak için, komut dosyasının en üstüne aşağıdaki komutu koymanız gerekir -

#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Zara")

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Hello : Zara

Bir modül, içe aktarılma sayısından bağımsız olarak yalnızca bir kez yüklenir. Bu, birden çok içe aktarım meydana gelirse modül yürütmesinin tekrar tekrar gerçekleşmesini önler.

From ... import Bildirimi

Python'un from ifadesi, bir modülden belirli nitelikleri mevcut ad alanına aktarmanıza izin verir. Dan ... ithalat sözdizimi aşağıdaki gibidir -

from modname import name1[, name2[, ... nameN]]

Örneğin, fibonacci fonksiyonunu fib modülünden içe aktarmak için aşağıdaki ifadeyi kullanın -

from fib import fibonacci

Bu ifade, fib modülünün tamamını mevcut isim alanına aktarmaz; modül fibonundan öğe fibonacci'yi içe aktaran modülün global sembol tablosuna sokar.

From ... import * Bildirimi

Aşağıdaki import ifadesini kullanarak bir modüldeki tüm adları mevcut ad alanına içe aktarmak da mümkündür -

from modname import *

Bu, bir modüldeki tüm öğeleri geçerli ad alanına aktarmanın kolay bir yolunu sağlar; ancak bu ifade idareli kullanılmalıdır.

Modülleri Yerleştirme

Bir modülü içe aktardığınızda, Python yorumlayıcısı modülü aşağıdaki dizilerde arar -

  • Geçerli dizin.

  • Modül bulunamazsa, Python daha sonra her bir dizini PYTHONPATH kabuk değişkeninde arar.

  • Her şey başarısız olursa, Python varsayılan yolu kontrol eder. UNIX'te bu varsayılan yol normalde / usr / local / lib / python / şeklindedir.

Modül arama yolu, sistem modülü sys'de sys.pathdeğişken. Sys.path değişkeni, geçerli dizini, PYTHONPATH'ı ve kuruluma bağlı varsayılanı içerir.

PYTHONPATH Değişken

PYTHONPATH, dizinlerin bir listesinden oluşan bir ortam değişkenidir. PYTHONPATH'ın sözdizimi, PATH kabuk değişkeninin sözdizimi ile aynıdır.

İşte bir Windows sisteminden tipik bir PYTHONPATH -

set PYTHONPATH = c:\python20\lib;

Ve işte bir UNIX sisteminden tipik bir PYTHONPATH -

set PYTHONPATH = /usr/local/lib/python

Ad Alanları ve Kapsam Belirleme

Değişkenler, nesnelerle eşleşen adlardır (tanımlayıcılar). Bir ad alanı , değişken adlarından (anahtarlar) ve bunlara karşılık gelen nesnelerden (değerler) oluşan bir sözlüktür.

Bir Python ifadesi, yerel bir ad alanındaki ve genel ad alanındaki değişkenlere erişebilir . Yerel ve global değişken aynı ada sahipse, yerel değişken global değişkeni gölgeler.

Her işlevin kendi yerel ad alanı vardır. Sınıf yöntemleri, sıradan işlevlerle aynı kapsam kuralını izler.

Python, değişkenlerin yerel mi yoksa küresel mi olduğuna dair eğitimli tahminler yapar. Bir işleve değer atanan herhangi bir değişkenin yerel olduğunu varsayar.

Bu nedenle, bir fonksiyondaki global değişkene bir değer atamak için önce global ifadeyi kullanmalısınız.

Global VarName ifadesi Python'a VarName'in global bir değişken olduğunu söyler. Python, değişken için yerel ad alanını aramayı durdurur.

Örneğin , global isim alanında bir Money değişkeni tanımlıyoruz . Money işlevi içinde Money'ye bir değer atarız , bu nedenle Python Money'yi yerel bir değişken olarak kabul eder . Ancak, Money yerel değişkeninin değerine onu ayarlamadan önce eriştik, bu nedenle sonuç UnboundLocalError oldu. Global ifadenin yorumunu kaldırmak sorunu çözer.

#!/usr/bin/python

Money = 2000
def AddMoney():
   # Uncomment the following line to fix the code:
   # global Money
   Money = Money + 1

print Money
AddMoney()
print Money

Dir () İşlevi

Dir () yerleşik işlevi, bir modül tarafından tanımlanan isimleri içeren sıralı bir dizge listesi döndürür.

Liste, bir modülde tanımlanan tüm modüllerin, değişkenlerin ve işlevlerin adlarını içerir. Aşağıdaki basit bir örnektir -

#!/usr/bin/python

# Import built-in module math
import math

content = dir(math)
print content

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

Burada, __name__ özel dize değişkeni modülün adıdır ve __file__ , modülün yüklendiği dosya adıdır .

Globaller () ve yerliler () Fonksiyonlar

Globaller () ve yerliler () fonksiyonları da denir yerden yere bağlı olarak küresel ve yerel ad alanlarında isimlerini döndürmek için kullanılabilir.

Locals () bir işlevin içinden çağrılırsa, o işlevden yerel olarak erişilebilen tüm isimleri döndürür.

Globals () bir işlevin içinden çağrılırsa, o işlevden global olarak erişilebilen tüm isimleri döndürür.

Bu iki işlevin de dönüş türü sözlüktür. Bu nedenle, isimler keys () işlevi kullanılarak çıkarılabilir.

Yeniden () Fonksiyonu

Modül bir komut dosyasına içe aktarıldığında, bir modülün en üst düzey kısmındaki kod yalnızca bir kez yürütülür.

Bu nedenle, bir modüldeki en üst düzey kodu yeniden çalıştırmak istiyorsanız, reload () işlevini kullanabilirsiniz. Reload () işlevi, önceden alınmış bir modülü tekrar içe aktarır. Reload () fonksiyonunun sözdizimi şudur -

reload(module_name)

Burada modül_adı , modül adını içeren dizge değil, yeniden yüklemek istediğiniz modülün adıdır. Örneğin, merhaba modülünü yeniden yüklemek için aşağıdakileri yapın -

reload(hello)

Python'daki Paketler

Bir paket, modüller, alt paketler ve alt paketler vb. İçeren tek bir Python uygulama ortamını tanımlayan hiyerarşik bir dosya dizini yapısıdır.

Telefon dizininde bulunan bir Pots.py dosyasını düşünün . Bu dosya aşağıdaki kaynak kod satırına sahiptir -

#!/usr/bin/python

def Pots():
   print "I'm Pots Phone"

Benzer şekilde, yukarıdaki ile aynı ada sahip farklı işlevlere sahip iki dosyamız daha var -

  • Isdn () işlevine sahip Telefon / Isdn.py dosyası

  • G3 () işlevine sahip telefon / G3.py dosyası

Şimdi, Telefon dizininde bir tane daha __init__.py dosyası oluşturun -

  • Phone/__init__.py

Telefonu içe aktardığınızda tüm işlevlerinizi kullanılabilir kılmak için, __init__.py içine aşağıdaki gibi açık içe aktarma ifadeleri koymanız gerekir -

from Pots import Pots
from Isdn import Isdn
from G3 import G3

Bu satırları __init__.py'ye ekledikten sonra, Telefon paketini içe aktardığınızda bu sınıfların tümüne sahip olursunuz.

#!/usr/bin/python

# Now import your Phone Package.
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

Yukarıdaki örnekte, her dosyada tek bir işlev örneği aldık, ancak dosyalarınızda birden çok işlevi tutabilirsiniz. Ayrıca bu dosyalarda farklı Python sınıfları tanımlayabilir ve ardından bu sınıflardan paketlerinizi oluşturabilirsiniz.

Bu bölüm, Python'da bulunan tüm temel G / Ç işlevlerini kapsar. Daha fazla işlev için lütfen standart Python belgelerine bakın.

Ekrana Yazdırma

Çıktı oluşturmanın en basit yolu, virgülle ayrılmış sıfır veya daha fazla ifadeyi geçirebileceğiniz print deyimini kullanmaktır . Bu işlev, ilettiğiniz ifadeleri bir dizeye dönüştürür ve sonucu aşağıdaki gibi standart çıktıya yazar -

#!/usr/bin/python

print "Python is really a great language,", "isn't it?"

Bu, standart ekranınızda aşağıdaki sonucu verir -

Python is really a great language, isn't it?

Klavye Girişini Okuma

Python, varsayılan olarak klavyeden gelen standart girişten bir metin satırını okumak için iki yerleşik işlev sağlar. Bu işlevler -

  • raw_input
  • input

raw_input İşlevi

Raw_input ([istemi]) işlevi bir dizi (arka yeni satır kaldırma) gibi standart giriş ve geri döner işletmeye bir satır okur.

#!/usr/bin/python

str = raw_input("Enter your input: ")
print "Received input is : ", str

Bu, herhangi bir dizeyi girmenizi ister ve ekranda aynı dizeyi görüntüler. "Merhaba Python!" Yazdığımda çıktısı şöyle oluyor -

Enter your input: Hello Python
Received input is :  Hello Python

giriş İşlevi

Girişi ([istemi]) işlevi giriş geçerli bir Python ifadedir ve size değerlendirilen sonuç döndürür varsayar dışında raw_input fonksiyonuna bilgi eşdeğerdir.

#!/usr/bin/python

str = input("Enter your input: ")
print "Received input is : ", str

Bu, girilen girdiye karşı aşağıdaki sonucu üretecektir -

Enter your input: [x*5 for x in range(2,10,2)]
Recieved input is :  [10, 20, 30, 40]

Dosyaları Açma ve Kapatma

Şimdiye kadar, standart girdi ve çıktıyı okuyup yazıyordunuz. Şimdi, gerçek veri dosyalarını nasıl kullanacağımızı göreceğiz.

Python, dosyaları varsayılan olarak işlemek için gerekli temel işlevleri ve yöntemleri sağlar. Dosya işlemenin çoğunu birfile nesne.

açık İşlevi

Bir dosyayı okuyabilmeniz veya yazabilmeniz için, Python'un yerleşik open () işlevini kullanarak onu açmanız gerekir . Bu işlev birfile kendisiyle ilişkili diğer destek yöntemlerini çağırmak için kullanılacak nesne.

Sözdizimi

file object = open(file_name [, access_mode][, buffering])

İşte parametre ayrıntıları -

  • file_name - dosya_adı bağımsız değişkeni, erişmek istediğiniz dosyanın adını içeren bir dize değeridir.

  • access_mode- erişim_modu, dosyanın hangi kipte açılacağını belirler, yani okuma, yazma, ekleme, vb. Olası değerlerin tam listesi aşağıda tabloda verilmiştir. Bu isteğe bağlı parametredir ve varsayılan dosya erişim modu okunur (r).

  • buffering- Arabelleğe alma değeri 0 olarak ayarlanırsa, arabelleğe alma gerçekleşmez. Arabelleğe alma değeri 1 ise, bir dosyaya erişilirken satır arabelleğe alma gerçekleştirilir. Arabelleğe alma değerini 1'den büyük bir tamsayı olarak belirtirseniz, arabelleğe alma işlemi belirtilen arabellek boyutuyla gerçekleştirilir. Negatifse, arabellek boyutu sistem varsayılanıdır (varsayılan davranış).

İşte bir dosyayı açmanın farklı modlarının bir listesi -

Sr.No. Modlar ve Açıklama
1

r

Yalnızca okumak için bir dosya açar. Dosya tanıtıcısı dosyanın başlangıcına yerleştirilir. Bu varsayılan moddur.

2

rb

Yalnızca ikili biçimde okumak için bir dosya açar. Dosya tanıtıcısı dosyanın başlangıcına yerleştirilir. Bu varsayılan moddur.

3

r+

Hem okumak hem de yazmak için bir dosya açar. Dosya tanıtıcısı dosyanın başlangıcına yerleştirilir.

4

rb+

İkili formatta hem okumak hem de yazmak için bir dosya açar. Dosya tanıtıcısı dosyanın başlangıcına yerleştirilir.

5

w

Yalnızca yazmak için bir dosya açar. Dosya varsa dosyanın üzerine yazar. Dosya yoksa, yazmak için yeni bir dosya oluşturur.

6

wb

Yalnızca ikili biçimde yazmak için bir dosya açar. Dosya varsa dosyanın üzerine yazar. Dosya yoksa, yazmak için yeni bir dosya oluşturur.

7

w+

Hem yazmak hem de okumak için bir dosya açar. Dosya varsa mevcut dosyanın üzerine yazar. Dosya yoksa, okumak ve yazmak için yeni bir dosya oluşturur.

8

wb+

İkili formatta hem yazmak hem de okumak için bir dosya açar. Dosya varsa mevcut dosyanın üzerine yazar. Dosya yoksa, okumak ve yazmak için yeni bir dosya oluşturur.

9

a

Eklemek için bir dosya açar. Dosya varsa, dosya işaretçisi dosyanın sonundadır. Yani dosya ekleme modundadır. Dosya yoksa, yazmak için yeni bir dosya oluşturur.

10

ab

İkili biçimde eklemek için bir dosya açar. Dosya varsa, dosya işaretçisi dosyanın sonundadır. Yani dosya ekleme modundadır. Dosya yoksa, yazmak için yeni bir dosya oluşturur.

11

a+

Hem eklemek hem de okumak için bir dosya açar. Dosya varsa, dosya işaretçisi dosyanın sonundadır. Dosya, ekleme modunda açılır. Dosya yoksa, okuma ve yazma için yeni bir dosya oluşturur.

12

ab+

İkili formatta hem eklemek hem de okumak için bir dosya açar. Dosya varsa, dosya işaretçisi dosyanın sonundadır. Dosya, ekleme modunda açılır. Dosya yoksa, okuma ve yazma için yeni bir dosya oluşturur.

Dosya Nesne Nitelikler

Bir dosya açıldığında ve bir dosya nesneniz olduğunda, o dosyayla ilgili çeşitli bilgiler alabilirsiniz.

Dosya nesnesiyle ilgili tüm özniteliklerin bir listesi -

Sr.No. Öznitelik ve Açıklama
1

file.closed

Dosya kapalıysa doğru, aksi takdirde yanlış döndürür.

2

file.mode

Dosyanın açıldığı erişim modunu döndürür.

3

file.name

Dosyanın adını döndürür.

4

file.softspace

Print ile açıkça alan gerekiyorsa false, aksi takdirde true döndürür.

Misal

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name
print "Closed or not : ", fo.closed
print "Opening mode : ", fo.mode
print "Softspace flag : ", fo.softspace

Bu, aşağıdaki sonucu verir -

Name of the file:  foo.txt
Closed or not :  False
Opening mode :  wb
Softspace flag :  0

Kapat () Yöntem

Bir dosya nesnesinin close () yöntemi tüm yazılmamış bilgileri temizler ve dosya nesnesini kapatır, bundan sonra başka hiçbir yazma yapılamaz.

Python, bir dosyanın referans nesnesi başka bir dosyaya yeniden atandığında dosyayı otomatik olarak kapatır. Bir dosyayı kapatmak için close () yöntemini kullanmak iyi bir uygulamadır.

Sözdizimi

fileObject.close()

Misal

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name

# Close opend file
fo.close()

Bu, aşağıdaki sonucu verir -

Name of the file:  foo.txt

Dosyaları Okuma ve Yazma

Dosya nesnesi hayatımızı kolaylaştırmak için erişim yöntemleri kümesi sağlar. Dosyaları okumak ve yazmak için read () ve write () yöntemlerini nasıl kullanacağımızı göreceğiz .

Yazma () Yöntem

Yazma () metodu bir açık dosyaya herhangi bir dize yazar. Python dizelerinin sadece metne değil, ikili verilere sahip olabileceğini unutmamak önemlidir.

Write () yöntemi dizenin sonuna bir satırsonu karakteri ('\ n') eklemez -

Sözdizimi

fileObject.write(string)

Burada geçirilen parametre, açılan dosyaya yazılacak içeriktir.

Misal

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
fo.write( "Python is a great language.\nYeah its great!!\n")

# Close opend file
fo.close()

Yukarıdaki yöntem foo.txt dosyası oluşturur ve verilen içeriği o dosyaya yazar ve sonunda bu dosyayı kapatır. Bu dosyayı açarsanız, aşağıdaki içeriğe sahip olacaktır.

Python is a great language.
Yeah its great!!

Okuma () Yöntem

Okuma () metodu açık dosyasından bir dize okur. Python dizelerinin ikili verilere sahip olabileceğini unutmamak önemlidir. metin verileri dışında.

Sözdizimi

fileObject.read([count])

Burada aktarılan parametre, açılan dosyadan okunacak bayt sayısıdır. Bu yöntem, dosyanın başından okumaya başlar ve sayı eksikse, mümkün olduğunca, belki dosyanın sonuna kadar okumaya çalışır.

Misal

Yukarıda oluşturduğumuz foo.txt dosyasını alalım .

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str
# Close opend file
fo.close()

Bu, aşağıdaki sonucu verir -

Read String is :  Python is

Dosya Pozisyonları

Söyle () yöntem size dosya içinde mevcut konumu anlatır; diğer bir deyişle, sonraki okuma veya yazma, dosyanın başlangıcından itibaren bu kadar baytta gerçekleşecektir.

Arama (uzaklık [, başlangıç]) yöntemi geçerli dosya konumunu değiştirir. Ofset bağımsız değişken bayt sayısı Taşınacak gösterir. Den bağımsız değişken bayt Taşınacak olduğu referans konumunu belirtir.

Eğer gelen 0 olarak ayarlanır, bu araçlar referans konumu olarak dosyanın başlangıcına kullanımı durumu, 1 referans konumu olarak mevcut pozisyonu kullanmak ve daha sonra 2 olarak ayarlanmışsa, dosyanın sonuna referans konumu olarak alınacaktır .

Misal

Yukarıda oluşturduğumuz foo.txt dosyasını alalım .

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10)
print "Read String is : ", str

# Check current position
position = fo.tell()
print "Current file position : ", position

# Reposition pointer at the beginning once again
position = fo.seek(0, 0);
str = fo.read(10)
print "Again read String is : ", str
# Close opend file
fo.close()

Bu, aşağıdaki sonucu verir -

Read String is :  Python is
Current file position :  10
Again read String is :  Python is

Dosyaları Yeniden Adlandırma ve Silme

Python os modülü, dosyaları yeniden adlandırma ve silme gibi dosya işleme işlemlerini gerçekleştirmenize yardımcı olan yöntemler sağlar.

Bu modülü kullanmak için önce onu içe aktarmanız ve ardından ilgili işlevleri çağırmanız gerekir.

Rename () Yöntemi

Adlandırma () metodu iki bağımsız mevcut dosya adını ve yeni bir dosya adı alır.

Sözdizimi

os.rename(current_file_name, new_file_name)

Misal

Aşağıda, var olan bir dosyayı yeniden adlandırmak için örnek verilmiştir test1.txt -

#!/usr/bin/python
import os

# Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )

Remove () Yöntem

Silinecek dosyanın adını bağımsız değişken olarak sağlayarak dosyaları silmek için remove () yöntemini kullanabilirsiniz.

Sözdizimi

os.remove(file_name)

Misal

Mevcut bir test2.txt dosyasını silme örneği aşağıdadır -

#!/usr/bin/python
import os

# Delete file test2.txt
os.remove("text2.txt")

Python'daki Dizinler

Tüm dosyalar çeşitli dizinlerde bulunur ve Python da bunları işlemede sorun yaşamaz. os modülünde dizinleri oluşturmanıza, kaldırmanıza ve değiştirmenize yardımcı olan birkaç yöntem vardır.

Mkdir () Yöntem

Mkdir () yöntemini kullanabilirsiniz .osmodül mevcut dizinde dizinler oluşturmak için. Bu yönteme, oluşturulacak dizinin adını içeren bir argüman sağlamanız gerekir.

Sözdizimi

os.mkdir("newdir")

Misal

Geçerli dizinde bir dizin testi oluşturma örneği aşağıdadır -

#!/usr/bin/python
import os

# Create a directory "test"
os.mkdir("test")

Chdir () Yöntem

Sen kullanabilirsiniz chdir () geçerli dizini değiştirmek için bir yöntem. Chdir () yöntemi, geçerli dizini yapmak istediğiniz dizinin adı olan bir bağımsız değişken alır.

Sözdizimi

os.chdir("newdir")

Misal

Aşağıda "/ home / newdir" dizinine gitmek için örnek verilmiştir -

#!/usr/bin/python
import os

# Changing a directory to "/home/newdir"
os.chdir("/home/newdir")

Getcwd () Yöntem

Getcwd () metodu görüntüler Geçerli çalışma dizini.

Sözdizimi

os.getcwd()

Misal

Geçerli dizini veren örnek aşağıdadır -

#!/usr/bin/python
import os

# This would give location of the current directory
os.getcwd()

Rmdir () Yöntem

Rmdir () metodu yöntemindeki bir bağımsız değişken olarak geçirilir dizini siler.

Bir dizini kaldırmadan önce içindeki tüm içerik kaldırılmalıdır.

Sözdizimi

os.rmdir('dirname')

Misal

Aşağıda "/ tmp / test" dizinini kaldırmak için örnek verilmiştir. Dizinin tam olarak nitelenmiş ismini vermesi gerekir, aksi takdirde o dizini mevcut dizinde arar.

#!/usr/bin/python
import os

# This would  remove "/tmp/test"  directory.
os.rmdir( "/tmp/test"  )

Dosya ve Dizinle İlgili Yöntemler

Windows ve Unix işletim sistemlerindeki dosyaları ve dizinleri işlemek ve değiştirmek için çok çeşitli yardımcı yöntemler sağlayan üç önemli kaynak vardır. Bunlar aşağıdaki gibidir -

  • Dosya Nesnesi Yöntemleri : Dosya nesnesi, dosyaları işlemek için işlevler sağlar.

  • İşletim Sistemi Nesne Yöntemleri : Bu, dosyaları ve dizinleri işlemek için yöntemler sağlar.

Python, Python programlarınızdaki herhangi bir beklenmedik hatayı gidermek ve bunlara hata ayıklama yetenekleri eklemek için çok önemli iki özellik sağlar -

  • Exception Handling- Bu, bu eğitimde ele alınacaktır. Python'da bulunan standart İstisnaların bir listesi: Standart İstisnalar .

  • Assertions- Bu , Python eğitimindeki İddialar bölümünde ele alınacaktır .

Standart İstisnalar Listesi -

Sr.No. İstisna Adı ve Açıklaması
1

Exception

Tüm istisnalar için temel sınıf

2

StopIteration

Bir yineleyicinin next () yöntemi herhangi bir nesneyi işaret etmediğinde yükseltilir.

3

SystemExit

Sys.exit () işlevi tarafından oluşturulmuştur.

4

StandardError

StopIteration ve SystemExit dışındaki tüm yerleşik istisnalar için temel sınıf.

5

ArithmeticError

Sayısal hesaplamada meydana gelen tüm hatalar için temel sınıf.

6

OverflowError

Bir hesaplama, sayısal bir tür için maksimum sınırı aştığında yükseltilir.

7

FloatingPointError

Bir kayan nokta hesaplaması başarısız olduğunda yükseltilir.

8

ZeroDivisionError

Tüm sayısal türler için sıfıra bölme veya modulo gerçekleştiğinde yükseltilir.

9

AssertionError

Assert ifadesinin başarısız olması durumunda yükseltilir.

10

AttributeError

Öznitelik referansının veya atamasının başarısız olması durumunda yükseltilir.

11

EOFError

Raw_input () veya input () işlevinden herhangi bir girdi olmadığında ve dosyanın sonuna ulaşıldığında yükseltilir.

12

ImportError

Bir ithalat ifadesi başarısız olduğunda oluşturulur.

13

KeyboardInterrupt

Kullanıcı programın yürütülmesini genellikle Ctrl + c tuşlarına basarak durdurduğunda yükseltilir.

14

LookupError

Tüm arama hataları için temel sınıf.

15

IndexError

Bir dizide dizin bulunmadığında yükseltilir.

16

KeyError

Sözlükte belirtilen anahtar bulunamadığında yükseltilir.

17

NameError

Yerel veya genel ad alanında bir tanımlayıcı bulunamadığında oluşturulur.

18

UnboundLocalError

Bir işlev veya yöntemdeki yerel bir değişkene erişmeye çalışırken yükseltilir, ancak ona hiçbir değer atanmamıştır.

19

EnvironmentError

Python ortamı dışında meydana gelen tüm istisnalar için temel sınıf.

20

IOError

Var olmayan bir dosyayı açmaya çalışırken print deyimi veya open () işlevi gibi bir girdi / çıktı işlemi başarısız olduğunda yükseltilir.

21

IOError

İşletim sistemiyle ilgili hatalar için oluşturulmuştur.

22

SyntaxError

Python sözdiziminde bir hata olduğunda ortaya çıkar.

23

IndentationError

Girinti doğru şekilde belirtilmediğinde yükseltilir.

24

SystemError

Yorumlayıcı dahili bir sorun bulduğunda yükseltilir, ancak bu hatayla karşılaşıldığında Python yorumlayıcısı çıkmaz.

25

SystemExit

Python yorumlayıcısından sys.exit () işlevi kullanılarak çıkıldığında oluşturulur. Kodda ele alınmazsa, yorumlayıcının çıkmasına neden olur.

26

TypeError

Belirtilen veri türü için geçersiz olan bir işlem veya işlev denendiğinde oluşturulur.

27

ValueError

Bir veri türünün yerleşik işlevi geçerli türde bağımsız değişkenlere sahipse, ancak bağımsız değişkenler belirtilen geçersiz değerlere sahip olduğunda oluşturulur.

28

RuntimeError

Oluşturulan bir hata herhangi bir kategoriye girmediğinde ortaya çıkar.

29

NotImplementedError

Miras alınan bir sınıfta uygulanması gereken soyut bir yöntem gerçekte uygulanmadığında ortaya çıkar.

Python'da İddialar

Bir iddia, programı test etmeyi bitirdiğinizde açabileceğiniz veya kapatabileceğiniz bir akıl sağlığı kontrolüdür.

Bir iddiayı düşünmenin en kolay yolu, onu bir iddiaya benzetmektir. raise-ifbeyan (veya daha doğru olmak gerekirse, eğer değilse yükseltme ifadesi). Bir ifade test edilir ve sonuç yanlış gelirse bir istisna ortaya çıkar.

İddialar, 1.5 sürümünde tanıtılan Python'un en yeni anahtar sözcüğü olan assert deyimiyle gerçekleştirilir.

Programcılar genellikle geçerli girdiyi kontrol etmek için bir işlevin başlangıcına ve geçerli çıktıyı kontrol etmek için bir işlev çağrısından sonra onaylar koyarlar.

assert Bildirimi

Python, bir assert ifadesiyle karşılaştığında, beraberindeki ifadeyi değerlendirir ve bu umarız doğrudur. İfade yanlışsa, Python bir AssertionError istisnası oluşturur.

Assert için sözdizimi -

assert Expression[, Arguments]

İddia başarısız olursa, Python, AssertionError için argüman olarak ArgumentExpression kullanır. AssertionError istisnaları, try-exclude deyimi kullanılarak diğer herhangi bir istisna gibi yakalanabilir ve işlenebilir, ancak ele alınmazsa, programı sonlandıracak ve bir geri bildirim üretecektir.

Misal

Burada bir sıcaklığı Kelvin derecesinden Fahrenheit derecesine çeviren bir fonksiyon var. Sıfır derece Kelvin olabileceği kadar soğuk olduğu için, fonksiyon negatif bir sıcaklık görürse kurtarır -

#!/usr/bin/python
def KelvinToFahrenheit(Temperature):
   assert (Temperature >= 0),"Colder than absolute zero!"
   return ((Temperature-273)*1.8)+32
print KelvinToFahrenheit(273)
print int(KelvinToFahrenheit(505.78))
print KelvinToFahrenheit(-5)

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

32.0
451
Traceback (most recent call last):
File "test.py", line 9, in <module>
print KelvinToFahrenheit(-5)
File "test.py", line 4, in KelvinToFahrenheit
assert (Temperature >= 0),"Colder than absolute zero!"
AssertionError: Colder than absolute zero!

İstisna nedir?

Bir istisna, programın komutlarının normal akışını bozan bir programın yürütülmesi sırasında meydana gelen bir olaydır. Genel olarak, bir Python betiği baş edemeyeceği bir durumla karşılaştığında, bir istisna yaratır. Bir istisna, bir hatayı temsil eden bir Python nesnesidir.

Bir Python betiği bir istisna oluşturduğunda, istisnayı hemen ele almalıdır, aksi takdirde sonlanır ve çıkar.

Bir istisnayı ele almak

Bazı varsa şüpheli bir duruma neden olabilir kodu, sen a şüpheli kod yerleştirerek programı savunabilirtry:blok. Try: blocktan sonra birexcept: ifadesi, ardından sorunu olabildiğince zarif bir şekilde ele alan bir kod bloğu gelir.

Sözdizimi

İşte basit bir try sözdizimi .... dışında ... else blokları -

try:
   You do your operations here;
   ......................
except ExceptionI:
   If there is ExceptionI, then execute this block.
except ExceptionII:
   If there is ExceptionII, then execute this block.
   ......................
else:
   If there is no exception then execute this block.

Yukarıda bahsedilen söz dizimiyle ilgili birkaç önemli nokta:

  • Tek bir try ifadesinde birden çok istisna ifadesi bulunabilir. Bu, try bloğu farklı tipte istisnalar atabilecek ifadeler içerdiğinde kullanışlıdır.

  • Ayrıca, herhangi bir istisnayı işleyen genel bir istisna cümlesi de sağlayabilirsiniz.

  • Hariç tümceciklerinden sonra, başka bir yan tümce ekleyebilirsiniz. Try: bloğundaki kod bir istisna oluşturmazsa, else-bloğundaki kod yürütülür.

  • Else-blok, try: bloğunun korumasına ihtiyaç duymayan kodlar için iyi bir yerdir.

Misal

Bu örnek bir dosyayı açar, içeriği, dosyasına yazar ve zarif bir şekilde çıkar çünkü hiçbir sorun yoktur -

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can\'t find file or read data"
else:
   print "Written content in the file successfully"
   fh.close()

Bu, aşağıdaki sonucu verir -

Written content in the file successfully

Misal

Bu örnek, yazma izniniz olmayan bir dosyayı açmaya çalışır, bu nedenle bir istisna oluşturur -

#!/usr/bin/python

try:
   fh = open("testfile", "r")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can\'t find file or read data"
else:
   print "Written content in the file successfully"

Bu, aşağıdaki sonucu verir -

Error: can't find file or read data

Dışında Özel Durum Clause

Ayrıca, aşağıdaki gibi tanımlanmış istisnalar olmadan da kullanabilirsiniz -

try:
   You do your operations here;
   ......................
except:
   If there is any exception, then execute this block.
   ......................
else:
   If there is no exception then execute this block.

Bu tür bir try-exceptifadesi ortaya çıkan tüm istisnaları yakalar. Bu türden bir try-exclude deyimini kullanmak iyi bir programlama uygulaması olarak kabul edilmez, çünkü tüm istisnaları yakalar ancak programcının oluşabilecek sorunun temel nedenini belirlemesini sağlamaz.

Hariç Çoklu İstisnalar ile Clause

Birden çok istisnayı ele almak için aynı exclu ifadesini aşağıdaki gibi de kullanabilirsiniz -

try:
   You do your operations here;
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   If there is any exception from the given exception list, 
   then execute this block.
   ......................
else:
   If there is no exception then execute this block.

Deneme Sonunda Madde

Kullanabilirsin finally: ile birlikte blok try:blok. Nihayet bloğu, try bloğu bir istisna ortaya çıkarsa da çıkmasa da, yürütülmesi gereken herhangi bir kodu yerleştirmek için bir yerdir. Try-final ifadesinin sözdizimi şudur -

try:
   You do your operations here;
   ......................
   Due to any exception, this may be skipped.
finally:
   This would always be executed.
   ......................

Başka bir cümle ile birlikte bir last cümlesini de kullanamazsınız .

Misal

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
finally:
   print "Error: can\'t find file or read data"

Dosyayı yazma modunda açma izniniz yoksa, bu aşağıdaki sonucu verecektir -

Error: can't find file or read data

Aynı örnek aşağıdaki gibi daha net yazılabilir -

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   try:
      fh.write("This is my test file for exception handling!!")
   finally:
      print "Going to close the file"
      fh.close()
except IOError:
   print "Error: can\'t find file or read data"

Bir özel atılmış edildiğinde deneyin bloğu, uygulama anında geçer en sonunda blok. Tüm ifadeler sonra nihayet bloğu yürütülür, istisna tekrar yükseltilir ve işlenme şeklinden hariç ifadeleri ise bir sonraki daha yüksek tabakada mevcut deneyin-hariç açıklamada.

Bir İstisna Argümanı

Bir istisna , sorun hakkında ek bilgi veren bir değer olan bir argümana sahip olabilir . Argümanın içeriği istisnaya göre değişir. Hariç tümcesinde aşağıdaki gibi bir değişken sağlayarak bir istisnanın argümanını yakalarsınız -

try:
   You do your operations here;
   ......................
except ExceptionType, Argument:
   You can print value of Argument here...

Kodu tek bir istisnayı işleyecek şekilde yazarsanız, bir değişkenin istisnanın adının dışında olmasını sağlayabilirsiniz. Birden çok istisnayı yakalıyorsanız, istisnanın başlığını takip eden bir değişkeniniz olabilir.

Bu değişken, çoğunlukla istisnanın nedenini içeren istisnanın değerini alır. Değişken, tek bir değeri veya bir demet biçiminde birden çok değeri alabilir. Bu demet genellikle hata dizesini, hata numarasını ve bir hata konumunu içerir.

Misal

Aşağıda tek bir istisna örneği verilmiştir -

#!/usr/bin/python

# Define a function here.
def temp_convert(var):
   try:
      return int(var)
   except ValueError, Argument:
      print "The argument does not contain numbers\n", Argument

# Call above function here.
temp_convert("xyz");

Bu, aşağıdaki sonucu verir -

The argument does not contain numbers
invalid literal for int() with base 10: 'xyz'

İstisnaların Oluşturulması

Yükseltme ifadesini kullanarak istisnaları çeşitli şekillerde artırabilirsiniz. İçin genel sözdizimiraise ifadesi aşağıdaki gibidir.

Sözdizimi

raise [Exception [, args [, traceback]]]

Burada Exception , istisna türüdür (örneğin, NameError) ve argüman , istisna argümanı için bir değerdir. Argüman isteğe bağlıdır; sağlanmadıysa, istisna bağımsız değişkeni Yok şeklindedir.

Son argüman olan traceback de isteğe bağlıdır (ve pratikte nadiren kullanılır) ve varsa istisna için kullanılan izleme nesnesidir.

Misal

Bir istisna bir dizge, sınıf veya bir nesne olabilir. Python çekirdeğinin ortaya çıkardığı istisnaların çoğu, sınıfın bir örneği olan bir argümanla birlikte sınıflardır. Yeni istisnaları tanımlamak oldukça kolaydır ve şu şekilde yapılabilir -

def functionName( level ):
   if level < 1:
      raise "Invalid level!", level
      # The code below to this would not be executed
      # if we raise the exception

Note:Bir istisnayı yakalamak için, bir "exclude" cümlesi, sınıf nesnesine veya basit dizeye atılan aynı istisnaya başvurmalıdır. Örneğin, yukarıdaki istisnayı yakalamak için, hariç tümceyi aşağıdaki gibi yazmalıyız -

try:
   Business Logic here...
except "Invalid level!":
   Exception handling here...
else:
   Rest of the code here...

Kullanıcı Tanımlı İstisnalar

Python ayrıca, standart yerleşik istisnalardan sınıfları türeterek kendi istisnalarınızı oluşturmanıza da olanak tanır.

İşte RuntimeError ile ilgili bir örnek . Burada, RuntimeError'dan alt sınıflara ayrılmış bir sınıf oluşturulur . Bu, bir istisna yakalandığında daha spesifik bilgiler görüntülemeniz gerektiğinde kullanışlıdır.

Try bloğunda, kullanıcı tanımlı istisna ortaya çıkar ve dış bloğa yakalanır. E değişkeni, Networkerror sınıfının bir örneğini oluşturmak için kullanılır .

class Networkerror(RuntimeError):
   def __init__(self, arg):
      self.args = arg

Dolayısıyla, yukarıda sınıfı tanımladıktan sonra, istisnayı aşağıdaki gibi ortaya çıkarabilirsiniz -

try:
   raise Networkerror("Bad hostname")
except Networkerror,e:
   print e.args

Python, var olduğundan beri nesne yönelimli bir dil olmuştur. Bu nedenle, sınıflar ve nesneler oluşturmak ve kullanmak düpedüz kolaydır. Bu bölüm, Python'un nesne yönelimli programlama desteğini kullanma konusunda uzman olmanıza yardımcı olur.

Nesne yönelimli (OO) programlamayla ilgili daha önce herhangi bir deneyiminiz yoksa, temel kavramları kavramak için bununla ilgili bir giriş kursuna veya en azından bir tür öğreticiye başvurmak isteyebilirsiniz.

Bununla birlikte, sizi hızlandırmak için Nesne Yönelimli Programlamanın (OOP) küçük bir tanıtımı:

OOP Terminolojisine Genel Bakış

  • Class- Sınıfın herhangi bir nesnesini karakterize eden bir öznitelik kümesini tanımlayan bir nesne için kullanıcı tanımlı bir prototip. Öznitelikler veri üyeleri (sınıf değişkenleri ve örnek değişkenleri) ve yöntemlerdir ve nokta notasyonu ile erişilir.

  • Class variable- Bir sınıfın tüm örnekleri tarafından paylaşılan bir değişken. Sınıf değişkenleri bir sınıf içinde ancak sınıfın yöntemlerinden herhangi birinin dışında tanımlanır. Sınıf değişkenleri, örnek değişkenler kadar sık ​​kullanılmaz.

  • Data member - Bir sınıf ve nesneleriyle ilişkili verileri tutan bir sınıf değişkeni veya örnek değişkeni.

  • Function overloading- Belirli bir işleve birden fazla davranışın atanması. Gerçekleştirilen işlem, ilgili nesnelerin veya argümanların türüne göre değişir.

  • Instance variable - Bir yöntem içinde tanımlanan ve yalnızca bir sınıfın geçerli örneğine ait olan bir değişken.

  • Inheritance - Bir sınıfın özelliklerinin ondan türetilen diğer sınıflara aktarılması.

  • Instance- Belirli bir sınıfa ait bireysel bir nesne. Örneğin, Circle sınıfına ait bir nesne obj, Circle sınıfının bir örneğidir.

  • Instantiation - Bir sınıfın bir örneğinin oluşturulması.

  • Method - Sınıf tanımında tanımlanan özel bir işlev türü.

  • Object- Sınıfına göre tanımlanan benzersiz bir veri yapısı örneği. Bir nesne hem veri üyelerini (sınıf değişkenleri ve örnek değişkenleri) hem de yöntemleri içerir.

  • Operator overloading - Belirli bir operatöre birden fazla işlev atanması.

Sınıf Oluşturma

Sınıf deyimi yeni bir sınıf tanımını oluşturur. Sınıfın adı hemen anahtar kelime şu sınıfını aşağıdaki gibi iki nokta üst üste -

class ClassName:
   'Optional class documentation string'
   class_suite
  • Sınıfın, ClassName .__ doc__ aracılığıyla erişilebilen bir dokümantasyon dizesi vardır .

  • Class_suite sınıfı üyelerini, veri özelliklerini ve işlevlerini tanımlayan tüm bileşen tabloların oluşur.

Misal

Aşağıda basit bir Python sınıfı örneği verilmiştir -

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary
  • Değişken empCount , değeri bir bu sınıfın tüm örnekleri arasında paylaşılan bir sınıf değişkendir. Bu, Employee.empCount olarak sınıfın içinden veya dışından erişilebilir .

  • İlk yöntem __init __ () , bu sınıfın yeni bir örneğini oluşturduğunuzda Python'un çağırdığı sınıf yapıcısı veya başlatma yöntemi olarak adlandırılan özel bir yöntemdir.

  • Her yöntemin ilk bağımsız değişkeninin self olması dışında normal işlevler gibi diğer sınıf yöntemlerini bildirirsiniz . Python sizin için listeye self argümanı ekler ; yöntemleri aradığınızda eklemenize gerek yoktur.

Örnek Nesneleri Oluşturma

Bir sınıfın örneklerini oluşturmak için, sınıf adını kullanarak sınıfı çağırır ve __init__ yönteminin kabul ettiği bağımsız değişkenleri iletirsiniz .

"This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
"This would create second object of Employee class"
emp2 = Employee("Manni", 5000)

Özelliklere Erişim

Nesne ile nokta operatörünü kullanarak nesnenin niteliklerine erişirsiniz. Sınıf değişkenine aşağıdaki gibi sınıf adı kullanılarak erişilebilir -

emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

Şimdi, tüm kavramları bir araya getirirsek -

#!/usr/bin/python

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

"This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
"This would create second object of Employee class"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Name :  Zara ,Salary:  2000
Name :  Manni ,Salary:  5000
Total Employee 2

İstediğiniz zaman sınıfların ve nesnelerin niteliklerini ekleyebilir, kaldırabilir veya değiştirebilirsiniz -

emp1.age = 7  # Add an 'age' attribute.
emp1.age = 8  # Modify 'age' attribute.
del emp1.age  # Delete 'age' attribute.

Niteliklere erişmek için normal ifadeleri kullanmak yerine aşağıdaki işlevleri kullanabilirsiniz -

  • getattr(obj, name[, default]) - nesnenin özniteliğine erişmek için.

  • hasattr(obj,name) - bir özniteliğin var olup olmadığını kontrol etmek için.

  • setattr(obj,name,value)- bir öznitelik ayarlamak için. Eğer öznitelik yoksa, o zaman yaratılacaktır.

  • delattr(obj, name) - bir özniteliği silmek için.

hasattr(emp1, 'age')    # Returns true if 'age' attribute exists
getattr(emp1, 'age')    # Returns value of 'age' attribute
setattr(emp1, 'age', 8) # Set attribute 'age' at 8
delattr(empl, 'age')    # Delete attribute 'age'

Yerleşik Sınıf Özellikleri

Her Python sınıfı yerleşik öznitelikleri izler ve bunlara diğer öznitelikler gibi nokta operatörü kullanılarak erişilebilir -

  • __dict__ - Sınıfın ad alanını içeren sözlük.

  • __doc__ - Sınıf dokümantasyon dizesi veya tanımlanmamışsa hiçbiri.

  • __name__ - Sınıf adı.

  • __module__- Sınıfın tanımlandığı modül adı. Bu özellik, etkileşimli modda "__main__" dir.

  • __bases__ - Temel sınıf listesindeki görülme sırasına göre temel sınıfları içeren muhtemelen boş bir demet.

Yukarıdaki sınıf için tüm bu özelliklere erişmeye çalışalım -

#!/usr/bin/python

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

print "Employee.__doc__:", Employee.__doc__
print "Employee.__name__:", Employee.__name__
print "Employee.__module__:", Employee.__module__
print "Employee.__bases__:", Employee.__bases__
print "Employee.__dict__:", Employee.__dict__

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Employee.__doc__: Common base class for all employees
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: ()
Employee.__dict__: {'__module__': '__main__', 'displayCount':
<function displayCount at 0xb7c84994>, 'empCount': 2, 
'displayEmployee': <function displayEmployee at 0xb7c8441c>, 
'__doc__': 'Common base class for all employees', 
'__init__': <function __init__ at 0xb7c846bc>}

Nesneleri Yok Etme (Çöp Toplama)

Python, bellek alanını boşaltmak için gereksiz nesneleri (yerleşik türler veya sınıf örnekleri) otomatik olarak siler. Python'un artık kullanımda olmayan bellek bloklarını periyodik olarak geri talep ettiği işlem, Çöp Toplama olarak adlandırılır.

Python'un çöp toplayıcısı program yürütme sırasında çalışır ve bir nesnenin referans sayısı sıfıra ulaştığında tetiklenir. Bir nesnenin referans sayısı, onu gösteren takma adların sayısı değiştikçe değişir.

Yeni bir ad atandığında veya bir kaba (liste, kayıt veya sözlük) yerleştirildiğinde bir nesnenin referans sayısı artar. Del ile silindiğinde , referansı yeniden atandığında veya referansı kapsam dışına çıktığında nesnenin referans sayısı azalır . Bir nesnenin referans sayısı sıfıra ulaştığında, Python bunu otomatik olarak toplar.

a = 40      # Create object <40>
b = a       # Increase ref. count  of <40> 
c = [b]     # Increase ref. count  of <40> 

del a       # Decrease ref. count  of <40>
b = 100     # Decrease ref. count  of <40> 
c[0] = -1   # Decrease ref. count  of <40>

Normalde çöp toplayıcının öksüz bir örneği yok edip alanını geri aldığını fark etmezsiniz. Ancak bir sınıf , örnek yok edilmek üzereyken çağrılan ve yıkıcı adı verilen __del __ () özel yöntemini uygulayabilir . Bu yöntem, bir örnek tarafından kullanılan bellek dışı kaynakları temizlemek için kullanılabilir.

Misal

Bu __del __ () yıkıcı, yok edilmek üzere olan bir örneğin sınıf adını yazdırır -

#!/usr/bin/python

class Point:
   def __init__( self, x=0, y=0):
      self.x = x
      self.y = y
   def __del__(self):
      class_name = self.__class__.__name__
      print class_name, "destroyed"

pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3) # prints the ids of the obejcts
del pt1
del pt2
del pt3

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

3083401324 3083401324 3083401324
Point destroyed

Note- İdeal olarak, sınıflarınızı ayrı bir dosyada tanımlamalısınız, sonra bunları import deyimini kullanarak ana program dosyanıza aktarmalısınız .

Sınıf Mirası

Sıfırdan başlamak yerine, ana sınıfı yeni sınıf adından sonra parantez içinde listeleyerek onu önceden var olan bir sınıftan türeterek bir sınıf oluşturabilirsiniz.

Alt sınıf, üst sınıfının özniteliklerini devralır ve bu öznitelikleri alt sınıfta tanımlanmış gibi kullanabilirsiniz. Bir alt sınıf, üst öğenin veri üyelerini ve yöntemlerini de geçersiz kılabilir.

Sözdizimi

Türetilmiş sınıflar, ana sınıflarına çok benzer şekilde bildirilir; ancak, miras alınacak temel sınıfların bir listesi, sınıf adından sonra verilir -

class SubClassName (ParentClass1[, ParentClass2, ...]):
   'Optional class documentation string'
   class_suite

Misal

#!/usr/bin/python

class Parent:        # define parent class
   parentAttr = 100
   def __init__(self):
      print "Calling parent constructor"

   def parentMethod(self):
      print 'Calling parent method'

   def setAttr(self, attr):
      Parent.parentAttr = attr

   def getAttr(self):
      print "Parent attribute :", Parent.parentAttr

class Child(Parent): # define child class
   def __init__(self):
      print "Calling child constructor"

   def childMethod(self):
      print 'Calling child method'

c = Child()          # instance of child
c.childMethod()      # child calls its method
c.parentMethod()     # calls parent's method
c.setAttr(200)       # again call parent's method
c.getAttr()          # again call parent's method

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Calling child constructor
Calling child method
Calling parent method
Parent attribute : 200

Benzer şekilde, birden çok üst sınıftan bir sınıfı aşağıdaki gibi sürdürebilirsiniz -

class A:        # define your class A
.....

class B:         # define your class B
.....

class C(A, B):   # subclass of A and B
.....

İki sınıfın ve örneklerin ilişkilerini kontrol etmek için issubclass () veya isinstance () işlevlerini kullanabilirsiniz.

  • issubclass(sub, sup) boolean işlevi, verilen alt sınıfsa true değerini döndürür sub gerçekten de süper sınıfın bir alt sınıfıdır sup.

  • isinstance(obj, Class)obj , Class Class'ın bir örneğiyse veya Class'ın bir alt sınıfının bir örneğiyse boolean işlevi true değerini döndürür

Geçersiz Kılma Yöntemleri

Her zaman üst sınıf yöntemlerinizi geçersiz kılabilirsiniz. Ebeveynin yöntemlerini geçersiz kılmanın bir nedeni, alt sınıfınızda özel veya farklı işlevler isteyebilmenizdir.

Misal

#!/usr/bin/python

class Parent:        # define parent class
   def myMethod(self):
      print 'Calling parent method'

class Child(Parent): # define child class
   def myMethod(self):
      print 'Calling child method'

c = Child()          # instance of child
c.myMethod()         # child calls overridden method

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Calling child method

Temel Aşırı Yükleme Yöntemleri

Aşağıdaki tablo, kendi sınıflarınızda geçersiz kılabileceğiniz bazı genel işlevleri listelemektedir -

Sr.No. Yöntem, Açıklama ve Örnek Çağrı
1

__init__ ( self [,args...] )

Oluşturucu (isteğe bağlı bağımsız değişkenlerle)

Örnek Çağrı: obj = className (değiştirgeler)

2

__del__( self )

Destructor, bir nesneyi siler

Örnek Çağrı: del obj

3

__repr__( self )

Değerlendirilebilir dize gösterimi

Örnek Çağrı: repr (obj)

4

__str__( self )

Yazdırılabilir dize gösterimi

Örnek Çağrı: str (obj)

5

__cmp__ ( self, x )

Nesne karşılaştırması

Örnek Çağrı: cmp (obj, x)

Operatörlerin Aşırı Yüklenmesi

İki boyutlu vektörleri temsil etmek için bir Vector sınıfı oluşturduğunuzu varsayalım, bunları eklemek için artı operatörünü kullandığınızda ne olur? Büyük ihtimalle Python sana bağıracak.

Bununla birlikte, vektör toplamayı gerçekleştirmek için sınıfınızda __add__ yöntemini tanımlayabilirsiniz ve ardından artı operatörü beklentiye göre davranır -

Misal

#!/usr/bin/python

class Vector:
   def __init__(self, a, b):
      self.a = a
      self.b = b

   def __str__(self):
      return 'Vector (%d, %d)' % (self.a, self.b)
   
   def __add__(self,other):
      return Vector(self.a + other.a, self.b + other.b)

v1 = Vector(2,10)
v2 = Vector(5,-2)
print v1 + v2

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Vector(7,8)

Veri Gizleme

Bir nesnenin nitelikleri, sınıf tanımının dışında görülebilir veya görünmeyebilir. Öznitelikleri çift alt çizgi önekiyle adlandırmanız gerekir ve bu öznitelikler daha sonra yabancılar tarafından doğrudan görülemez.

Misal

#!/usr/bin/python

class JustCounter:
   __secretCount = 0
  
   def count(self):
      self.__secretCount += 1
      print self.__secretCount

counter = JustCounter()
counter.count()
counter.count()
print counter.__secretCount

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

1
2
Traceback (most recent call last):
   File "test.py", line 12, in <module>
      print counter.__secretCount
AttributeError: JustCounter instance has no attribute '__secretCount'

Python, adı sınıf adını içerecek şekilde dahili olarak değiştirerek bu üyeleri korur. Object._className__attrName gibi özniteliklere erişebilirsiniz . Son satırınızı aşağıdaki gibi değiştirirseniz, o zaman sizin için çalışır -

.........................
print counter._JustCounter__secretCount

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

1
2
2

Bir düzenli ifade eşleşmesi veya desende düzenlenen özel bir sözdizimi kullanarak diğer dizeleri veya dizeleri setleri, bulmanıza yardımcı karakterlerin özel dizisidir. Düzenli ifadeler, UNIX dünyasında yaygın olarak kullanılmaktadır.

Modül rePython'da Perl benzeri düzenli ifadeler için tam destek sağlar. Re modülü, düzenli ifadeyi derlerken veya kullanırken bir hata oluşursa, istisna re.error'ı yükseltir.

Normal ifadeleri işlemek için kullanılacak iki önemli işlevi ele alacağız. Ama önce küçük bir şey var: Düzenli ifadede kullanıldıklarında özel bir anlama sahip olacak çeşitli karakterler var. Normal ifadelerle uğraşırken herhangi bir karışıklığı önlemek için, Ham Dizelerir'expression'.

maç İşlevi

Bu fonksiyon girişimleri RE maç için deseni için dize opsiyonel bayraklar .

İşte bu işlevin sözdizimi -

re.match(pattern, string, flags=0)

İşte parametrelerin açıklaması -

Sr.No. Parametre ve Açıklama
1

pattern

Bu, eşleştirilecek normal ifadedir.

2

string

Bu, dizenin başındaki modelle eşleşecek şekilde aranacak dizedir.

3

flags

Bitsel OR (|) kullanarak farklı bayraklar belirtebilirsiniz. Bunlar, aşağıdaki tabloda listelenen değiştiricilerdir.

Re.match fonksiyonu döner birmatch başarıya itiraz, Nonebaşarısızlık üzerine. Kullandığımız grubu (num) veya grupları () işlevimatch eşleşen ifade elde etmek için nesne.

Sr.No. Eşleştirme Nesne Yöntemi ve Açıklaması
1

group(num=0)

Bu yöntem tüm eşleşmeyi (veya belirli bir alt grup numarasını) döndürür

2

groups()

Bu yöntem, bir tuple içindeki tüm eşleşen alt grupları döndürür (hiç yoksa boş)

Misal

#!/usr/bin/python
import re

line = "Cats are smarter than dogs"

matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
   print "matchObj.group() : ", matchObj.group()
   print "matchObj.group(1) : ", matchObj.group(1)
   print "matchObj.group(2) : ", matchObj.group(2)
else:
   print "No match!!"

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

arama Fonksiyonu

Bu işlev , isteğe bağlı bayraklarla dizge içinde RE örüntüsünün ilk oluşumunu arar .

İşte bu işlevin sözdizimi -

re.search(pattern, string, flags=0)

İşte parametrelerin açıklaması -

Sr.No. Parametre ve Açıklama
1

pattern

Bu, eşleştirilecek normal ifadedir.

2

string

Bu, dizenin herhangi bir yerindeki modelle eşleşmesi için aranacak dizedir.

3

flags

Bitsel OR (|) kullanarak farklı bayraklar belirtebilirsiniz. Bunlar, aşağıdaki tabloda listelenen değiştiricilerdir.

Re.search fonksiyonu döner birmatch başarıya itiraz, nonebaşarısızlık üzerine. Kullandığımız grubu (num) veya grupları () işlevimatch eşleşen ifade elde etmek için nesne.

Sr.No. Eşleştirme Nesne Yöntemleri ve Açıklaması
1

group(num=0)

Bu yöntem tüm eşleşmeyi (veya belirli bir alt grup numarasını) döndürür

2

groups()

Bu yöntem, bir tuple içindeki tüm eşleşen alt grupları döndürür (hiç yoksa boş)

Misal

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:
   print "searchObj.group() : ", searchObj.group()
   print "searchObj.group(1) : ", searchObj.group(1)
   print "searchObj.group(2) : ", searchObj.group(2)
else:
   print "Nothing found!!"

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

Aramaya Karşı Eşleştirme

Python, normal ifadelere dayalı iki farklı ilkel işlem sunar: match sadece dizenin başında bir eşleşme olup olmadığını kontrol ederken search dizenin herhangi bir yerinde bir eşleşme olup olmadığını kontrol eder (bu Perl'in varsayılan olarak yaptığı şeydir).

Misal

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
   print "search --> searchObj.group() : ", searchObj.group()
else:
   print "Nothing found!!"

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

No match!!
search --> searchObj.group() :  dogs

Ara ve Değiştir

En önemlilerinden biri re normal ifadeler kullanan yöntemler sub.

Sözdizimi

re.sub(pattern, repl, string, max=0)

Bu yöntem, RE tüm oluşumları yerine model olarak dizge ile repl sürece tüm oluşumları ikame maksimum sağladı. Bu yöntem değiştirilmiş dizeyi döndürür.

Misal

#!/usr/bin/python
import re

phone = "2004-959-559 # This is Phone Number"

# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print "Phone Num : ", num

# Remove anything other than digits
num = re.sub(r'\D', "", phone)    
print "Phone Num : ", num

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Phone Num :  2004-959-559
Phone Num :  2004959559

Normal İfade Değiştiriciler: Seçenek İşaretleri

Normal ifade değişmezleri, eşleşmenin çeşitli yönlerini kontrol etmek için isteğe bağlı bir değiştirici içerebilir. Değiştiriciler, isteğe bağlı bir bayrak olarak belirtilir. Daha önce gösterildiği gibi özel OR (|) kullanarak birden çok değiştirici sağlayabilirsiniz ve bunlardan biri ile temsil edilebilir

Sr.No. Değiştirici ve Açıklama
1

re.I

Büyük / küçük harfe duyarlı olmayan eşleştirme gerçekleştirir.

2

re.L

Kelimeleri mevcut yerel ayara göre yorumlar. Bu yorum, alfabetik grubu (\ w ve \ W) ve ayrıca kelime sınırı davranışını (\ b ve \ B) etkiler.

3

re.M

$ Değerinin bir satırın sonuyla eşleşmesini sağlar (dizenin yalnızca sonu değil) ve ^ herhangi bir satırın başlangıcıyla eşleşmesini sağlar (yalnızca dizenin başlangıcı değil).

4

re.S

Satırsonu dahil herhangi bir karakterle nokta (nokta) eşleşmesini sağlar.

5

re.U

Unicode karakter kümesine göre harfleri yorumlar. Bu bayrak \ w, \ W, \ b, \ B davranışını etkiler.

6

re.X

"Keskin" normal ifade sözdizimine izin verir. Beyaz boşluğu yok sayar (bir küme [] içinde veya ters eğik çizgiyle kaçıldığında hariç) ve çıkış karaktersiz # işaretini yorum işaretçisi olarak kabul eder.

Normal İfade Kalıpları

Kontrol karakterleri hariç, (+ ? . * ^ $ ( ) [ ] { } | \), tüm karakterler kendileriyle eşleşir. Bir kontrol karakterinin önüne ters eğik çizgi koyarak kaçabilirsiniz.

Aşağıdaki tablo Python'da mevcut olan normal ifade sözdizimini listeler -

Sr.No. Desen ve Açıklama
1

^

Satırın başıyla eşleşir.

2

$

Satırın sonuyla eşleşir.

3

.

Yeni satır hariç herhangi bir tek karakterle eşleşir. M seçeneğini kullanmak, satırsonu ile eşleşmesine de izin verir.

4

[...]

Parantez içindeki herhangi bir tek karakterle eşleşir.

5

[^...]

Parantez içinde olmayan herhangi bir karakterle eşleşir

6

re*

Önceki ifadenin 0 veya daha fazla oluşumuyla eşleşir.

7

re+

Önceki ifadenin 1 veya daha fazla oluşumuyla eşleşir.

8

re?

Önceki ifadenin 0 veya 1 oluşumuyla eşleşir.

9

re{ n}

Önceki ifadenin tam olarak n sayıda oluşumuyla eşleşir.

10

re{ n,}

Önceki ifadenin n veya daha fazla oluşumuyla eşleşir.

11

re{ n, m}

Önceki ifadenin en az n ve en çok m oluşumuyla eşleşir.

12

a| b

A veya b ile eşleşir.

13

(re)

Normal ifadeleri gruplandırır ve eşleşen metni hatırlar.

14

(?imx)

Normal bir ifade içinde geçici olarak i, m veya x seçenekleri arasında geçiş yapar. Parantez içindeyse, yalnızca o alan etkilenir.

15

(?-imx)

Normal bir ifade içindeki i, m veya x seçeneklerini geçici olarak kapatır. Parantez içindeyse, yalnızca o alan etkilenir.

16

(?: re)

Normal ifadeleri eşleşen metni hatırlamadan gruplar.

17

(?imx: re)

Parantez içindeki i, m veya x seçeneklerini geçici olarak değiştirir.

18

(?-imx: re)

Parantez içindeki i, m veya x seçeneklerini geçici olarak kapatır.

19

(?#...)

Yorum Yap.

20

(?= re)

Bir model kullanarak konumu belirtir. Aralığı yok.

21

(?! re)

Kalıp olumsuzlamasını kullanarak konumu belirtir. Aralığı yok.

22

(?> re)

Geriye dönük izleme olmaksızın bağımsız desenle eşleşir.

23

\w

Kelime karakterleriyle eşleşir.

24

\W

Sözcük olmayan karakterlerle eşleşir.

25

\s

Boşluklarla eşleşir. [\ T \ n \ r \ f] ile eşdeğerdir.

26

\S

Beyaz olmayan boşlukla eşleşir.

27

\d

Rakamlarla eşleşir. [0-9] ile eşdeğerdir.

28

\D

Sayı olmayanlarla eşleşir.

29

\A

Dizenin başıyla eşleşir.

30

\Z

Dizenin sonuyla eşleşir. Bir satırsonu varsa, yeni satırdan hemen önce eşleşir.

31

\z

Dizenin sonuyla eşleşir.

32

\G

Maçlar son maçın bittiği yeri gösterir.

33

\b

Köşeli parantezlerin dışındayken kelime sınırlarıyla eşleşir. Parantez içindeyken geri boşlukla (0x08) eşleşir.

34

\B

Kelime olmayan sınırlarla eşleşir.

35

\n, \t, etc.

Yeni satırlarla, satır başlarıyla, sekmelerle vb. Eşleşir.

36

\1...\9

N'inci gruplanmış alt ifadeyle eşleşir.

37

\10

Zaten eşleşiyorsa, n'inci gruplanmış alt ifadeyle eşleşir. Aksi takdirde, bir karakter kodunun sekizlik temsilini ifade eder.

Normal İfade Örnekleri

Değişmez karakterler

Sr.No. Örnek ve Açıklama
1

python

"Python" ile eşleşir.

Karakter sınıfları

Sr.No. Örnek ve Açıklama
1

[Pp]ython

"Python" veya "python" ile eşleştirin

2

rub[ye]

"Ruby" veya "rube" ile eşleş

3

[aeiou]

Herhangi bir küçük harfle eşleştirin

4

[0-9]

Herhangi bir rakamı eşleştirin; [0123456789] ile aynı

5

[a-z]

Herhangi bir küçük ASCII harfiyle eşleşir

6

[A-Z]

Herhangi bir büyük ASCII harfiyle eşleştirin

7

[a-zA-Z0-9]

Yukarıdakilerden herhangi biriyle eşleştirin

8

[^aeiou]

Küçük harfli harf dışında herhangi bir şeyle eşleştirin

9

[^0-9]

Rakam dışında herhangi bir şeyle eşleştirin

Özel Karakter Sınıfları

Sr.No. Örnek ve Açıklama
1

.

Satırsonu hariç herhangi bir karakterle eşleş

2

\d

Bir rakamı eşleştir: [0-9]

3

\D

Bir basamaksız eşleştirme: [^ 0-9]

4

\s

Bir boşluk karakteriyle eşleştirin: [\ t \ r \ n \ f]

5

\S

Beyaz olmayan alanı eşleştir: [^ \ t \ r \ n \ f]

6

\w

Tek bir kelime karakteriyle eşleştirin: [A-Za-z0-9_]

7

\W

Kelime olmayan bir karakterle eşleştirin: [^ A-Za-z0-9_]

Tekrarlama Durumları

Sr.No. Örnek ve Açıklama
1

ruby?

"Ovma" veya "yakut" ile eşleştirin: y isteğe bağlıdır

2

ruby*

"Ovmak" artı 0 veya daha fazla ys ile eşleştirin

3

ruby+

"Ovma" artı 1 veya daha fazla ys eşleştirin

4

\d{3}

Tam olarak 3 rakamla eşleş

5

\d{3,}

3 veya daha fazla basamağı eşleştirin

6

\d{3,5}

3, 4 veya 5 haneyi eşleştirin

Kararsız tekrarlama

Bu, en az sayıda tekrarla eşleşir -

Sr.No. Örnek ve Açıklama
1

<.*>

Açgözlü tekrar: "<python> perl>" ile eşleşir

2

<.*?>

Nongreedy: "<python> perl>" içindeki "<python>" ile eşleşir

Parantezlerle Gruplama

Sr.No. Örnek ve Açıklama
1

\D\d+

Grup yok: + tekrarlar \ d

2

(\D\d)+

Gruplanmış: + tekrarlar \ D \ d çifti

3

([Pp]ython(, )?)+

"Python", "Python, python, python" vb. İle eşleştirin.

Geri referanslar

Bu, daha önce eşleşen bir grupla tekrar eşleşiyor -

Sr.No. Örnek ve Açıklama
1

([Pp])ython&\1ails

Python ve kovaları veya Python ve Pails'i eşleştirin

2

(['"])[^\1]*\1

Tek veya çift tırnaklı dize. \ 1, 1. grubun eşleştiği şeyle eşleşir. \ 2 eşleştiği 2. grupla eşleşir vb.

Alternatifler

Sr.No. Örnek ve Açıklama
1

python|perl

"Python" veya "perl" ile eşleştirin

2

rub(y|le))

"Yakut" veya "ruble" ile eşleş

3

Python(!+|\?)

"Python" ve ardından bir veya daha fazla! veya bir?

Çapalar

Bunun eşleşme konumunu belirtmesi gerekir.

Sr.No. Örnek ve Açıklama
1

^Python

Bir dizenin veya iç satırın başında "Python" ile eşleştirin

2

Python$

Bir dizenin veya satırın sonunda "Python" ile eşleştirin

3

\APython

Bir dizenin başında "Python" ile eşleştirin

4

Python\Z

Bir dizenin sonunda "Python" ile eşleşir

5

\bPython\b

"Python" u bir kelime sınırında eşleştirin

6

\brub\B

\ B kelime dışı sınırdır: "rube" ve "ruby" de "ovma" ile eşleşir, ancak tek başına değil

7

Python(?=!)

Ardından ünlem işareti varsa "Python" ile eşleşin.

8

Python(?!!)

Ardından ünlem işareti gelmiyorsa "Python" ile eşleşin.

Parantez İçeren Özel Sözdizimi

Sr.No. Örnek ve Açıklama
1

R(?#comment)

"R" ile eşleşir. Geri kalan her şey bir yorum

2

R(?i)uby

"Uby" ile eşleşirken büyük / küçük harfe duyarlı değil

3

R(?i:uby)

Yukarıdaki gibi

4

rub(?:y|le))

Yalnızca \ 1 geri referans oluşturmadan grupla

Ortak Ağ Geçidi Arayüzü veya CGI, bilgilerin web sunucusu ile özel bir komut dosyası arasında nasıl değiş tokuş edildiğini tanımlayan bir dizi standarttır. CGI özellikleri şu anda NCSA tarafından korunmaktadır.

CGI nedir?

  • Ortak Ağ Geçidi Arayüzü veya CGI, harici ağ geçidi programlarının HTTP sunucuları gibi bilgi sunucuları ile arayüz oluşturması için bir standarttır.

  • Mevcut sürüm CGI / 1.1'dir ve CGI / 1.2 devam etmektedir.

Web Tarama

CGI kavramını anlamak için, belirli bir web sayfasına veya URL'ye göz atmak için bir hiper bağlantıya tıkladığımızda ne olacağını görelim.

  • Tarayıcınız HTTP web sunucusuyla iletişim kurar ve URL'yi, yani dosya adını ister.

  • Web Sunucusu URL'yi ayrıştırır ve dosya adını arar. Bu dosyayı bulursa daha sonra tarayıcıya geri gönderir, aksi takdirde yanlış bir dosya talep ettiğinizi belirten bir hata mesajı gönderir.

  • Web tarayıcısı, web sunucusundan yanıt alır ve alınan dosyayı veya hata mesajını görüntüler.

Bununla birlikte, HTTP sunucusunu, belirli bir dizindeki bir dosya istendiğinde bu dosyanın geri gönderilmeyeceği şekilde ayarlamak mümkündür; bunun yerine bir program olarak yürütülür ve o programın çıktıları ne olursa olsun tarayıcınızın görüntülemesi için geri gönderilir. Bu işleve Ortak Ağ Geçidi Arayüzü veya CGI adı verilir ve programlara CGI komut dosyaları adı verilir. Bu CGI programları bir Python Script, PERL Script, Shell Script, C veya C ++ programı vb. Olabilir.

CGI Mimari Diyagramı

Web Sunucusu Desteği ve Yapılandırması

CGI Programlamaya devam etmeden önce, Web Sunucunuzun CGI'yı desteklediğinden ve CGI Programlarını işleyecek şekilde yapılandırıldığından emin olun. HTTP sunucusu tarafından yürütülecek tüm CGI Programları önceden yapılandırılmış bir dizinde tutulur. Bu dizine CGI Dizini adı verilir ve geleneksel olarak / var / www / cgi-bin olarak adlandırılır. Geleneksel olarak, CGI dosyalarının uzantısı.cgi, ancak dosyalarınızı python uzantısıyla tutabilirsiniz .py yanı sıra.

Varsayılan olarak, Linux sunucusu yalnızca / var / www içindeki cgi-bin dizinindeki komut dosyalarını çalıştıracak şekilde yapılandırılmıştır. CGI betiklerinizi çalıştırmak için başka bir dizin belirtmek istiyorsanız, httpd.conf dosyasında aşağıdaki satırları yorumlayın -

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all
</Directory>

<Directory "/var/www/cgi-bin">
Options All
</Directory>

Burada, Web Sunucunuzun başarılı bir şekilde çalıştığını ve Perl veya Shell gibi başka herhangi bir CGI programını çalıştırabileceğinizi varsayıyoruz.

İlk CGI Programı

Burada, merhaba.py adlı bir CGI betiğine bağlı basit bir bağlantı var . Bu dosya / var / www / cgi-bin dizininde tutulur ve aşağıdaki içeriğe sahiptir. CGI programınızı çalıştırmadan önce, dosya modunu değiştirdiğinizden emin olun.chmod 755 hello.py Dosyayı yürütülebilir hale getirmek için UNIX komutu.

#!/usr/bin/python

print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>Hello World - First CGI Program</title>'
print '</head>'
print '<body>'
print '<h2>Hello World! This is my first CGI program</h2>'
print '</body>'
print '</html>'

Hello.py'yi tıklarsanız, bu aşağıdaki çıktıyı üretir -

Selam Dünya! Bu benim ilk CGI programım

Bu merhaba.py betiği, çıktısını STDOUT dosyasına yani ekrana yazan basit bir Python betiğidir. Basılacak ilk satır olan önemli ve ekstra bir özellik vardır.Content-type:text/html\r\n\r\n. Bu satır tarayıcıya geri gönderilir ve tarayıcı ekranında görüntülenecek içerik türünü belirtir.

Şimdiye kadar CGI'nin temel kavramını anlamış olmalısınız ve Python kullanarak birçok karmaşık CGI programı yazabilirsiniz. Bu komut dosyası, RDBMS gibi bilgi alışverişi yapmak için başka herhangi bir harici sistemle etkileşime girebilir.

HTTP Başlığı

Çizgi Content-type:text/html\r\n\r\niçeriği anlamak için tarayıcıya gönderilen HTTP başlığının bir parçasıdır. Tüm HTTP üstbilgileri aşağıdaki biçimde olacaktır -

HTTP Field Name: Field Content

For Example
Content-type: text/html\r\n\r\n

CGI Programlamanızda sıklıkla kullanacağınız birkaç önemli HTTP başlığı vardır.

Sr.No. Üstbilgi ve Açıklama
1

Content-type:

Döndürülen dosyanın biçimini tanımlayan bir MIME dizesi. Örnek, İçerik türü: metin / html

2

Expires: Date

Bilginin geçersiz hale geldiği tarih. Tarayıcı tarafından bir sayfanın ne zaman yenilenmesi gerektiğine karar vermek için kullanılır. Geçerli bir tarih dizesi 01 Ocak 1998 12:00:00 GMT biçimindedir.

3

Location: URL

İstenen URL yerine döndürülen URL. İsteği herhangi bir dosyaya yeniden yönlendirmek için bu alanı kullanabilirsiniz.

4

Last-modified: Date

Kaynağın son değiştirilme tarihi.

5

Content-length: N

Döndürülen verilerin bayt cinsinden uzunluğu. Tarayıcı, bir dosyanın tahmini indirme süresini bildirmek için bu değeri kullanır.

6

Set-Cookie: String

Geçirilir çerez ayarla dize

CGI Ortam Değişkenleri

Tüm CGI programlarının aşağıdaki ortam değişkenlerine erişimi vardır. Bu değişkenler, herhangi bir CGI programını yazarken önemli bir rol oynar.

Sr.No. Değişken Adı ve Açıklaması
1

CONTENT_TYPE

İçeriğin veri türü. İstemci, sunucuya ekli içerik gönderirken kullanılır. Örneğin dosya yükleme.

2

CONTENT_LENGTH

Sorgu bilgilerinin uzunluğu. Yalnızca POST istekleri için kullanılabilir.

3

HTTP_COOKIE

Ayarlanan çerezleri anahtar ve değer çifti biçiminde döndürür.

4

HTTP_USER_AGENT

User-Agent istek başlığı alanı, isteği başlatan kullanıcı aracısı hakkında bilgi içerir. Web tarayıcısının adıdır.

5

PATH_INFO

CGI komut dosyasının yolu.

6

QUERY_STRING

GET yöntemi isteği ile gönderilen URL kodlu bilgiler.

7

REMOTE_ADDR

İstekte bulunan uzak ana bilgisayarın IP adresi. Bu, günlük kaydı veya kimlik doğrulama için yararlıdır.

8

REMOTE_HOST

İstekte bulunan ana bilgisayarın tam nitelikli adı. Bu bilgi mevcut değilse, IR adresini almak için REMOTE_ADDR kullanılabilir.

9

REQUEST_METHOD

İsteği yapmak için kullanılan yöntem. En yaygın yöntemler GET ve POST'tur.

10

SCRIPT_FILENAME

CGI betiğinin tam yolu.

11

SCRIPT_NAME

CGI komut dosyasının adı.

12

SERVER_NAME

Sunucunun ana bilgisayar adı veya IP Adresi

13

SERVER_SOFTWARE

Sunucunun çalıştırdığı yazılımın adı ve sürümü.

İşte tüm CGI değişkenlerini listelemek için küçük CGI programı. Get Environment sonucunu görmek için bu bağlantıyı tıklayın

#!/usr/bin/python

import os

print "Content-type: text/html\r\n\r\n";
print "<font size=+1>Environment</font><\br>";
for param in os.environ.keys():
   print "<b>%20s</b>: %s<\br>" % (param, os.environ[param])

GET ve POST Yöntemleri

Bazı bilgileri tarayıcınızdan web sunucusuna ve nihayetinde CGI Programınıza aktarmanız gerektiğinde birçok durumla karşılaşmış olmalısınız. Çoğu zaman, tarayıcı bu bilgiyi web sunucusuna ileten iki yöntem kullanır. Bu yöntemler GET Yöntemi ve POST Yöntemi'dir.

GET yöntemini kullanarak Bilgi Aktarma

GET yöntemi, sayfa isteğine eklenen kodlanmış kullanıcı bilgilerini gönderir. Sayfa ve kodlanmış bilgiler,? aşağıdaki gibi karakter -

http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2

GET yöntemi, bilgileri tarayıcıdan web sunucusuna geçirmek için varsayılan yöntemdir ve tarayıcınızın Konum: kutusunda görünen uzun bir dize oluşturur. Sunucuya iletmek için parolanız veya diğer hassas bilgileriniz varsa asla GET yöntemini kullanmayın. GET yönteminin boyut sınırlaması vardır: bir istek dizesinde yalnızca 1024 karakter gönderilebilir. GET yöntemi, QUERY_STRING başlığını kullanarak bilgi gönderir ve QUERY_STRING ortam değişkeni aracılığıyla CGI Programınızda erişilebilir olacaktır.

Bilgileri herhangi bir URL ile birlikte anahtar ve değer çiftlerini birleştirerek iletebilir veya GET yöntemini kullanarak bilgileri iletmek için HTML <FORM> etiketlerini kullanabilirsiniz.

Basit URL Örneği: Alma Yöntemi

İşte GET yöntemini kullanarak hello_get.py programına iki değer ileten basit bir URL.

/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI

Aşağıda hello_get.pyweb tarayıcısı tarafından verilen girişi işlemek için komut dosyası. Kullanacağızcgi modül, geçilen bilgilere erişmeyi çok kolaylaştırır -

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

Bu, aşağıdaki sonucu oluşturur -

Merhaba ZARA ALI

Basit FORM Örneği: GET Yöntemi

Bu örnek, HTML FORM ve gönder düğmesini kullanarak iki değer iletir. Bu girdiyi işlemek için aynı CGI betiğini hello_get.py kullanıyoruz.

<form action = "/cgi-bin/hello_get.py" method = "get">
First Name: <input type = "text" name = "first_name">  <br />

Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>

İşte yukarıdaki formun asıl çıktısı, Adı ve Soyadı girip sonucu görmek için gönder düğmesine tıklayın.

POST Yöntemini Kullanarak Bilgi Aktarma

Bir CGI programına bilgi aktarmanın genellikle daha güvenilir bir yöntemi, POST yöntemidir. Bu, bilgileri GET yöntemleriyle tam olarak aynı şekilde paketler, ancak bunu bir? URL'de ayrı bir mesaj olarak gönderir. Bu mesaj, standart girdi biçiminde CGI betiğine gelir.

Aşağıda GET ve POST yöntemini işleyen aynı hello_get.py betiği bulunmaktadır.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

HTML FORM ve gönder butonunu kullanarak iki değeri geçen yukarıdaki örneği tekrar ele alalım. Bu girdiyi işlemek için aynı CGI betiğini hello_get.py kullanıyoruz.

<form action = "/cgi-bin/hello_get.py" method = "post">
First Name: <input type = "text" name = "first_name"><br />
Last Name: <input type = "text" name = "last_name" />

<input type = "submit" value = "Submit" />
</form>

İşte yukarıdaki formun gerçek çıktısı. Adı ve Soyadı girersiniz ve sonucu görmek için gönder düğmesine tıklarsınız.

Onay Kutusu Verilerini CGI Programına Aktarma

Onay kutuları, birden fazla seçeneğin seçilmesi gerektiğinde kullanılır.

İki onay kutusu olan bir form için örnek HTML kodu:

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" value = "on" /> Maths
<input type = "checkbox" name = "physics" value = "on" /> Physics
<input type = "submit" value = "Select Subject" />
</form>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda, onay kutusu düğmesi için web tarayıcısı tarafından verilen girdiyi işlemek için checkbox.cgi betiği bulunmaktadır.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('maths'):
   math_flag = "ON"
else:
   math_flag = "OFF"

if form.getvalue('physics'):
   physics_flag = "ON"
else:
   physics_flag = "OFF"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Checkbox - Third CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> CheckBox Maths is : %s</h2>" % math_flag
print "<h2> CheckBox Physics is : %s</h2>" % physics_flag
print "</body>"
print "</html>"

Radyo Düğmesi Verilerini CGI Programına Aktarma

Radyo Düğmeleri, yalnızca bir seçeneğin seçilmesi gerektiğinde kullanılır.

İki radyo düğmesi olan bir form için örnek HTML kodu:

<form action = "/cgi-bin/radiobutton.py" method = "post" target = "_blank">
<input type = "radio" name = "subject" value = "maths" /> Maths
<input type = "radio" name = "subject" value = "physics" /> Physics
<input type = "submit" value = "Select Subject" />
</form>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda, radyo düğmesi için web tarayıcısı tarafından verilen girdiyi işlemek için radiobutton.py betiği bulunmaktadır -

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('subject'):
   subject = form.getvalue('subject')
else:
   subject = "Not set"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Radio - Fourth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"

Metin Alanı Verilerini CGI Programına Aktarma

TEXTAREA öğesi, çok satırlı metnin CGI Programına aktarılması gerektiğinde kullanılır.

TEXTAREA kutusu içeren bir form için örnek HTML kodu:

<form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">
<textarea name = "textcontent" cols = "40" rows = "4">
Type your text here...
</textarea>
<input type = "submit" value = "Submit" />
</form>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda, web tarayıcısı tarafından verilen girdiyi işlemek için textarea.cgi betiği verilmiştir -

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('textcontent'):
   text_content = form.getvalue('textcontent')
else:
   text_content = "Not entered"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>";
print "<title>Text Area - Fifth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Entered Text Content is %s</h2>" % text_content
print "</body>"

Açılır Kutu Verilerini CGI Programına Aktarma

Açılır Kutu, birçok seçeneğimiz olduğunda kullanılır, ancak yalnızca bir veya iki tanesi seçilecektir.

Aşağıda, bir açılır kutuya sahip bir form için örnek HTML kodu verilmiştir -

<form action = "/cgi-bin/dropdown.py" method = "post" target = "_blank">
<select name = "dropdown">
<option value = "Maths" selected>Maths</option>
<option value = "Physics">Physics</option>
</select>
<input type = "submit" value = "Submit"/>
</form>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda, web tarayıcısı tarafından verilen girdileri işlemek için dropdown.py betiği verilmiştir.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('dropdown'):
   subject = form.getvalue('dropdown')
else:
   subject = "Not entered"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Dropdown Box - Sixth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"

CGI'da Çerez Kullanımı

HTTP protokolü, durum bilgisi olmayan bir protokoldür. Ticari bir web sitesi için, oturum bilgilerinin farklı sayfalar arasında tutulması gerekir. Örneğin, bir kullanıcı kaydı birçok sayfayı tamamladıktan sonra sona erer. Tüm web sayfalarında kullanıcının oturum bilgileri nasıl korunur?

Çoğu durumda, çerezlerin kullanılması tercihleri, satın alımları, komisyonları ve daha iyi ziyaretçi deneyimi veya site istatistikleri için gerekli diğer bilgileri hatırlamanın ve izlemenin en etkili yöntemidir.

Nasıl çalışır?

Sunucunuz bazı verileri ziyaretçinin tarayıcısına çerez şeklinde gönderir. Tarayıcı çerezi kabul edebilir. Varsa, ziyaretçinin sabit diskinde düz metin kaydı olarak saklanır. Artık, ziyaretçi sitenizdeki başka bir sayfaya geldiğinde, çerez geri alınabilir. Alındıktan sonra, sunucunuz neyin depolandığını bilir / hatırlar.

Çerezler, 5 değişken uzunluklu alanın düz metin veri kaydıdır -

  • Expires- Çerezin süresinin dolacağı tarih. Bu boşsa, çerez, ziyaretçi tarayıcıdan çıktığında sona erecektir.

  • Domain - Sitenizin alan adı.

  • Path- Çerezi ayarlayan dizinin veya web sayfasının yolu. Çerezi herhangi bir dizinden veya sayfadan almak istiyorsanız bu boş olabilir.

  • Secure- Bu alan "güvenli" kelimesini içeriyorsa, çerez yalnızca güvenli bir sunucu ile alınabilir. Bu alan boşsa, böyle bir kısıtlama yoktur.

  • Name=Value - Çerezler, anahtar ve değer çiftleri şeklinde ayarlanır ve alınır.

Çerezleri Kurmak

Çerezleri tarayıcıya göndermek çok kolaydır. Bu çerezler, önce İçerik türü alanına HTTP Başlığı ile birlikte gönderilir. Kullanıcı Kimliği ve Parolayı tanımlama bilgileri olarak ayarlamak istediğinizi varsayarsak. Çerezlerin ayarlanması şu şekilde yapılır -

#!/usr/bin/python

print "Set-Cookie:UserID = XYZ;\r\n"
print "Set-Cookie:Password = XYZ123;\r\n"
print "Set-Cookie:Expires = Tuesday, 31-Dec-2007 23:12:40 GMT";\r\n"
print "Set-Cookie:Domain = www.tutorialspoint.com;\r\n"
print "Set-Cookie:Path = /perl;\n"
print "Content-type:text/html\r\n\r\n"
...........Rest of the HTML Content....

Bu örnekten, çerezleri nasıl ayarlayacağınızı anlamış olmanız gerekir. KullanırızSet-Cookie Çerezleri ayarlamak için HTTP başlığı.

Expires, Domain ve Path gibi çerez özelliklerini ayarlamak isteğe bağlıdır. Çerezlerin sihirli hat gönderilmeden önce ayarlanması dikkat çekicidir"Content-type:text/html\r\n\r\n.

Çerezleri Alma

Tüm ayarlanan çerezleri geri almak çok kolaydır. Çerezler, CGI ortam değişkeni HTTP_COOKIE'de saklanır ve aşağıdaki biçime sahip olurlar -

key1 = value1;key2 = value2;key3 = value3....

Çerezlerin nasıl alınacağına dair bir örnek.

#!/usr/bin/python

# Import modules for CGI handling 
from os import environ
import cgi, cgitb

if environ.has_key('HTTP_COOKIE'):
   for cookie in map(strip, split(environ['HTTP_COOKIE'], ';')):
      (key, value ) = split(cookie, '=');
      if key == "UserID":
         user_id = value

      if key == "Password":
         password = value

print "User ID  = %s" % user_id
print "Password = %s" % password

Bu, yukarıdaki komut dosyası tarafından ayarlanan çerezler için aşağıdaki sonucu üretir -

User ID = XYZ
Password = XYZ123

Dosya Yükleme Örneği

Bir dosya yüklemek için, HTML formunun enctype özniteliğinin şu şekilde ayarlanmış olması gerekir: multipart/form-data. Dosya türüne sahip giriş etiketi bir "Gözat" düğmesi oluşturur.

<html>
<body>
   <form enctype = "multipart/form-data" 
                     action = "save_file.py" method = "post">
   <p>File: <input type = "file" name = "filename" /></p>
   <p><input type = "submit" value = "Upload" /></p>
   </form>
</body>
</html>

Bu kodun sonucu aşağıdaki biçimdir -

Yukarıdaki örnek, sunucumuza dosya yükleyen kişileri kaydetmek için kasıtlı olarak devre dışı bırakılmıştır, ancak yukarıdaki kodu sunucunuzla deneyebilirsiniz.

İşte senaryo save_file.py dosya yüklemesini yönetmek için -

#!/usr/bin/python

import cgi, os
import cgitb; cgitb.enable()

form = cgi.FieldStorage()

# Get filename here.
fileitem = form['filename']

# Test if the file was uploaded
if fileitem.filename:
   # strip leading path from file name to avoid 
   # directory traversal attacks
   fn = os.path.basename(fileitem.filename)
   open('/tmp/' + fn, 'wb').write(fileitem.file.read())

   message = 'The file "' + fn + '" was uploaded successfully'
   
else:
   message = 'No file was uploaded'
   
print """\
Content-Type: text/html\n
<html>
<body>
   <p>%s</p>
</body>
</html>
""" % (message,)

Yukarıdaki komut dosyasını Unix / Linux üzerinde çalıştırırsanız, dosya ayırıcıyı aşağıdaki gibi değiştirmeye dikkat etmeniz gerekir, aksi takdirde Windows makinenizde open () ifadesinin üzerinde düzgün çalışmanız gerekir.

fn = os.path.basename(fileitem.filename.replace("\\", "/" ))

"Dosya İndirme" İletişim Kutusu Nasıl Yükseltilir?

Bazen, bir kullanıcının bir bağlantıya tıklayabileceği bir seçenek vermeniz istenir ve bu, gerçek içeriği görüntülemek yerine kullanıcıya bir "Dosya İndirme" iletişim kutusu açar. Bu çok kolaydır ve HTTP başlığı ile sağlanabilir. Bu HTTP başlığı, önceki bölümde bahsedilen başlıktan farklıdır.

Örneğin, bir FileName dosya belirli bir bağlantıdan indirilebilirse, sözdizimi aşağıdaki gibidir -

#!/usr/bin/python

# HTTP Header
print "Content-Type:application/octet-stream; name = \"FileName\"\r\n";
print "Content-Disposition: attachment; filename = \"FileName\"\r\n\n";

# Actual File Content will go here.
fo = open("foo.txt", "rb")

str = fo.read();
print str

# Close opend file
fo.close()

Umarım bu eğitimden keyif almışsınızdır. Cevabınız evet ise, lütfen geri bildiriminizi şu adresten gönderin: Bize Ulaşın

Veritabanı arayüzleri için Python standardı, Python DB-API'dir. Çoğu Python veritabanı arayüzü bu standarda uymaktadır.

Uygulamanız için doğru veritabanını seçebilirsiniz. Python Veritabanı API, aşağıdakiler gibi çok çeşitli veritabanı sunucularını destekler:

  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • Oracle
  • Sybase

Kullanılabilir Python veritabanı arayüzlerinin listesi: Python Veritabanı Arayüzleri ve API'ler . Erişmeniz gereken her veritabanı için ayrı bir DB API modülü indirmelisiniz. Örneğin, bir Oracle veritabanına ve ayrıca bir MySQL veritabanına erişmeniz gerekiyorsa, hem Oracle hem de MySQL veritabanı modüllerini indirmeniz gerekir.

DB API, mümkün olan her yerde Python yapılarını ve sözdizimini kullanarak veritabanları ile çalışmak için minimum bir standart sağlar. Bu API aşağıdakileri içerir -

  • API modülünü içe aktarma.
  • Veritabanıyla bir bağlantı elde ediliyor.
  • SQL ifadeleri ve saklı yordamlar yayınlama.
  • Bağlantının kapatılması

MySQL kullanarak tüm kavramları öğrenecektik, bu yüzden MySQLdb modülünden bahsedelim.

MySQLdb nedir?

MySQLdb, Python'dan bir MySQL veritabanı sunucusuna bağlanmak için bir arayüzdür. Python Veritabanı API v2.0'ı uygular ve MySQL C API'sinin üzerine inşa edilmiştir.

MySQLdb'yi Nasıl Kurarım?

Devam etmeden önce, makinenizde MySQLdb'nin kurulu olduğundan emin olun. Python betiğinize aşağıdakileri yazın ve çalıştırın -

#!/usr/bin/python

import MySQLdb

Aşağıdaki sonucu verirse, MySQLdb modülünün kurulu olmadığı anlamına gelir -

Traceback (most recent call last):
   File "test.py", line 3, in <module>
      import MySQLdb
ImportError: No module named MySQLdb

MySQLdb modülünü kurmak için aşağıdaki komutu kullanın -

For Ubuntu, use the following command -
$ sudo apt-get install python-pip python-dev libmysqlclient-dev For Fedora, use the following command - $ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc
For Python command prompt, use the following command -
pip install MySQL-python

Note - Yukarıdaki modülü kurmak için kök ayrıcalığına sahip olduğunuzdan emin olun.

Veritabanı Bağlantısı

Bir MySQL veritabanına bağlanmadan önce aşağıdakilerden emin olun -

  • Bir TESTDB veritabanı oluşturdunuz.

  • TESTDB'de EMPLOYEE tablosu oluşturdunuz.

  • Bu tabloda FIRST_NAME, LAST_NAME, AGE, SEX ve INCOME alanları var.

  • "Testuser" kullanıcı kimliği ve "test123" şifresi TESTDB'ye erişmek için ayarlanmıştır.

  • Python modülü MySQLdb, makinenize düzgün bir şekilde yüklenmiş.

  • MySQL Temellerini anlamak için MySQL eğitiminden geçtiniz.

Misal

Aşağıda MySQL veritabanı "TESTDB" ile bağlantı kurma örneği verilmiştir

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")

# Fetch a single row using fetchone() method.
data = cursor.fetchone()
print "Database version : %s " % data

# disconnect from server
db.close()

Bu betiği çalıştırırken, Linux makinemde aşağıdaki sonucu üretiyor.

Database version : 5.0.45

Veri kaynağıyla bir bağlantı kurulursa, bir Bağlantı Nesnesi döndürülür ve db aksi takdirde daha fazla kullanım için dbYok olarak ayarlanmıştır. Sonraki,db nesne oluşturmak için kullanılır cursornesne, sırayla SQL sorgularını yürütmek için kullanılır. Son olarak, çıkmadan önce veritabanı bağlantısının kapatılmasını ve kaynakların serbest bırakılmasını sağlar.

Veritabanı Tablosu Oluşturma

Bir veritabanı bağlantısı kurulduktan sonra, kullanarak veritabanı tablolarına tablolar veya kayıtlar oluşturmaya hazırız. execute oluşturulan imlecin yöntemi.

Misal

EMPLOYEE veritabanı tablosu oluşturalım -

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# Create table as per requirement
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# disconnect from server
db.close()

INSERT İşlemi

Kayıtlarınızı bir veritabanı tablosunda oluşturmak istediğinizde gereklidir.

Misal

Aşağıdaki örnek, EMPLOYEE tablosunda bir kayıt oluşturmak için SQL INSERT deyimini çalıştırır -

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Dinamik olarak SQL sorguları oluşturmak için yukarıdaki örnek aşağıdaki gibi yazılabilir -

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Misal

Aşağıdaki kod segmenti, parametreleri doğrudan iletebileceğiniz başka bir yürütme biçimidir -

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

OKUMA İşlemi

Herhangi bir veritabanı üzerinde OKUMA İşlemi, veritabanından bazı yararlı bilgileri almak anlamına gelir.

Veritabanı bağlantımız kurulduktan sonra, bu veritabanına bir sorgulama yapmaya hazırsınız. İkisini de kullanabilirsinizfetchone() tek kaydı getirme yöntemi veya fetchall() bir veritabanı tablosundan birden çok değeri getirme yöntemi.

  • fetchone()- Bir sorgu sonuç kümesinin sonraki satırını getirir. Sonuç kümesi, bir tabloyu sorgulamak için bir imleç nesnesi kullanıldığında döndürülen bir nesnedir.

  • fetchall()- Bir sonuç kümesindeki tüm satırları getirir. Sonuç kümesinden bazı satırlar zaten çıkarılmışsa, sonuç kümesinden kalan satırları alır.

  • rowcount - Bu salt okunur bir özelliktir ve bir execute () yönteminden etkilenen satırların sayısını döndürür.

Misal

Aşağıdaki prosedür, 1000'den fazla maaşı olan ÇALIŞAN tablosundaki tüm kayıtları sorgular -

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Fetch all the rows in a list of lists.
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # Now print fetched result
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# disconnect from server
db.close()

Bu, aşağıdaki sonucu verecektir -

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

Güncelleme İşlemi

GÜNCELLEME Herhangi bir veritabanı üzerinde işlem, veritabanında zaten mevcut olan bir veya daha fazla kaydı güncellemek anlamına gelir.

Aşağıdaki prosedür, SEX olan tüm kayıtları günceller. 'M'. Burada tüm erkeklerin YAŞ'ını bir yıl artırıyoruz.

Misal

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to UPDATE required records
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

DELETE İşlemi

Veritabanınızdan bazı kayıtları silmek istediğinizde DELETE işlemi gereklidir. Aşağıda, AGE'nin 20'den fazla olduğu ÇALIŞAN'dan tüm kayıtları silme prosedürü verilmiştir -

Misal

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

İşlemlerin Gerçekleştirilmesi

İşlemler, veri tutarlılığını sağlayan bir mekanizmadır. İşlemler aşağıdaki dört özelliğe sahiptir -

  • Atomicity - Ya bir işlem tamamlanır ya da hiçbir şey olmaz.

  • Consistency - Bir işlem tutarlı bir durumda başlamalı ve sistemi tutarlı bir durumda bırakmalıdır.

  • Isolation - Bir işlemin ara sonuçları cari işlemin dışında görünmez.

  • Durability - Bir işlem yapıldığında, sistem hatasından sonra bile etkiler kalıcıdır.

Python DB API 2.0 ya da iki yöntem sağlar işlemek veya geri alma işlem.

Misal

İşlemleri nasıl uygulayacağınızı zaten biliyorsunuz. İşte yine benzer bir örnek -

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

COMMIT İşlemi

Commit, değişikliklerin sonuçlandırılması için veritabanına yeşil sinyal veren ve bu işlemden sonra hiçbir değişiklik geri alınamayan işlemdir.

İşte aramak için basit bir örnek commit yöntem.

db.commit()

GERİ DÖNME İşlemi

Değişikliklerden bir veya daha fazlasından memnun değilseniz ve bu değişiklikleri tamamen geri almak istiyorsanız, o zaman rollback() yöntem.

İşte aramak için basit bir örnek rollback() yöntem.

db.rollback()

Veritabanının Bağlantısını Kesme

Veritabanı bağlantısını kesmek için close () yöntemini kullanın.

db.close()

Bir veritabanına olan bağlantı kullanıcı tarafından close () yöntemiyle kapatılırsa, bekleyen tüm işlemler DB tarafından geri alınır. Ancak, alt düzey DB uygulama ayrıntılarından herhangi birine bağlı olmak yerine, uygulamanız açıkça commit veya geri alma çağırmaktan daha iyi olacaktır.

Hataları Yönetme

Birçok hata kaynağı var. Birkaç örnek, yürütülen bir SQL deyimindeki sözdizimi hatası, bir bağlantı hatası veya önceden iptal edilmiş veya bitmiş bir ifade tutamacı için getirme yönteminin çağrılmasıdır.

DB API, her veritabanı modülünde bulunması gereken bir dizi hatayı tanımlar. Aşağıdaki tablo bu istisnaları listelemektedir.

Sr.No. İstisna ve Açıklama
1

Warning

Önemli olmayan sorunlar için kullanılır. StandardError alt sınıfı olmalıdır.

2

Error

Hatalar için temel sınıf. StandardError alt sınıfı olmalıdır.

3

InterfaceError

Veritabanının kendisindeki değil, veritabanı modülündeki hatalar için kullanılır. Alt sınıf hatası olmalı.

4

DatabaseError

Veritabanındaki hatalar için kullanılır. Alt sınıf hatası olmalı.

5

DataError

Verilerdeki hatalara başvuran DatabaseError alt sınıfı.

6

OperationalError

Veritabanına bağlantı kaybı gibi hatalara başvuran DatabaseError alt sınıfı. Bu hatalar genellikle Python betikleyicisinin kontrolü dışındadır.

7

IntegrityError

Benzersizlik kısıtlamaları veya yabancı anahtarlar gibi ilişkisel bütünlüğe zarar verebilecek durumlar için DatabaseError alt sınıfı.

8

InternalError

Bir imlecin artık etkin olmaması gibi, veritabanı modülündeki dahili hatalara başvuran DatabaseError alt sınıfı.

9

ProgrammingError

Kötü bir tablo adı gibi hatalara ve güvenle sizin suçlanabileceğiniz diğer şeylere atıfta bulunan DatabaseError alt sınıfı.

10

NotSupportedError

Desteklenmeyen işlevselliği çağırmaya çalışmayı ifade eden DatabaseError alt sınıfı.

Python komut dosyalarınız bu hataları işlemelidir, ancak yukarıdaki istisnalardan herhangi birini kullanmadan önce, MySQLdb'nizin bu istisnayı desteklediğinden emin olun. DB API 2.0 spesifikasyonunu okuyarak onlar hakkında daha fazla bilgi edinebilirsiniz.

Python, ağ hizmetlerine iki düzeyde erişim sağlar. Düşük bir düzeyde, hem bağlantı odaklı hem de bağlantısız protokoller için istemcileri ve sunucuları uygulamanıza olanak tanıyan temeldeki işletim sistemindeki temel yuva desteğine erişebilirsiniz.

Python ayrıca FTP, HTTP vb. Gibi belirli uygulama düzeyindeki ağ protokollerine daha yüksek düzeyde erişim sağlayan kitaplıklara da sahiptir.

Bu bölüm size Ağ Oluşturma - Soket Programlama'daki en ünlü kavramı anlamanızı sağlar.

Soketler nedir?

Soketler, çift yönlü bir iletişim kanalının uç noktalarıdır. Soketler bir işlem içinde, aynı makinedeki işlemler arasında veya farklı kıtalardaki işlemler arasında iletişim kurabilir.

Soketler, bir dizi farklı kanal türü üzerinden uygulanabilir: Unix etki alanı soketleri, TCP, UDP, vb. Soket kütüphanesi ortak taşımaları yanı sıra dinlenme işlemek için genel bir arayüz işlemek için belirli sınıfları sağlar.

Soketlerin kendi kelime dağarcığı vardır -

Sr.No. Terim ve Açıklama
1

Domain

Taşıma mekanizması olarak kullanılan protokol ailesi. Bu değerler, AF_INET, PF_INET, PF_UNIX, PF_X25 ve benzeri sabitlerdir.

2

type

İki uç nokta arasındaki iletişim türü, tipik olarak bağlantı odaklı protokoller için SOCK_STREAM ve bağlantısız protokoller için SOCK_DGRAM.

3

protocol

Tipik olarak sıfır, bu, bir alan ve tür içindeki bir protokolün bir varyantını tanımlamak için kullanılabilir.

4

hostname

Bir ağ arayüzünün tanımlayıcısı -

  • Bir ana bilgisayar adı, noktalı dörtlü bir adres veya iki nokta üst üste (ve muhtemelen nokta) gösteriminde bir IPV6 adresi olabilen bir dize

  • Bir INADDR_BROADCAST adresini belirten bir "<broadcast>" dizesi.

  • INADDR_ANY'yi belirten sıfır uzunluklu bir dize veya

  • Ana bilgisayar bayt sırasına göre ikili adres olarak yorumlanan bir Tamsayı.

5

port

Her sunucu, bir veya daha fazla bağlantı noktasını arayan istemcileri dinler. Bir bağlantı noktası, bir Fixnum bağlantı noktası numarası, bir bağlantı noktası numarası içeren bir dize veya bir hizmetin adı olabilir.

soket Modülü

Bir soket oluşturmak için, soket modülünde bulunan ve genel sözdizimine sahip socket.socket () işlevini kullanmalısınız -

s = socket.socket (socket_family, socket_type, protocol=0)

İşte parametrelerin açıklaması -

  • socket_family - Bu, daha önce açıklandığı gibi AF_UNIX veya AF_INET'tir.

  • socket_type - Bu, SOCK_STREAM veya SOCK_DGRAM'dır.

  • protocol - Bu genellikle dışarıda bırakılır ve varsayılan değer 0'dır.

Soket nesnesine sahip olduğunuzda, istemci veya sunucu programınızı oluşturmak için gerekli işlevleri kullanabilirsiniz. Aşağıda gerekli işlevlerin listesi verilmiştir -

Sunucu Soket Yöntemleri

Sr.No. Yöntem ve Açıklama
1

s.bind()

Bu yöntem adresi (ana bilgisayar adı, bağlantı noktası numarası çifti) sokete bağlar.

2

s.listen()

Bu yöntem, TCP dinleyicisini kurar ve başlatır.

3

s.accept()

Bu pasif olarak TCP istemcisi bağlantısını kabul eder, bağlantı gelene kadar bekler (bloke olur).

İstemci Soket Yöntemleri

Sr.No. Yöntem ve Açıklama
1

s.connect()

Bu yöntem, TCP sunucusu bağlantısını aktif olarak başlatır.

Genel Soket Yöntemleri

Sr.No. Yöntem ve Açıklama
1

s.recv()

Bu yöntem TCP mesajını alır

2

s.send()

Bu yöntem TCP mesajını iletir

3

s.recvfrom()

Bu yöntem UDP mesajını alır

4

s.sendto()

Bu yöntem UDP mesajını iletir

5

s.close()

Bu yöntem soketi kapatır

6

socket.gethostname()

Ana bilgisayar adını döndürür.

Basit Bir Sunucu

İnternet sunucularını yazmak için, socketbir soket nesnesi oluşturmak için soket modülünde mevcut işlev. Bir soket nesnesi daha sonra bir soket sunucusu kurmak için diğer işlevleri çağırmak için kullanılır.

Şimdi ara bind(hostname, port)işlev , verilen ana bilgisayarda hizmetiniz için bir bağlantı noktası belirtmek için kullanılır.

Ardından, döndürülen nesnenin kabul yöntemini çağırın . Bu yöntem, bir istemci belirttiğiniz bağlantı noktasına bağlanıncaya kadar bekler ve ardından o istemciye bağlantıyı temsil eden bir bağlantı nesnesi döndürür .

#!/usr/bin/python           # This is server.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   c.send('Thank you for connecting')
   c.close()                # Close the connection

Basit Bir Müşteri

Verilen bir 12345 portuna ve verilen ana bilgisayara bağlantı açan çok basit bir istemci programı yazalım. Python'un soket modülü işlevini kullanarak bir soket istemcisi oluşturmak çok basittir .

socket.connect(hosname, port )TCP bağlantısı açar hostname üzerinde port . Bir soket açtıktan sonra, herhangi bir IO nesnesi gibi okuyabilirsiniz. Bittiğinde, bir dosyayı kapatacağınız için onu kapatmayı unutmayın.

Aşağıdaki kod, belirli bir ana bilgisayara ve bağlantı noktasına bağlanan, soketten mevcut verileri okuyan ve ardından çıkan çok basit bir istemcidir -

#!/usr/bin/python           # This is client.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.

s.connect((host, port))
print s.recv(1024)
s.close()                  # Close the socket when done

Şimdi bu server.py'yi arka planda çalıştırın ve ardından sonucu görmek için client.py'nin üzerinde çalıştırın.

# Following would start a server in background.
$ python server.py & # Once server is started run client as follows: $ python client.py

Bu, aşağıdaki sonucu verecektir -

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

Python İnternet modülleri

Python Ağı / İnternet programlamasındaki bazı önemli modüllerin listesi.

Protokol Ortak işlev Port No Python modülü
HTTP internet sayfaları 80 httplib, urllib, xmlrpclib
NNTP Usenet haberleri 119 nntplib
FTP Dosya transferleri 20 ftplib, urllib
SMTP E-mail göndermek 25 smtplib
POP3 E-posta alınıyor 110 poplib
IMAP4 E-posta alınıyor 143 imaplib
Telnet Komut satırları 23 telnetlib
Sincap Belge transferleri 70 gopherlib, urllib

FTP, SMTP, POP ve IMAP protokolleriyle çalışmak için lütfen yukarıda belirtilen tüm kitaplıkları kontrol edin.

Diğer Okumalar

Bu, Soket Programlama ile hızlı bir başlangıçtı. Bu çok geniş bir konu. Daha fazla ayrıntı bulmak için aşağıdaki bağlantıdan geçmeniz önerilir -

  • Unix Soket Programlama .

  • Python Soket Kitaplığı ve Modülleri .

Basit Posta Aktarım Protokolü (SMTP), e-posta göndermeyi ve posta sunucuları arasında e-posta yönlendirmeyi işleyen bir protokoldür.

Python sağlar smtplib SMTP veya ESMTP dinleyici arka plan programı olan herhangi bir İnternet makinesine posta göndermek için kullanılabilen bir SMTP istemci oturum nesnesini tanımlayan modül.

İşte daha sonra bir e-posta göndermek için kullanılabilecek bir SMTP nesnesi oluşturmak için basit bir sözdizimi -

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

İşte parametrelerin detayı -

  • host- Bu, SMTP sunucunuzu çalıştıran ana bilgisayardır. Ana bilgisayarın IP adresini veya tutorialspoint.com gibi bir alan adını belirtebilirsiniz. Bu isteğe bağlı bir argümandır.

  • port- Ana bilgisayar bağımsız değişkeni sağlıyorsanız , SMTP sunucusunun dinlediği bir bağlantı noktası belirtmeniz gerekir. Genellikle bu bağlantı noktası 25 olur.

  • local_hostname- SMTP sunucunuz yerel makinenizde çalışıyorsa , bu seçenekle yalnızca localhost'u belirtebilirsiniz .

Bir SMTP nesnesinin adı verilen bir örnek yöntemi vardır sendmail, genellikle bir iletiyi postalama işini yapmak için kullanılır. Üç parametre alır -

  • Gönderici - gönderenin adresi ile bir dize.

  • Alıcıları - dizeleri listesi, her alıcı için bir tane.

  • Mesajı - Çeşitli RFC'lerde belirtilen biçimlendirilmiş bir dize olarak bir mesaj.

Misal

Python komut dosyası kullanarak bir e-posta göndermenin basit bir yolu. Bir kez deneyin -

#!/usr/bin/python

import smtplib

sender = '[email protected]'
receivers = ['[email protected]']

message = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

Burada, başlıkları doğru şekilde biçimlendirmeye dikkat ederek, üçlü bir alıntı kullanarak mesaja temel bir e-posta yerleştirdiniz. Bir e-posta, birFrom, To, ve Subject e-postanın gövdesinden boş bir satırla ayrılmış başlık.

Postayı göndermek için smtpObj'yi yerel makinedeki SMTP sunucusuna bağlanmak için kullanın ve ardından parametre olarak mesaj, gönderen adresi ve hedef adresi ile birlikte sendmail yöntemini kullanın (gönderen ve gönderen adresleri e -postanın kendisi, bunlar her zaman postayı yönlendirmek için kullanılmaz).

Yerel makinenizde bir SMTP sunucusu çalıştırmıyorsanız, uzak bir SMTP sunucusuyla iletişim kurmak için smtplib istemcisini kullanabilirsiniz . Bir web posta hizmeti (Hotmail veya Yahoo! Mail gibi) kullanmadığınız sürece, e-posta sağlayıcınız size bunları sağlayabileceğiniz giden posta sunucusu ayrıntılarını aşağıdaki gibi sağlamış olmalıdır -

smtplib.SMTP('mail.your-domain.com', 25)

Python kullanarak HTML e-posta gönderme

Python kullanarak bir metin mesajı gönderdiğinizde, tüm içerik basit metin olarak kabul edilir. Metin mesajına HTML etiketleri ekleseniz bile, basit metin olarak görüntülenir ve HTML etiketleri HTML sözdizimine göre biçimlendirilmez. Ancak Python, bir HTML mesajını gerçek HTML mesajı olarak gönderme seçeneği sunar.

Bir e-posta mesajı gönderirken, bir HTML e-postası göndermek için bir Mime sürümü, içerik türü ve karakter seti belirtebilirsiniz.

Misal

Aşağıda, HTML içeriğini e-posta olarak gönderme örneği verilmiştir. Bir kez deneyin -

#!/usr/bin/python

import smtplib

message = """From: From Person <[email protected]>
To: To Person <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format

<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

Ekleri E-posta Olarak Gönderme

Karışık içerikli bir e-posta göndermek için, Content-type başlık multipart/mixed. Ardından, metin ve ek bölümleri içinde belirtilebilirboundaries.

E-postanın mesaj kısmında görünmeyen iki tire ve ardından benzersiz bir sayı ile bir sınır başlatılır. E-postanın son bölümünü belirten son sınır da iki kısa çizgiyle bitmelidir.

Ekli dosyalar şu şekilde kodlanmalıdır: pack("m") iletimden önce base64 kodlamasına sahip olmak için işlev.

Misal

Bir dosya gönderen örnek aşağıdadır /tmp/test.txtek olarak. Bir kez deneyin -

#!/usr/bin/python

import smtplib
import base64

filename = "/tmp/test.txt"

# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)  # base64

sender = '[email protected]'
reciever = '[email protected]'

marker = "AUNIQUEMARKER"

body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)

# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit

%s
--%s
""" % (body,marker)

# Define the attachment section
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, reciever, message)
   print "Successfully sent email"
except Exception:
   print "Error: unable to send email"

Birkaç iş parçacığını çalıştırmak, aynı anda birkaç farklı programı çalıştırmaya benzer, ancak aşağıdaki avantajlara sahiptir:

  • Bir süreç içindeki birden çok iş parçacığı, ana iş parçacığı ile aynı veri alanını paylaşır ve bu nedenle, ayrı işlemler olmalarına göre daha kolay bilgi paylaşabilir veya birbirleriyle iletişim kurabilir.

  • İş parçacıkları bazen hafif işlemler olarak adlandırılır ve fazla bellek yükü gerektirmezler; süreçlerden daha ucuzdurlar.

Bir iş parçacığının bir başlangıcı, bir yürütme sırası ve bir sonucu vardır. İçinde bulunduğu bağlamda şu anda nerede çalıştığını takip eden bir yönerge işaretçisine sahiptir.

  • Önceden boşaltılabilir (kesintiye uğrayabilir)

  • Diğer iş parçacıkları çalışırken geçici olarak beklemeye alınabilir (uyku olarak da bilinir) - buna esneme denir.

Yeni Bir Konu Başlamak

Başka bir iş parçacığı oluşturmak için, iş parçacığı modülünde bulunan aşağıdaki yöntemi çağırmanız gerekir -

thread.start_new_thread ( function, args[, kwargs] )

Bu yöntem çağrısı, hem Linux hem de Windows'ta yeni iş parçacıkları oluşturmanın hızlı ve verimli bir yolunu sağlar.

Yöntem çağrısı hemen döner ve çocuk evre başlar ve geçirilen argüman listesiyle işlevi çağırır . İşlev geri döndüğünde, iş parçacığı sona erer.

Burada args , argümanların bir demetidir; herhangi bir argüman iletmeden işlevi çağırmak için boş bir demet kullanın. kwargs , isteğe bağlı bir anahtar kelime argümanları sözlüğüdür .

Misal

#!/usr/bin/python

import thread
import time

# Define a function for the thread
def print_time( threadName, delay):
   count = 0
   while count < 5:
      time.sleep(delay)
      count += 1
      print "%s: %s" % ( threadName, time.ctime(time.time()) )

# Create two threads as follows
try:
   thread.start_new_thread( print_time, ("Thread-1", 2, ) )
   thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
   print "Error: unable to start thread"

while 1:
   pass

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Thread-1: Thu Jan 22 15:42:17 2009
Thread-1: Thu Jan 22 15:42:19 2009
Thread-2: Thu Jan 22 15:42:19 2009
Thread-1: Thu Jan 22 15:42:21 2009
Thread-2: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:25 2009
Thread-2: Thu Jan 22 15:42:27 2009
Thread-2: Thu Jan 22 15:42:31 2009
Thread-2: Thu Jan 22 15:42:35 2009

Düşük seviyeli diş çekme için çok etkili olmasına rağmen, iplik modülü yeni diş açma modülüne kıyasla çok sınırlıdır.

Threading Modülü

Python 2.4 ile birlikte gelen yeni diş açma modülü, önceki bölümde tartışılan diş modülüne göre çok daha güçlü, yüksek seviyeli destek sağlar.

Parçacığı modülü tüm yöntemler sunar iplik modülü ve bazı ek yöntemler sağlar -

  • threading.activeCount() - Aktif olan iş parçacığı nesnelerinin sayısını döndürür.

  • threading.currentThread() - Çağıranın iş parçacığı kontrolündeki iş parçacığı nesnelerinin sayısını döndürür.

  • threading.enumerate() - Şu anda aktif olan tüm iş parçacığı nesnelerinin bir listesini döndürür.

Yöntemlere ek olarak, threading modülü, threading uygulayan Thread sınıfına sahiptir. Thread sınıfı tarafından sağlanan yöntemler aşağıdaki gibidir -

  • run() - run () yöntemi, bir iş parçacığının giriş noktasıdır.

  • start() - start () yöntemi, çalıştırma yöntemini çağırarak bir iş parçacığı başlatır.

  • join([time]) - join (), iş parçacıklarının sona ermesini bekler.

  • isAlive() - isAlive () yöntemi, bir iş parçacığının hala yürütülmekte olup olmadığını kontrol eder.

  • getName() - getName () yöntemi bir iş parçacığının adını döndürür.

  • setName() - setName () yöntemi bir iş parçacığının adını belirler.

Diş Açma Modülünü Kullanarak Diş Oluşturma

Diş çekme modülünü kullanarak yeni bir diş açmak için aşağıdakileri yapmanız gerekir -

  • Thread sınıfının yeni bir alt sınıfını tanımlayın .

  • Ek bağımsız değişkenler eklemek için __init __ (self [, args]) yöntemini geçersiz kılın .

  • Ardından, iş parçacığının başlatıldığında ne yapması gerektiğini uygulamak için run (self [, args]) yöntemini geçersiz kılın.

Yeni oluşturduktan sonra Konu alt sınıfı, bunu bir örneğini oluşturmak ve sonra da çağırarak yeni iş parçacığı başlayabilir start () sırayla aramaları, () çalıştırmak yöntemi.

Misal

#!/usr/bin/python

import threading
import time

exitFlag = 0

class myThread (threading.Thread):
   def __init__(self, threadID, name, counter):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.counter = counter
   def run(self):
      print "Starting " + self.name
      print_time(self.name, self.counter, 5)
      print "Exiting " + self.name

def print_time(threadName, counter, delay):
   while counter:
      if exitFlag:
         threadName.exit()
      time.sleep(delay)
      print "%s: %s" % (threadName, time.ctime(time.time()))
      counter -= 1

# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

# Start new Threads
thread1.start()
thread2.start()

print "Exiting Main Thread"

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Starting Thread-1
Starting Thread-2
Exiting Main Thread
Thread-1: Thu Mar 21 09:10:03 2013
Thread-1: Thu Mar 21 09:10:04 2013
Thread-2: Thu Mar 21 09:10:04 2013
Thread-1: Thu Mar 21 09:10:05 2013
Thread-1: Thu Mar 21 09:10:06 2013
Thread-2: Thu Mar 21 09:10:06 2013
Thread-1: Thu Mar 21 09:10:07 2013
Exiting Thread-1
Thread-2: Thu Mar 21 09:10:08 2013
Thread-2: Thu Mar 21 09:10:10 2013
Thread-2: Thu Mar 21 09:10:12 2013
Exiting Thread-2

Konuları Senkronize Etme

Python ile sağlanan diş çekme modülü, iş parçacıkları senkronize etmenize izin veren uygulaması kolay bir kilitleme mekanizması içerir. Yeni kilidi döndüren Lock () yöntemi çağrılarak yeni bir kilit oluşturulur .

Edinme (engelleme) Yeni kilit nesnesinin ait yöntem eş zamanlı olarak çalışacak şekilde mesajları zorlamak için kullanılır. İsteğe bağlı engelleme parametresi, iş parçacığının kilidi almak için bekleyip bekleyemeyeceğini kontrol etmenizi sağlar.

Eğer engelleme 0 olarak ayarlanır, bir 0 değeri ile iplik döner derhal kilit kazanılmış ve edilemezse ile kilit satın alınmıştır eğer 1. Engelleme 1 olarak ayarlanmışsa, iplik bloke olur ve kilidin açılmasını bekler.

Salma () , yeni kilit nesnesinin ait yöntem artık gereken zaman kilidi serbest bırakmak için kullanılır.

Misal

#!/usr/bin/python

import threading
import time

class myThread (threading.Thread):
   def __init__(self, threadID, name, counter):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.counter = counter
   def run(self):
      print "Starting " + self.name
      # Get lock to synchronize threads
      threadLock.acquire()
      print_time(self.name, self.counter, 3)
      # Free lock to release next thread
      threadLock.release()

def print_time(threadName, delay, counter):
   while counter:
      time.sleep(delay)
      print "%s: %s" % (threadName, time.ctime(time.time()))
      counter -= 1

threadLock = threading.Lock()
threads = []

# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

# Start new Threads
thread1.start()
thread2.start()

# Add threads to thread list
threads.append(thread1)
threads.append(thread2)

# Wait for all threads to complete
for t in threads:
    t.join()
print "Exiting Main Thread"

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Starting Thread-1
Starting Thread-2
Thread-1: Thu Mar 21 09:11:28 2013
Thread-1: Thu Mar 21 09:11:29 2013
Thread-1: Thu Mar 21 09:11:30 2013
Thread-2: Thu Mar 21 09:11:32 2013
Thread-2: Thu Mar 21 09:11:34 2013
Thread-2: Thu Mar 21 09:11:36 2013
Exiting Main Thread

Çok iş parçacıklı Öncelik Sırası

Kuyruk modülü öğeleri belirli sayıda tutabilir yeni bir kuyruk nesne oluşturmak için olanak sağlar. Kuyruğu kontrol etmek için aşağıdaki yöntemler vardır -

  • get() - get (), kuyruktan bir öğeyi kaldırır ve döndürür.

  • put() - Put, öğeyi bir kuyruğa ekler.

  • qsize() - qsize (), şu anda kuyrukta olan öğelerin sayısını döndürür.

  • empty()- Sıra boşsa empty () True döndürür; aksi takdirde, False.

  • full()- kuyruk doluysa full () True döndürür; aksi takdirde, False.

Misal

#!/usr/bin/python

import Queue
import threading
import time

exitFlag = 0

class myThread (threading.Thread):
   def __init__(self, threadID, name, q):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.q = q
   def run(self):
      print "Starting " + self.name
      process_data(self.name, self.q)
      print "Exiting " + self.name

def process_data(threadName, q):
   while not exitFlag:
      queueLock.acquire()
         if not workQueue.empty():
            data = q.get()
            queueLock.release()
            print "%s processing %s" % (threadName, data)
         else:
            queueLock.release()
         time.sleep(1)

threadList = ["Thread-1", "Thread-2", "Thread-3"]
nameList = ["One", "Two", "Three", "Four", "Five"]
queueLock = threading.Lock()
workQueue = Queue.Queue(10)
threads = []
threadID = 1

# Create new threads
for tName in threadList:
   thread = myThread(threadID, tName, workQueue)
   thread.start()
   threads.append(thread)
   threadID += 1

# Fill the queue
queueLock.acquire()
for word in nameList:
   workQueue.put(word)
queueLock.release()

# Wait for queue to empty
while not workQueue.empty():
   pass

# Notify threads it's time to exit
exitFlag = 1

# Wait for all threads to complete
for t in threads:
   t.join()
print "Exiting Main Thread"

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Starting Thread-1
Starting Thread-2
Starting Thread-3
Thread-1 processing One
Thread-2 processing Two
Thread-3 processing Three
Thread-1 processing Four
Thread-2 processing Five
Exiting Thread-3
Exiting Thread-1
Exiting Thread-2
Exiting Main Thread

XML, programcıların işletim sistemi ve / veya geliştirme dilinden bağımsız olarak diğer uygulamalar tarafından okunabilen uygulamalar geliştirmesine olanak tanıyan taşınabilir, açık kaynaklı bir dildir.

XML nedir?

Genişletilebilir Biçimlendirme Dili (XML), HTML veya SGML'ye çok benzer bir biçimlendirme dilidir. Bu, World Wide Web Konsorsiyumu tarafından önerilir ve açık bir standart olarak mevcuttur.

XML, SQL tabanlı bir omurga gerektirmeden küçük ila orta büyüklükteki verileri izlemek için son derece kullanışlıdır.

XML Ayrıştırıcı Mimarileri ve API'leri

Python standart kitaplığı, XML ile çalışmak için minimal ama kullanışlı bir arabirim kümesi sağlar.

XML verileri için en temel ve yaygın olarak kullanılan iki API, SAX ve DOM arayüzleridir.

  • Simple API for XML (SAX)- Burada, ilgili olaylar için geri aramaları kaydedersiniz ve ardından ayrıştırıcının belge boyunca ilerlemesine izin verirsiniz. Bu, belgeleriniz büyük olduğunda veya bellek sınırlamalarınız olduğunda kullanışlıdır, dosyayı diskten okurken ayrıştırır ve dosyanın tamamı hiçbir zaman bellekte depolanmaz.

  • Document Object Model (DOM) API - Bu, tüm dosyanın belleğe okunduğu ve bir XML belgesinin tüm özelliklerini temsil etmek için hiyerarşik (ağaç tabanlı) bir biçimde saklandığı bir World Wide Web Konsorsiyumu önerisidir.

SAX, büyük dosyalarla çalışırken DOM'un yapabildiği kadar hızlı bilgiyi işleyemez. Öte yandan, yalnızca DOM'u kullanmak, özellikle çok sayıda küçük dosyada kullanılıyorsa, kaynaklarınızı gerçekten öldürebilir.

SAX salt okunurdur, DOM ise XML dosyasında değişikliklere izin verir. Bu iki farklı API tam anlamıyla birbirini tamamladığından, büyük projelerde ikisini birden kullanamamanız için hiçbir neden yoktur.

Tüm XML kodu örneklerimiz için, girdi olarak basit bir XML dosyası movies.xml kullanalım -

<collection shelf="New Arrivals">
<movie title="Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description>
</movie>
   <movie title="Trigun">
   <type>Anime, Action</type>
   <format>DVD</format>
   <episodes>4</episodes>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
   <type>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description>
</movie>
</collection>

XML'i SAX API'leri ile ayrıştırma

SAX, olaya dayalı XML ayrıştırma için standart bir arabirimdir. XML'i SAX ile ayrıştırmak genellikle xml.sax.ContentHandler'ı alt sınıflayarak kendi ContentHandler'ınızı oluşturmanızı gerektirir.

Kişisel ContentHandler belirli etiketler kolları ve XML sizin lezzet (ler) bağlıyor. ContentHandler nesnesi, çeşitli ayrıştırma olaylarını işlemek için yöntemler sağlar. Sahip ayrıştırıcısı, XML dosyasını ayrıştırırken ContentHandler yöntemlerini çağırır.

StartDocument ve endDocument yöntemleri XML dosyasının başlangıcında ve sonunda çağrılır. Yöntem karakterleri (metin) , parametre metni aracılığıyla XML dosyasının karakter verileridir.

ContentHandler, her öğenin başında ve sonunda çağrılır. Ayrıştırıcı ad alanı modunda değilse, startElement (etiket, öznitelikler) ve endElement (etiket) yöntemleri çağrılır; aksi takdirde, ilgili yöntemler startElementNS ve endElementNS çağrılır. Burada etiket, öğe etiketidir ve nitelikler bir Nitelikler nesnesidir.

Devam etmeden önce anlamanız gereken diğer önemli yöntemler:

make_parser Yöntemi

Aşağıdaki yöntem yeni bir ayrıştırıcı nesnesi oluşturur ve onu döndürür. Oluşturulan ayrıştırıcı nesnesi, sistemin bulduğu ilk ayrıştırıcı türünde olacaktır.

xml.sax.make_parser( [parser_list] )

İşte parametrelerin detayı -

  • parser_list - Tümünün make_parser yöntemini uygulaması gereken, kullanılacak ayrıştırıcıların bir listesinden oluşan isteğe bağlı bağımsız değişken.

ayrıştırma Yöntemi

Aşağıdaki yöntem bir SAX ayrıştırıcısı oluşturur ve bir belgeyi ayrıştırmak için kullanır.

xml.sax.parse( xmlfile, contenthandler[, errorhandler])

İşte parametrelerin detayı -

  • xmlfile - Bu, okunacak XML dosyasının adıdır.

  • contenthandler - Bu bir ContentHandler nesnesi olmalıdır.

  • errorhandler - Belirtilirse, errorhandler bir SAX ErrorHandler nesnesi olmalıdır.

parseString Yöntemi

SAX ayrıştırıcısı oluşturmak ve belirtilenleri ayrıştırmak için bir yöntem daha vardır. XML string.

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

İşte parametrelerin detayı -

  • xmlstring - Bu, okunacak XML dizesinin adıdır.

  • contenthandler - Bu bir ContentHandler nesnesi olmalıdır.

  • errorhandler - Belirtilirse, errorhandler bir SAX ErrorHandler nesnesi olmalıdır.

Misal

#!/usr/bin/python

import xml.sax

class MovieHandler( xml.sax.ContentHandler ):
   def __init__(self):
      self.CurrentData = ""
      self.type = ""
      self.format = ""
      self.year = ""
      self.rating = ""
      self.stars = ""
      self.description = ""

   # Call when an element starts
   def startElement(self, tag, attributes):
      self.CurrentData = tag
      if tag == "movie":
         print "*****Movie*****"
         title = attributes["title"]
         print "Title:", title

   # Call when an elements ends
   def endElement(self, tag):
      if self.CurrentData == "type":
         print "Type:", self.type
      elif self.CurrentData == "format":
         print "Format:", self.format
      elif self.CurrentData == "year":
         print "Year:", self.year
      elif self.CurrentData == "rating":
         print "Rating:", self.rating
      elif self.CurrentData == "stars":
         print "Stars:", self.stars
      elif self.CurrentData == "description":
         print "Description:", self.description
      self.CurrentData = ""

   # Call when a character is read
   def characters(self, content):
      if self.CurrentData == "type":
         self.type = content
      elif self.CurrentData == "format":
         self.format = content
      elif self.CurrentData == "year":
         self.year = content
      elif self.CurrentData == "rating":
         self.rating = content
      elif self.CurrentData == "stars":
         self.stars = content
      elif self.CurrentData == "description":
         self.description = content
  
if ( __name__ == "__main__"):
   
   # create an XMLReader
   parser = xml.sax.make_parser()
   # turn off namepsaces
   parser.setFeature(xml.sax.handler.feature_namespaces, 0)

   # override the default ContextHandler
   Handler = MovieHandler()
   parser.setContentHandler( Handler )
   
   parser.parse("movies.xml")

Bu, aşağıdaki sonucu verecektir -

*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Year: 2003
Rating: PG
Stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Year: 1989
Rating: R
Stars: 8
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Stars: 10
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Stars: 2
Description: Viewable boredom

SAX API belgeleri hakkında eksiksiz bir ayrıntı için, lütfen standart Python SAX API'lerine bakın .

XML'i DOM API'leriyle ayrıştırma

Belge Nesne Modeli ("DOM"), XML belgelerine erişmek ve bunları değiştirmek için World Wide Web Consortium (W3C) tarafından sağlanan bir diller arası API'dir.

DOM, rastgele erişimli uygulamalar için son derece kullanışlıdır. SAX, bir seferde belgenin yalnızca bir bitinin görüntülenmesine izin verir. Bir SAX öğesine bakıyorsanız, diğerine erişiminiz yoktur.

İşte bir XML belgesini hızlı bir şekilde yüklemenin ve xml.dom modülünü kullanarak bir minidom nesnesi oluşturmanın en kolay yolu. Minidom nesnesi, XML dosyasından hızla bir DOM ağacı oluşturan basit bir ayrıştırıcı yöntemi sağlar.

Örnek ifade, dosya tarafından belirlenen XML dosyasını bir DOM ağaç nesnesine ayrıştırmak için minidom nesnesinin ayrıştırma (dosya [, ayrıştırıcı]) işlevini çağırır.

#!/usr/bin/python

from xml.dom.minidom import parse
import xml.dom.minidom

# Open XML document using minidom parser
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
   print "Root element : %s" % collection.getAttribute("shelf")

# Get all the movies in the collection
movies = collection.getElementsByTagName("movie")

# Print detail of each movie.
for movie in movies:
   print "*****Movie*****"
   if movie.hasAttribute("title"):
      print "Title: %s" % movie.getAttribute("title")

   type = movie.getElementsByTagName('type')[0]
   print "Type: %s" % type.childNodes[0].data
   format = movie.getElementsByTagName('format')[0]
   print "Format: %s" % format.childNodes[0].data
   rating = movie.getElementsByTagName('rating')[0]
   print "Rating: %s" % rating.childNodes[0].data
   description = movie.getElementsByTagName('description')[0]
   print "Description: %s" % description.childNodes[0].data

Bu, aşağıdaki sonucu verecektir -

Root element : New Arrivals
*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Rating: PG
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Rating: R
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Description: Viewable boredom

DOM API belgelerine ilişkin eksiksiz bir ayrıntı için, lütfen standart Python DOM API'lerine bakın .

Python, grafik kullanıcı arayüzleri (GUI'ler) geliştirmek için çeşitli seçenekler sunar. En önemlileri aşağıda listelenmiştir.

  • Tkinter- Tkinter, Python ile birlikte gönderilen Tk GUI araç setinin Python arayüzüdür. Bu seçeneğe bu bölümde bakacağız.

  • wxPython - Bu, wxWindows için açık kaynaklı bir Python arayüzüdür http://wxpython.org.

  • JPython - JPython, Python komut dosyalarına yerel makinedeki Java sınıfı kitaplıklarına sorunsuz erişim sağlayan Java için bir Python bağlantı noktasıdır http://www.jython.org.

İnternette bulabileceğiniz birçok başka arayüz vardır.

Tkinter Programlama

Tkinter, Python için standart GUI kitaplığıdır. Python, Tkinter ile birleştirildiğinde GUI uygulamaları oluşturmak için hızlı ve kolay bir yol sağlar. Tkinter, Tk GUI araç setine güçlü bir nesne yönelimli arayüz sağlar.

Tkinter kullanarak bir GUI uygulaması oluşturmak kolay bir iştir. Tek yapmanız gereken aşağıdaki adımları uygulamaktır -

  • Tkinter modülünü içe aktarın .

  • GUI uygulaması ana penceresini oluşturun.

  • GUI uygulamasına yukarıda bahsedilen widget'lardan bir veya daha fazlasını ekleyin.

  • Kullanıcı tarafından tetiklenen her olaya karşı eylemde bulunmak için ana olay döngüsünü girin.

Misal

#!/usr/bin/python

import Tkinter
top = Tkinter.Tk()
# Code to add widgets will go here...
top.mainloop()

Bu, aşağıdaki bir pencere oluşturacaktır -

Tkinter Widget'ları

Tkinter, bir GUI uygulamasında kullanılan düğmeler, etiketler ve metin kutuları gibi çeşitli kontroller sağlar. Bu kontroller genellikle widget olarak adlandırılır.

Tkinter'de şu anda 15 tür widget vardır. Bu widget'ların yanı sıra aşağıdaki tabloda kısa bir açıklama sunuyoruz -

Sr.No. Operatör ve Açıklama
1 Buton

Düğme pencere öğesi, uygulamanızdaki düğmeleri görüntülemek için kullanılır.

2 Tuval

Tuval widget'ı, uygulamanızda çizgiler, ovaller, çokgenler ve dikdörtgenler gibi şekiller çizmek için kullanılır.

3 Kontrol düğmesi

Onay düğmesi widget'ı, bir dizi seçeneği onay kutuları olarak görüntülemek için kullanılır. Kullanıcı aynı anda birden fazla seçenek seçebilir.

4 Giriş

Giriş pencere öğesi, bir kullanıcıdan değerleri kabul etmek için tek satırlık bir metin alanı görüntülemek için kullanılır.

5 Çerçeve

Çerçeve widget'ı, diğer widget'ları organize etmek için bir kap widget'ı olarak kullanılır.

6 Etiket

Etiket widget'ı, diğer widget'lar için tek satırlık bir başlık sağlamak için kullanılır. Ayrıca görüntüler de içerebilir.

7 Liste kutusu

Listbox widget'ı, bir kullanıcıya seçenek listesi sağlamak için kullanılır.

8 Menü butonu

Menü düğmesi pencere öğesi, uygulamanızda menüleri görüntülemek için kullanılır.

9 Menü

Menü widget'ı, bir kullanıcıya çeşitli komutlar sağlamak için kullanılır. Bu komutlar Menubutton'da bulunur.

10 İleti

Mesaj widget'ı, bir kullanıcıdan değerleri kabul etmek için çok satırlı metin alanlarını görüntülemek için kullanılır.

11 Radyo düğmesi

Radiobutton widget'ı, bir dizi seçeneği radyo düğmeleri olarak görüntülemek için kullanılır. Kullanıcı bir seferde yalnızca bir seçeneği seçebilir.

12 Ölçek

Ölçek widget'ı, bir kaydırıcı widget'ı sağlamak için kullanılır.

13 Kaydırma çubuğu

Kaydırma çubuğu widget'ı, liste kutuları gibi çeşitli widget'lara kaydırma özelliği eklemek için kullanılır.

14 Metin

Metin widget'ı, metni birden çok satırda görüntülemek için kullanılır.

15 Üst düzey

Üst Düzey pencere öğesi, ayrı bir pencere konteyneri sağlamak için kullanılır.

16 Eğirme kutusu

Spinbox pencere öğesi, sabit sayıda değer arasından seçim yapmak için kullanılabilen standart Tkinter Giriş pencere öğesinin bir çeşididir.

17 PanedWindow

PanedWindow, yatay veya dikey olarak düzenlenmiş herhangi bir sayıda bölme içerebilen bir kap pencere öğesidir.

18 LabelFrame

Labelframe, basit bir kapsayıcı pencere öğesidir. Birincil amacı, karmaşık pencere düzenleri için bir ayırıcı veya kap görevi görmektir.

19 tkMessageBox

Bu modül, uygulamalarınızdaki mesaj kutularını görüntülemek için kullanılır.

Bu widget'ları ayrıntılı olarak inceleyelim -

Standart özellikler

Boyutlar, renkler ve yazı tipleri gibi bazı ortak özelliklerinin nasıl belirlendiğine bir göz atalım.

  • Dimensions

  • Colors

  • Fonts

  • Anchors

  • Kabartma stilleri

  • Bitmaps

  • Cursors

Bunları kısaca inceleyelim -

Geometri Yönetimi

Tüm Tkinter widget'larının, ana pencere öğesi alanı boyunca pencere öğelerini düzenleme amacına sahip belirli geometri yönetimi yöntemlerine erişimi vardır. Tkinter şu geometri yöneticisi sınıflarını ortaya çıkarır: paket, ızgara ve yer.

  • Paketi () Yöntem - Bu geometri yöneticisi ana aracının yerleştirmeden önce bloklarda pencere öğeleri düzenler.

  • Izgara () Yöntem - Bu geometri yöneticisi ana aracının bir tablo-benzeri bir yapı içerisinde pencere öğeleri düzenler.

  • Yer () Yöntem - Bu geometri yöneticisi ana aracının belirli bir pozisyonda yerleştirerek widget'larınızı düzenler.

Geometri yönetimi yöntemlerini kısaca inceleyelim -

C, C ++ veya Java gibi herhangi bir derlenmiş dili kullanarak yazdığınız herhangi bir kod, başka bir Python betiğine entegre edilebilir veya içe aktarılabilir. Bu kod bir "uzantı" olarak kabul edilir.

Bir Python uzantı modülü, normal bir C kitaplığından başka bir şey değildir. Unix makinelerde, bu kitaplıklar genellikle.so(paylaşılan nesne için). Windows makinelerde genellikle şunu görürsünüz:.dll (dinamik bağlantılı kitaplık için).

Uzantıları Yazmak İçin Ön Koşullar

Uzantınızı yazmaya başlamak için Python başlık dosyalarına ihtiyacınız olacak.

  • Unix makinelerde, bu genellikle python2.5-dev gibi geliştiriciye özel bir paketin kurulmasını gerektirir .

  • Windows kullanıcıları bu başlıkları ikili Python yükleyicisini kullandıklarında paketin bir parçası olarak alırlar.

Ek olarak, C programlamayı kullanarak herhangi bir Python Uzantısını yazmak için iyi C veya C ++ bilgisine sahip olduğunuz varsayılır.

İlk olarak bir Python Uzantısına bakın

Bir Python genişletme modülüne ilk bakışınız için, kodunuzu dört bölüme ayırmanız gerekir -

  • Python.h başlık dosyası .

  • Modülünüzden arayüz olarak ortaya çıkarmak istediğiniz C fonksiyonları.

  • Python geliştiricilerinin bunları uzantı modülü içindeki C işlevleriyle gördükleri şekilde işlevlerinizin adlarını eşleştiren bir tablo.

  • Bir başlatma işlevi.

Başlık Dosyası Python.h

Modülünüzü yorumlayıcıya bağlamak için kullanılan dahili Python API'sine erişmenizi sağlayan C kaynak dosyanıza Python.h başlık dosyasını eklemeniz gerekir .

İhtiyaç duyabileceğiniz diğer başlıklardan önce Python.h'yi eklediğinizden emin olun. Python'dan çağırmak istediğiniz fonksiyonlar ile içerilenleri takip etmeniz gerekmektedir.

C İşlevleri

İşlevlerinizin C uygulamasının imzaları her zaman aşağıdaki üç biçimden birini alır:

static PyObject *MyFunction( PyObject *self, PyObject *args );

static PyObject *MyFunctionWithKeywords(PyObject *self,
                                 PyObject *args,
                                 PyObject *kw);

static PyObject *MyFunctionWithNoArgs( PyObject *self );

Önceki bildirimlerin her biri bir Python nesnesi döndürür. Python'da C'de olduğu gibi void işlevi diye bir şey yoktur . İşlevlerinizin bir değer döndürmesini istemiyorsanız, Python'un C eşdeğerini döndürün.Nonedeğer. Python başlıkları, bunu bizim için yapan bir Py_RETURN_NONE makrosu tanımlar.

C işlevlerinizin adları, uzantı modülünün dışında asla görülmediklerinden istediğiniz gibi olabilir. Statik fonksiyon olarak tanımlanırlar .

C işlevleriniz genellikle Python modülü ve işlev adlarını burada gösterildiği gibi bir araya getirerek adlandırılır -

static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Do your stuff here. */
   Py_RETURN_NONE;
}

Bu, modül modülünün içinde func adı verilen bir Python işlevidir . Genellikle kaynak kodunuzda sonraki sırada gelen modül için yöntem tablosuna C işlevlerinize işaretçiler koyacaksınız.

Yöntem Eşleme Tablosu

Bu yöntem tablosu, PyMethodDef yapılarının basit bir dizisidir. Bu yapı şuna benzer -

struct PyMethodDef {
   char *ml_name;
   PyCFunction ml_meth;
   int ml_flags;
   char *ml_doc;
};

İşte bu yapının üyelerinin açıklaması -

  • ml_name - Bu, Python yorumlayıcısının Python programlarında kullanıldığında sunduğu gibi işlevin adıdır.

  • ml_meth - Bu, önceki seçimde açıklanan imzalardan herhangi birine sahip bir işlevin adresi olmalıdır.

  • ml_flags - Bu, yorumlayıcıya ml_meth'in üç imzadan hangisini kullandığını söyler.

    • Bu bayrak genellikle METH_VARARGS değerine sahiptir.

    • Fonksiyonunuzda anahtar kelime argümanlarına izin vermek istiyorsanız, bu bayrak METH_KEYWORDS ile bitsel OR'ed olabilir.

    • Bu ayrıca herhangi bir argümanı kabul etmek istemediğinizi gösteren bir METH_NOARGS değerine sahip olabilir.

  • ml_doc - Bu, işlevin docstring'idir ve bir tane yazmak istemiyorsanız NULL olabilir.

Bu tablonun uygun üyeler için NULL ve 0 değerlerinden oluşan bir nöbetçi ile sonlandırılması gerekir.

Misal

Yukarıda tanımlanan fonksiyon için, aşağıdaki yöntem eşleme tablosuna sahibiz -

static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

Başlatma İşlevi

Genişletme modülünüzün son kısmı, başlatma işlevidir. Bu işlev, modül yüklendiğinde Python yorumlayıcısı tarafından çağrılır. Fonksiyonun adlandırılması gerekirinitModule, Modül modülün adıdır.

Başlatma işlevinin oluşturacağınız kütüphaneden dışa aktarılması gerekir. Python başlıkları, PyMODINIT_FUNC'yi, derlediğimiz belirli bir ortamda gerçekleşmesi için uygun büyülü sözler içerecek şekilde tanımlar. Tek yapmanız gereken, işlevi tanımlarken kullanmaktır.

C başlatma işleviniz genellikle aşağıdaki genel yapıya sahiptir -

PyMODINIT_FUNC initModule() {
   Py_InitModule3(func, module_methods, "docstring...");
}

İşte Py_InitModule3 işlevinin açıklaması -

  • func - Bu, dışa aktarılacak işlevdir.

  • module_methods - Bu, yukarıda tanımlanan eşleme tablosu adıdır.

  • docstring - Uzantınızda vermek istediğiniz yorum budur.

Tüm bunları bir araya getirmek aşağıdaki gibi görünür -

#include <Python.h>

static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Do your stuff here. */
   Py_RETURN_NONE;
}

static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

PyMODINIT_FUNC initModule() {
   Py_InitModule3(func, module_methods, "docstring...");
}

Misal

Yukarıdaki tüm kavramlardan yararlanan basit bir örnek -

#include <Python.h>

static PyObject* helloworld(PyObject* self) {
   return Py_BuildValue("s", "Hello, Python extensions!!");
}

static char helloworld_docs[] =
   "helloworld( ): Any message you want to put here!!\n";

static PyMethodDef helloworld_funcs[] = {
   {"helloworld", (PyCFunction)helloworld, 
      METH_NOARGS, helloworld_docs},
      {NULL}
};

void inithelloworld(void) {
   Py_InitModule3("helloworld", helloworld_funcs,
                  "Extension module example!");
}

Burada Py_BuildValue işlevi bir Python değeri oluşturmak için kullanılır. Yukarıdaki kodu merhaba.c dosyasına kaydedin. Python betiğinden çağrılacak bu modülü nasıl derleyip kuracağımızı göreceğiz.

Uzantıları Oluşturma ve Yükleme

Distutils paketi çok kolay standart bir şekilde, Python modülleri, hem saf Python ve uzatma modüllerini dağıtmak için yapar. Modüller kaynak biçiminde dağıtılır ve genellikle aşağıdaki gibi setup.py adı verilen bir kurulum betiği aracılığıyla oluşturulur ve yüklenir .

Yukarıdaki modül için aşağıdaki setup.py betiğini hazırlamanız gerekir -

from distutils.core import setup, Extension
setup(name='helloworld', version='1.0',  \
      ext_modules=[Extension('helloworld', ['hello.c'])])

Şimdi, gerekli tüm derleme ve bağlama adımlarını doğru derleyici ve bağlayıcı komutları ve bayrakları ile gerçekleştirecek olan aşağıdaki komutu kullanın ve elde edilen dinamik kitaplığı uygun bir dizine kopyalayın -

$ python setup.py install

Unix tabanlı sistemlerde, site paketleri dizinine yazma izinlerine sahip olmak için büyük olasılıkla bu komutu root olarak çalıştırmanız gerekecektir. Bu genellikle Windows'ta bir sorun değildir.

Uzantıları İçe Aktarma

Uzantınızı yükledikten sonra, bu uzantıyı Python betiğinize aşağıdaki gibi içe aktarabilir ve çağırabilirsiniz -

#!/usr/bin/python
import helloworld

print helloworld.helloworld()

Bu, aşağıdaki sonucu verecektir -

Hello, Python extensions!!

Fonksiyon Parametrelerini Geçirme

Büyük olasılıkla bağımsız değişkenleri kabul eden işlevleri tanımlamak isteyeceğinizden, C işlevleriniz için diğer imzalardan birini kullanabilirsiniz. Örneğin, bir dizi parametreyi kabul eden aşağıdaki işlev şu şekilde tanımlanır:

static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Parse args and do something interesting here. */
   Py_RETURN_NONE;
}

Yeni işlev için bir giriş içeren yöntem tablosu şöyle görünecektir -

static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { "func", module_func, METH_VARARGS, NULL },
   { NULL, NULL, 0, NULL }
};

API PyArg_ParseTuple işlevini, C işlevinize geçirilen bir PyObject işaretçisinden argümanları çıkarmak için kullanabilirsiniz .

PyArg_ParseTuple için ilk argüman, args argümanıdır. Bu, ayrıştıracağınız nesnedir . İkinci bağımsız değişken, görünmelerini beklediğiniz şekilde bağımsız değişkenleri açıklayan bir biçim dizesidir. Her bağımsız değişken, aşağıdaki gibi biçim dizesinde bir veya daha fazla karakterle temsil edilir.

static PyObject *module_func(PyObject *self, PyObject *args) {
   int i;
   double d;
   char *s;

   if (!PyArg_ParseTuple(args, "ids", &i, &d, &s)) {
      return NULL;
   }
   
   /* Do something interesting here. */
   Py_RETURN_NONE;
}

Modülünüzün yeni sürümünü derlemek ve içe aktarmak, yeni işlevi herhangi bir türden herhangi bir sayıda argümanla çağırmanıza olanak tanır -

module.func(1, s="three", d=2.0)
module.func(i=1, d=2.0, s="three")
module.func(s="three", d=2.0, i=1)

Muhtemelen daha fazla varyasyon bulabilirsin.

PyArg_ParseTuple İşlevi

İşte standart imza PyArg_ParseTuple işlev -

int PyArg_ParseTuple(PyObject* tuple,char* format,...)

Bu işlev, hatalar için 0 ve başarı için 0'a eşit olmayan bir değer döndürür. tuple, C işlevinin ikinci argümanı olan PyObject * 'dir. Buradaki format , zorunlu ve isteğe bağlı bağımsız değişkenleri tanımlayan bir C dizesidir.

İşte için format kodlarının bir listesi PyArg_ParseTuple işlev -

Kod C tipi Anlam
c kömür 1 uzunluğundaki bir Python dizesi C karakterine dönüşür.
d çift Bir Python şamandırası, C doubleına dönüşür.
f yüzen Python şamandırası, C şamandırasına dönüşür.
ben int Python int, C int olur.
l uzun Python int, C uzunluğuna dönüşür.
L uzunca Python int, uzun C olur
Ö PyObject * Python bağımsız değişkenine NULL olmayan ödünç alınmış başvuru alır.
s karakter * C karakterine gömülü boş değer içermeyen Python dizesi *.
s # char * + int Herhangi bir Python dizesi - C adresi ve uzunluğu.
t # char * + int C adresine ve uzunluğuna salt okunur tek bölümlü arabellek.
sen Py_UNICODE * C'ye gömülü boş değerler olmadan Python Unicode.
u # Py_UNICODE * + int Herhangi bir Python Unicode C adresi ve uzunluğu.
w # char * + int Tek segmentli tamponu C adresine ve uzunluğuna okuyun / yazın.
z karakter * S gibi, Yok'u da kabul eder (C karakterini * NULL olarak ayarlar).
z # char * + int S # gibi, Yok'u da kabul eder (C karakterini * NULL olarak ayarlar).
(...) göre ... Bir Python dizisi, öğe başına bir bağımsız değişken olarak değerlendirilir.
|   Aşağıdaki bağımsız değişkenler isteğe bağlıdır.
:   Sonu biçimlendir, ardından hata mesajları için işlev adı.
;   Sonu biçimlendirin, ardından tüm hata mesajı metnini takip edin.

Dönen Değerler

Py_BuildValue , PyArg_ParseTuple'ın yaptığı gibi bir biçim dizgisi alır . Oluşturmakta olduğunuz değerlerin adreslerini iletmek yerine gerçek değerleri iletiyorsunuz. İşte add işlevinin nasıl uygulanacağını gösteren bir örnek -

static PyObject *foo_add(PyObject *self, PyObject *args) {
   int a;
   int b;

   if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
      return NULL;
   }
   return Py_BuildValue("i", a + b);
}

Python'da uygulandığında nasıl görüneceği budur -

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

İşlevinizden iki değeri aşağıdaki gibi döndürebilirsiniz, bu Python'da bir liste kullanılarak elde edilir.

static PyObject *foo_add_subtract(PyObject *self, PyObject *args) {
   int a;
   int b;

   if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
      return NULL;
   }
   return Py_BuildValue("ii", a + b, a - b);
}

Python'da uygulandığında nasıl görüneceği budur -

def add_subtract(a, b):
   return (a + b, a - b)

Py_BuildValue İşlevi

İşte standart imza Py_BuildValue işlev -

PyObject* Py_BuildValue(char* format,...)

Burada format , oluşturulacak Python nesnesini tanımlayan bir C dizesidir. Aşağıdaki Py_BuildValue bağımsız değişkenleri, sonucun oluşturulduğu C değerleridir. PyObject * sonucun yeni referanstır.

Aşağıdaki tablo, sıfır veya daha fazlası dize biçiminde birleştirilen yaygın olarak kullanılan kod dizelerini listeler.

Kod C tipi Anlam
c kömür AC karakter 1 uzunluğunda bir Python dizisi olur.
d çift AC double, bir Python şamandırasına dönüşür.
f yüzen AC float bir Python float'a dönüşür.
ben int AC int, Python int olur.
l uzun AC long bir Python int olur.
N PyObject * Bir Python nesnesi iletir ve bir referans çalar.
Ö PyObject * Bir Python nesnesi iletir ve onu normal bir şekilde ARTIRIR.
Ö& dönüştür + geçersiz * Keyfi dönüşüm
s karakter * C 0 ile sonlandırılmış char * 'i Python dizesine veya NULL'dan Yok'a.
s # char * + int C karakter * ve uzunluk Python dizesine veya NULL'dan Yok'a.
sen Py_UNICODE * Python Unicode'a C çapında, boş sonlu dize veya NULL'dan Yok'a.
u # Py_UNICODE * + int C-geniş dize ve uzunluk Python Unicode'a veya NULL'dan Yok'a.
w # char * + int Tek segmentli tamponu C adresine ve uzunluğuna okuyun / yazın.
z karakter * S gibi, Yok'u da kabul eder (C karakterini * NULL olarak ayarlar).
z # char * + int S # gibi, Yok'u da kabul eder (C karakterini * NULL olarak ayarlar).
(...) göre ... C değerlerinden Python tuple oluşturur.
[...] göre ... C değerlerinden Python listesi oluşturur.
{...} göre ... C değerleri, alternatif anahtarlar ve değerlerden Python sözlüğü oluşturur.

Kod {...}, çift sayıda C değerinden, dönüşümlü olarak anahtarlar ve değerlerden sözlükler oluşturur. Örneğin, Py_BuildValue ("{issi}", 23, "zig", "zag", 42) Python'un {23: 'zig', 'zag': 42} gibi bir sözlük döndürür.