2009-09-04 30 views
172

Tôi đang học Python và tạo kết nối cơ sở dữ liệu. Trong khi cố gắng thêm vào DB, tôi đang nghĩ đến việc tạo ra các bộ dữ liệu và sau đó thêm chúng vào DB.Thêm Biến số vào Tuple

Tôi đang làm gì: Tôi đang lấy thông tin từ người dùng và lưu trữ nó trong các biến. Tôi có thể thêm các biến này vào một bộ dữ liệu không? Bạn có thể giúp tôi với cú pháp không?

Ngoài ra nếu có một cách hiệu quả để làm điều này, hãy chia sẻ ...

EDIT Hãy để tôi sửa câu hỏi này một chút ... Tôi chỉ cần các tuple để nhập thông tin vào DB. Khi thông tin được thêm vào DB, tôi có nên xóa tuple không? Ý tôi là tôi không cần tuple nữa.

Trả lời

225

Tuples là không thay đổi; bạn không thể thay đổi các biến mà chúng chứa sau khi xây dựng. Tuy nhiên, bạn có thể nối hoặc cắt chúng để tạo thành các bộ mới:

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

Và, tất nhiên, xây dựng chúng từ giá trị hiện có:

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

tôi chỉ cần những bộ dữ liệu này để thêm vào db sau khi người dùng nhập. vì vậy tôi có nên hủy các tuples sau khi cập nhật để db được hoàn thành? – amit

+5

Bạn không cần hủy các bộ dữ liệu sau khi cập nhật db. Nếu họ đi ra khỏi phạm vi họ nên được thu gom rác thải. –

+0

Để thêm chuỗi vào tuple mà không vi phạm chuỗi, hãy kiểm tra https://stackoverflow.com/a/16449189 –

7

Đó là dễ dàng như sau:

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") 

Tuy nhiên, bản ghi trong Python là bất biến, vì vậy bạn không thể nối thêm biến vào một tuple khi nó được tạo ra.

1

Tôi chắc rằng cú pháp cho điều này trong python là:

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

khi đã thiết lập, các bộ không thể thay đổi.

2

Như câu trả lời khác đã lưu ý, bạn không thể thay đổi một tuple hiện , nhưng bạn luôn có thể tạo một bộ tuple mới (có thể mất một số hoặc tất cả các mục từ các bộ dữ liệu hiện có và/hoặc các nguồn khác).

Ví dụ, nếu tất cả các mặt hàng quan tâm là trong các biến vô hướng và bạn biết tên của những biến:

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

được sử dụng, ví dụ, như trong ví dụ này:

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

Tất nhiên trường hợp này sẽ đơn giản hơn được biểu thị là (x, y, z) (hoặc thậm chí đã nói trên tên hoàn toàn, (23, 45, 67)), nhưng cách tiếp cận maketuple có thể hữu ích trong một số trường hợp phức tạp hơn (ví dụ: nơi tên sử dụng cũng được xác định dyna mically và nối vào danh sách trong quá trình tính toán).

3

"khi thông tin được thêm vào DB, tôi có nên xóa tuple không? I có nghĩa là tôi không cần bộ nhớ nữa".

No.

Nói chung, không có lý do gì để xóa bất cứ điều gì. Có một số trường hợp đặc biệt để xóa, nhưng chúng rất, rất hiếm.

Chỉ cần xác định phạm vi hẹp (tức là định nghĩa hàm hoặc hàm phương thức trong một lớp) và các đối tượng sẽ được thu thập rác ở cuối phạm vi.

Đừng lo lắng về việc xóa bất kỳ thứ gì.

[Lưu ý. Tôi đã làm việc với một người - ngoài việc cố gắng xóa các đối tượng - luôn viết các phương thức "reset" để xóa chúng. Giống như anh ta sẽ cứu họ và tái sử dụng chúng. Ngoài ra một conceit ngớ ngẩn. Chỉ cần bỏ qua các đối tượng bạn không còn sử dụng nữa. Nếu bạn xác định các chức năng của mình trong các khối mã đủ nhỏ, bạn không còn gì để suy nghĩ nữa.]

161

Bạn có thể bắt đầu với một bộ trống với một cái gì đó như t =(). Bạn có thể thêm với +, nhưng bạn phải thêm một bộ khác. Nếu bạn muốn thêm một phần tử, hãy tạo thành một phần tử đơn lẻ: t = t + (element,). Bạn có thể thêm một bộ gồm nhiều phần tử có hoặc không có dấu phẩy sau đó.

>>> 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) 
+11

Trong trường hợp ví dụ này, người ta cũng có thể làm: 't =()' rồi 't + = (1,) ' –

29

Một chiến thuật chưa được đề cập là sử dụng phụ thêm vào một danh sách, và sau đó chuyển đổi danh sách để một tuple ở cuối:

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

lợi nhuận

(0, 1, 2, 3, 4) 

đôi khi tôi sử dụng này khi tôi phải vượt qua một tuple như là một đối số chức năng, mà thường là cần thiết cho các chức năng numpy.

+1

Thật hữu ích khi biết rằng ngược lại điều này, tức là' list (someTuple) 'cũng hoạt động. Hai loại đối tượng rõ ràng là có thể hoán đổi cho nhau – khaverim

+0

Không thực sự hoán đổi cho nhau, tôi nghĩ rằng việc chuyển đổi từ tuple sang danh sách sẽ sao chép tất cả các phần tử trong danh sách, vì vậy chắc chắn có nơi để tránh nó – gbtimmon

Các vấn đề liên quan