İPUCU

Python Artificial Intelligence’da en çok kullanılan dildir ve gerekli dökümanların paylaşım alanlar burada paylaşılmaktadır.

Seçenekler

[Python3.6] F-String //Easyly

BufGix - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2015
Nereden:
Phobos/Space
Mesajlar:
1.023
Konular:
74
Teşekkür (Etti):
314
Teşekkür (Aldı):
446
Ticaret:
(0) %
03-06-2018 19:49
#1
[Python3.6] F-String //Easyly


Merhabalar. Bugun sizlerle Python3.6 ile gelen f-string'leri inceleyeceğiz.




Normal stringler gibi davranan f-stringlerin genel amamcı string içinde python ifadeleri yazabilme olanağı sağlamasıdır.


f-stringler olmadan söyle yapıldığını hepimiz biliyoruz:
Kod:
isim = 'Omer'
string = "Merhabalar {}".format(isim)
print(string)

#Out:
#Merhabalar Omer
f-stringlerle bu islemi soyle yapabiliriz:

Kod:
isim = 'Omer'
string = f"Merhabalar {isim}"
print(string)

#Out
#Merhabalar Omer
f-stringlerin 'f' harfiyle baladığına dikkat edin.


Aslinda f-stringlerin en guzel yanı süslü parantezler içindeki deger ne olursa olsun, degerin string degerini otomatik olarak değistirmesi. f-string olmadan; ornek olarak 'int' tipinde bir degeri 'string' e cast etmemiz gerekirdi.

f-stringlerin icine koşul ifadeleri de koyabiliriz:
Kod:
isim = 'Ahmet'
string = f"Merhabalar {isim if isim == 'Ahmet' else 'Belirtilmedi'}"
print(string)

#Out:
#Merhabalar Ahmet

## Eger isim degeri 'Ahmet' olmasaydi ciktimiz soyle olurdu:
## Merhabalar Belirtilmedi

Simdi biraz değisik bir seyler yapalım:

Kod:
print(f"Sectiginiz sayilarin toplami: {int(input('Sayi1: ')) + int(input('Sayi2: '))}")


#Out:
#Sayi1: 12
#Sayi2: 2
#Sectiginiz sayilarin toplami: 14
Veya:

Kod:
isim = 'Ali'
yas = 6

print(f"{isim.upper()}'in yasi {yas} ve 10 yil sonra yasi {yas + 10} olacaktir...")


#Out
#ALI'nin yasi 6 ve 10 yil sonra yasi 16 olacaktir...
Alıntı:
ALcatraz'´isimli üyeden Alıntı Mesajı göster
Aslında f-string'in kullanışından çok hızı çok önemli bence.
Mesela resmedilmiş bir örneği ;
Kod:
In [13]: timeit f'{a} + {b} = {a + b}'
12.4 ns ± 0.17 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)

In [14]: timeit '{} + {} = {}'.format(a, b, a + b)
510 ns ± 4.19 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [15]: timeit '%s + %s = %s' % (a, b, a + b)
366 ns ± 4.05 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Ve tabi böyle olmasının nedeni bytecodelardan kaynaklanıyor.
Dissambled bytecode'dan iki bytecode komutunu atlıyor: LOAD_ATTR ve CALL_FUNCTION. Sadece a ile b'yi toplayan bir fonksiyon çağıralım f-string ile beraber.

Kod:
dis.dis(add_two_fstring)
  2           0 LOAD_CONST               1 (1)
              2 STORE_FAST               0 (a)

  3           4 LOAD_CONST               2 (2)
              6 STORE_FAST               1 (b)

  4           8 LOAD_FAST                0 (a)
             10 LOAD_FAST                1 (b)
             12 BINARY_ADD
             14 FORMAT_VALUE             0
             16 RETURN_VALUE
Str.format () kullandığımızda, format işlevinin öncelikle global değişken olarak"Araştırılması" gerekir. Bu LOAD_ATTR bytecode ile yapılır. Global değişken "Araştırılması" gerçekten kolay bir işlem değildir. .format() fonksiyonu bulunduğunda, a ve b değişkenlerini toplamak için ikili ekleme işlemi (BINARY_ADD) çağrılır. Son olarak, format fonksiyonu CALL_FUNCTION bytecode ile işleme devam eder ve belirtilen sonuçlar döndürülür. Hemen a ile b'yi toplayan fonksiyonun str.format() ile çağrılmasına göz atalım;

Kod:
dis.dis(add_two_string_format)
 
  2           0 LOAD_CONST               1 (1)
              2 STORE_FAST               0 (a)

  3           4 LOAD_CONST               2 (2)
              6 STORE_FAST               1 (b)

  4           8 LOAD_CONST               3 ('{}')
             10 LOAD_ATTR                0 (format)
             12 LOAD_FAST                0 (a)
             14 LOAD_FAST                1 (b)
             16 BINARY_ADD
             18 CALL_FUNCTION            1
             20 RETURN_VALUE
Pythonda işlev çağırma gerçekten kolay bir işlem değildir ve büyük bir yüke sahiptir. str.format() işlevini kullanırken, LOAD_ATTR ve CALL_FUNCTION değerlerinde harcanan zaman, str.format() 'ın f-stringden çok daha yavaş olmasına katkıda bulunan şeydir.

Pardon pardon birde %-string vardı dimi?
Mesela %-string , str.format() 'a göre daha hızlı yukarıda da gördüğünüz gibi. Ama f-string'e göre daha yavaş peki %-string ' in str.format() 'a karşı hızlı olduğu yer neresi?Deminki gibi sadece a ile b'yi toplayan fonksiyon %-string ile çağrılmasına göz atalım ;

Kod:
dis.dis(add_two_percent_string_format)
  2           0 LOAD_CONST               1 (1)
              2 STORE_FAST               0 (a)

  3           4 LOAD_CONST               2 (2)
              6 STORE_FAST               1 (b)

  4           8 LOAD_CONST               3 ('%s')
             10 LOAD_FAST                0 (a)
             12 BINARY_MODULO
             14 LOAD_FAST                1 (b)
             16 BINARY_ADD
             18 RETURN_VALUE
Ee burada da LOAD_ATTR , CALL_FUNCTION yok? O zaman f-string ile aynı hızda olması gerekmez mi? Ama dikkatlice baktığımızda;

Kod:
dis.dis(add_two_percent_string_format)
  2           0 LOAD_CONST               1 (1)
              2 STORE_FAST               0 (a)

  3           4 LOAD_CONST               2 (2)
              6 STORE_FAST               1 (b)

  4           8 LOAD_CONST               3 ('%s')
             10 LOAD_FAST                0 (a)
             12 BINARY_MODULO
             14 LOAD_FAST                1 (b)
             16 BINARY_ADD
             18 RETURN_VALUE
BINARY_MODULO Cpython'un source'sinden bakabilirsiniz.

LINK - Bu kadar az olmasına rağmen yinede ciddi bir zaman kaybı var..

f-string kullanın iyidir.
Makaleyi yazan arkadaşında ellerine, emeğine sağlık.
Secrets modülünü de bekliyoruz


f-stringlerin oldukca kullanışlı olduğu ortada. Ama unutmayın f-stringler sadece Python 3.6'da çalışır.

---------------------
~Cahile gelmez benden hayır
Konu BufGix tarafından (29-06-2018 14:28 Saat 14:28 ) değiştirilmiştir.
k3~, r0ark, CH4M3, Ceen, 1071malazgirt, Mapzilla Teşekkür etti.
k3~
k3~ - ait Kullanıcı Resmi (Avatar)
Özel Üye
Üyelik tarihi:
10/2015
Mesajlar:
2.881
Konular:
202
Teşekkür (Etti):
1743
Teşekkür (Aldı):
3389
Ticaret:
(0) %
03-06-2018 19:55
#2
.NET'teki String.Format yapısına benzettim. En büyük farkı koşul eklenebiliyor olması sanırım. Elinize sağlık güzel konu
goddesofcat - ait Kullanıcı Resmi (Avatar)
Tamamen Forumdan Uzaklaştırıldı
Üyelik tarihi:
05/2018
Nereden:
İstanbul
Yaş:
17
Mesajlar:
663
Konular:
5
Teşekkür (Etti):
0
Teşekkür (Aldı):
85
Ticaret:
(0) %
03-06-2018 19:56
#3
Eline sağlık yararlı bir konu
TrOwX - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
07/2017
Nereden:
Trabzon/TR
Mesajlar:
261
Konular:
28
Teşekkür (Etti):
56
Teşekkür (Aldı):
76
Ticaret:
(0) %
03-06-2018 20:28
#4
Ellerine sağlık yararlı bir konu olmuş, diğer programlama dilleri için mevcut mu bu bilgi?
---------------------
Sen Bir Yıldız Gibi Uzak Ama Uzak Olmasına Rağmen Görünen Parlayan! Aramıza Bulutlar Girmesin...

Arkadan Gelen Rüzgar Seni Alır Ama Beni Almaz Bana Sarıl Sımsıkı Tutun!
BufGix - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2015
Nereden:
Phobos/Space
Mesajlar:
1.023
Konular:
74
Teşekkür (Etti):
314
Teşekkür (Aldı):
446
Ticaret:
(0) %
03-06-2018 21:37
#5
Alıntı:
KeyLo99´isimli üyeden Alıntı Mesajı göster
.NET'teki String.Format yapısına benzettim. En büyük farkı koşul eklenebiliyor olması sanırım. Elinize sağlık güzel konu
Evet String.Formata benziyor. Teşekkürler.


Alıntı:
goddesofcat´isimli üyeden Alıntı Mesajı göster
Eline sağlık yararlı bir konu
Teşekkürler.

Alıntı:
TrOwX´isimli üyeden Alıntı Mesajı göster
Ellerine sağlık yararlı bir konu olmuş, diğer programlama dilleri için mevcut mu bu bilgi?
Genel olarak diğer dillerde string formatı için %s,%d,%f... gibi semboller kullanılıyor. Ama bu yapıyı destekleyen diller mevcut.
---------------------
~Cahile gelmez benden hayır
CH4M3 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2017
Nereden:
php island
Mesajlar:
1.753
Konular:
91
Teşekkür (Etti):
527
Teşekkür (Aldı):
521
Ticaret:
(0) %
05-06-2018 00:53
#6
Ellerinize sağlık hocam, böyle güzel çalışmalarınızı takipteyim
Konu CH4M3 tarafından (05-06-2018 00:58 Saat 00:58 ) değiştirilmiştir.
bugx - ait Kullanıcı Resmi (Avatar)
Tamamen Forumdan Uzaklaştırıldı
Üyelik tarihi:
09/2007
Nereden:
.reloc
Yaş:
18
Mesajlar:
5
Konular:
0
Teşekkür (Etti):
0
Teşekkür (Aldı):
0
Ticaret:
(0) %
05-06-2018 01:08
#7
Peki ya bu zımbırtıyı ne diye kullanalım, sadece şekil olsun diye koymamışlardır ya... En hassas konuya değinmemen haricinde, gayet başarılı.
https://hackernoon.com/a-closer-look...k-f197736b3bdb
BufGix - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2015
Nereden:
Phobos/Space
Mesajlar:
1.023
Konular:
74
Teşekkür (Etti):
314
Teşekkür (Aldı):
446
Ticaret:
(0) %
05-06-2018 17:51
#8
Alıntı:
bugx´isimli üyeden Alıntı Mesajı göster
Peki ya bu zımbırtıyı ne diye kullanalım, sadece şekil olsun diye koymamışlardır ya... En hassas konuya değinmemen haricinde, gayet başarılı.
https://hackernoon.com/a-closer-look...k-f197736b3bdb
"En hassas konu" derken ?
---------------------
~Cahile gelmez benden hayır
fora1 - ait Kullanıcı Resmi (Avatar)
Tamamen Forumdan Uzaklaştırıldı
Üyelik tarihi:
12/2017
Yaş:
1
Mesajlar:
1.445
Konular:
223
Teşekkür (Etti):
572
Teşekkür (Aldı):
251
Ticaret:
(0) %
05-06-2018 17:55
#9
Eline saglik
KoDa - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
05/2016
Nereden:
127.0.0.1
Mesajlar:
1.438
Konular:
83
Teşekkür (Etti):
65
Teşekkür (Aldı):
147
Ticaret:
(0) %
05-06-2018 18:11
#10
Eline Sağlık ben editöre kopyala yapıştır yaparak çalıştırdım python3 benimki ama çalaışmadı ?
--------------------- Biz Yaz Kış Yağmur Demeden Şafak Oparasyonuna Gider Gibi Uykudan Uyanıp Korkama Sönmez Bu Şafaklarda Yüzen Al Sancak ! Sönmeden Yurdumun Üstünde En Son Ocak ! Derken Taşşak Geçmiyorduk ...

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı