Tuple'a Değişkenler Ekleme


282

Python öğreniyorum ve bir veritabanı bağlantısı oluşturuyorum. DB eklemek çalışırken, ben bilgi dışında tuples oluşturma ve sonra onları DB eklemek düşünüyorum.

Ne Yapıyorum : Kullanıcıdan bilgi alıyorum ve değişkenlerde saklıyorum. Bu değişkenleri bir gruba ekleyebilir miyim? Sözdiziminde bana yardımcı olabilir misiniz?

Ayrıca bunu yapmanın etkili bir yolu varsa, lütfen paylaşın ...

DÜZENLEME Bu soruyu biraz düzenlememe izin verin ... DB'ye bilgi girmek için sadece gruba ihtiyacım var. Bilgi DB'ye eklendikten sonra, bu kaydı silmeli miyim? Demek istediğim artık sipere ihtiyacım yok.

Yanıtlar:


371

Tupller değişmez; inşaattan sonra hangi değişkenleri içerdiklerini değiştiremezsiniz. Bununla birlikte, yeni tuples oluşturmak için bunları birleştirebilir veya dilimleyebilirsiniz:

a = (1, 2, 3)
b = a + (4, 5, 6)  # (1, 2, 3, 4, 5, 6)
c = b[1:]  # (2, 3, 4, 5, 6)

Ve elbette, bunları mevcut değerlerden oluşturun:

name = "Joe"
age = 40
location = "New York"
joe = (name, age, location)

sadece kullanıcı girdikten sonra db eklemek için bu tuples gerekir. Bu yüzden db için güncelleme tamamlandıktan sonra bu tuples yıkmak gerekir?
amit

5
Db güncelledikten sonra tuples tahrip gerekmez. Kapsam dışına çıkarlarsa, çöp toplanmalıdırlar.
Justin Standard


Sadece eklemek a = (), ve b= a + (5), yol açar b = 5, bu nedenle, b= a + (5,)yol açar b = (5,); bir demet.
yashgarg1232

222

Boş bir demet ile başlayabilirsin t = (). Sen ile ekleyebilir +, ancak başka bir tuple eklemek zorunda. Tek bir eleman eklemek istiyorsanız, bunu a tek yapmak: t = t + (element,). Bu virgül içeren veya içermeyen birden çok öğeden oluşan bir demet ekleyebilirsiniz.

>>> t = ()
>>> t = t + (1,)
>>> t
(1,)
>>> t = t + (2,)
>>> t
(1, 2)
>>> t = t + (3, 4, 5)
>>> t
(1, 2, 3, 4, 5)
>>> t = t + (6, 7, 8,)
>>> t
(1, 2, 3, 4, 5, 6, 7, 8)

20
Bu örnek durumda, bir de yapılabilir: t = ()o zamant += (1,)
Douglas Denhartog

2
Sondaki virgülün dahil edilmesinin ne faydası vardır?
Ekleme

13
Parantez içindeki bir eleman arasındaki karışıklığı önlemek için singleton için gerekli olan sondaki virgül. Düz parantezler işlem sırasına göre kullanılır, bu nedenle (7) sadece 7'dir. Ancak (7,), öğenin 7 olduğu tek öğeli bir demettir. Aynı şekilde, 3 * (7 + 8) = 45, ancak 3 * ( 7 + 8,) = (15, 15, 15) - bu mantıklı mı?
Daniel

2
Çok elemanlı tüplere gelince, sondaki virgül% 100 isteğe bağlıdır. Buna bir çeşit "bu bir demet, bunun bir demet olduğunu biliyorum, grupların nasıl çalıştığını biliyorum ve bunu yapabileceğimi biliyorum" anlamına geliyor. Ancak hiçbir virgül daha doğal görünmeyebilir. Bilmiyorum. Sana bağlı.
Daniel

Bence tupllerin değişmez olduğuna dikkat etmek önemlidir - aslında değiştirilemezler. Bu çözümün yaptığı, mevcut iki tuple dayalı yeni bir tuple oluşturmaktır .
That1Guy

44

Henüz bahsedilmeyen başka bir taktik, listeye ekleme yapmak ve daha sonra listeyi sonunda bir tup'e dönüştürmektir:

mylist = []
for x in range(5):
    mylist.append(x)
mytuple = tuple(mylist)
print mytuple

İadeler

(0, 1, 2, 3, 4)

Bazen bir tuple işlev argümanı olarak geçmek zorunda olduğunda kullanıyorum, bu da numpy işlevler için genellikle gereklidir.


3
Bunun tersinin, yani de list(someTuple)işe yaradığını bilmek faydalıdır . İki nesne türü birbirinin yerine
geçebilir

Gerçekten değiştirilemez, bence listeden dönüşüm listedeki tüm öğeleri kopyalayacağını düşünüyorum, bu yüzden kesinlikle kaçınmak için bir yer var
gbtimmon

41

Python 3'te, *orijinal gruptan yeni elemanla birlikte yeni bir eleman grubu oluşturmak için kullanabilirsiniz.

>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')

2
Bu benim için açık ara en pitonik.
Bumsik Kim

6
Bu 10x daha yavaş daha tuple1 + ("baz",).
Mateen Ulhaq

9

"Bir kez bilgi DB eklenir, ben tuple silmeli mi? Yani artık tuple gerek yok."

Hayır.

Genellikle hiçbir şeyi silmek için bir neden yoktur. Silmek için bazı özel durumlar vardır, ancak bunlar çok, çok nadirdir.

Sadece dar bir kapsam tanımlayın (yani, bir sınıftaki bir işlev tanımı veya bir yöntem işlevi) ve nesneler kapsamın sonunda toplanan çöp olacaktır.

Hiçbir şeyi silme konusunda endişelenmeyin.

[Not. Nesneleri silmeye ek olarak, onları temizlemek için her zaman "sıfırlama" yöntemleri yazan bir adamla çalıştım. Sanki onları kurtaracak ve tekrar kullanacakmış gibi. Ayrıca aptalca bir kibir. Artık kullanmadığınız nesneleri görmezden gelmeniz yeterlidir. İşlevlerinizi yeterince küçük kod bloklarında tanımlarsanız, düşünmeniz gereken başka bir şey yoktur.]


7

Aşağıdaki kadar kolaydır:

info_1 = "one piece of info"
info_2 = "another piece"
vars = (info_1, info_2)
# 'vars' is now a tuple with the values ("info_1", "info_2")

Bununla birlikte, Python'daki tuples değişmezdir , bu nedenle oluşturulduktan sonra bir tuple değişkenleri ekleyemezsiniz.


3

Diğer yanıtların belirttiği gibi, mevcut bir grubu değiştiremezsiniz, ancak her zaman yeni bir grup oluşturabilirsiniz (bu, mevcut gruplardan ve / veya diğer kaynaklardan bazı veya tüm öğeleri alabilir).

Örneğin, ilgilenilen tüm öğeler skaler değişkenlerdeyse ve bu değişkenlerin adlarını biliyorsanız:

def maketuple(variables, names):
  return tuple(variables[n] for n in names)

örneğin bu örnekte olduğu gibi kullanılmalıdır:

def example():
  x = 23
  y = 45
  z = 67
  return maketuple(vars(), 'x y z'.split())

Tabii ki bu bir vaka daha basit bir şekilde ifade edilebilir (x, y, z)(hatta isimleri tamamen ileri sürerek (23, 45, 67)), ancak maketupleyaklaşım bazı daha karmaşık durumlarda yararlı olabilir (örneğin, kullanılacak isimlerin dinamik olarak belirlendiği ve hesaplama).


2

Eminim bu sözdizimi python:

user_input1 = raw_input("Enter Name: ")
user_input2 = raw_input("Enter Value: ")
info = (user_input1, user_input2)

bir kez ayarlandığında, tuples değiştirilemez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.