SORU
3 HAZİRAN 2010, PERŞEMBE


Ne "Lale" adında; Python?

** 16, ben okuma... beklenmeyen bir şey buldu

Sys.version_info demet şimdibaşlığın adını verdi:

Hiç dizilerini önce adında duydum, ve öğeleri anahtarları (dicts gibi) sayılar (dizilerini ve listeler gibi) veya endeksli olabilir diye düşündüm. Ben asla iki tarafa endeksli olabilirler bekleniyor.

Böylece, benim sorular şunlardır:

  • Dizilerini adlı nelerdir?
  • Nasıl kullanılır?
  • Neden/ne zaman dizilerini normal dizilerini yerine adlı kullanmalıyım?
  • Neden/ne zaman yerine dizilerini adında normal dizilerini kullanmalıyım?
  • Orada her türlü "liste" adlı (adlı başlık bir değişken sürüm)?

CEVAP
4 HAZİRAN 2010, Cuma


Dizilerini adlı temelde kolay oluşturmak için, basit nesne türleri. Demet örnekleri adlı başvurulabilir değişken deferencing gibi kullanarak nesne ya da standart kayıt düzeni sözdizimi. Değişmez bunlar dışında benzer şekilde struct ya da diğer ortak kayıt türleri için kullanılır. Python 2.6 eklendi recipe for implementation in Python 2.4 olmasına rağmen 3.0, Python.

Örneğin, ortak bir nokta, 7 ** bir demet olarak örneğin temsil etmek. Bu aşağıdaki gibi bir kod yol açar:

pt1 = (1.0, 5.0)
pt2 = (2.5, 1.5)

from math import sqrt
line_length = sqrt((pt1[0]-pt2[0])**2   (pt1[1]-pt2[1])**2)

Daha okunaklı hale adında bir başlık kullanarak:

from collections import namedtuple
Point = namedtuple('Point', 'x y')
pt1 = Point(1.0, 5.0)
pt2 = Point(2.5, 1.5)

from math import sqrt
line_length = sqrt((pt1.x-pt2.x)**2   (pt1.y-pt2.y)**2)

Ancak, adında dizilerini hala normal dizilerini ile geriye doğru uyumludur, aşağıdaki hala çalışması:

Point = namedtuple('Point', 'x y')
pt1 = Point(1.0, 5.0)
pt2 = Point(2.5, 1.5)

from math import sqrt
# use index referencing
line_length = sqrt((pt1[0]-pt2[0])**2   (pt1[1]-pt2[1])**2)
 # use tuple unpacking
x1, y1 = pt1

Böylecenesne gösterimi kodunuzu daha pythonic yapacak sence dizilerini yerine dizilerini yere adlandırılmış ve daha kolay okunabilir kullanmalısınız. Ben şahsen onları fonksiyonlara parametre olarak geçirmeden onları çok basit bir değer türleri, özellikle temsil etmek için kullanmaya başladı. Fonksiyonları daha okunabilir, demet ambalaj içeriği görmeden yapar.

Ayrıcaayrıca sıradan değiştirebilirsinizdeğişmezsınıflar hiç bir işlevleri varonlarla sadece tarlalar var. Hatta temel sınıflar olarak adlandırılmış demet türlerini kullanabilirsiniz:

class Point(namedtuple('Point', 'x y')):
    [...]

Ancak, dizilerini, dizilerini adlı öznitelikleri değişmez

>>> Point = namedtuple('Point', 'x y')
>>> pt1 = Point(1.0, 5.0)
>>> pt1.x = 2.0
AttributeError: can't set attribute

Eğer değerleri değiştirmek mümkün olmasını istiyorsanız, başka bir türü gerekir. Sen öznitelikleri için yeni değerleri ayarlamak için izin mutable recordtypes için kullanışlı bir tarifi var.

>>> from rcdtype import *
>>> Point = recordtype('Point', 'x y')
>>> pt1 = Point(1.0, 5.0)
>>> pt1 = Point(1.0, 5.0)
>>> pt1.x = 2.0
>>> print(pt1[0])
    2.0

"Liste" adlı yeni alanlar ekleyebilirsiniz, ancak. herhangi bir şekilde farkında değilim Sadece bu durumda bir sözlük kullanmak isteyebilirsiniz. Adlı dizilerini {'x': 1.0, 'y': 5.0} döner ve her zamanki sözlük fonksiyonları ile opere olan sözlük pt1._asdict() kullanarak dönüştürülebilir.

Daha önce de belirtildiği gibi, 19 ** bu örnekler inşa edilmiştir daha fazla bilgi için.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Joseph Herscher

    Joseph Hersc

    14 Mart 2007
  • Mismag822 - The Card Trick Teacher

    Mismag822 -

    18 EKİM 2008
  • vgeller1

    vgeller1

    22 Kasım 2009