ฉันพยายามแปลงรายการเป็น tuple
โซลูชันส่วนใหญ่ใน Google เสนอรหัสต่อไปนี้:
l = [4,5,6]
tuple(l)
อย่างไรก็ตามรหัสส่งผลให้เกิดข้อผิดพลาดเมื่อฉันเรียกใช้:
TypeError: วัตถุ 'tuple' ไม่สามารถเรียกได้ฉันจะแก้ไขปัญหานี้ได้อย่างไร
ฉันพยายามแปลงรายการเป็น tuple
โซลูชันส่วนใหญ่ใน Google เสนอรหัสต่อไปนี้:
l = [4,5,6]
tuple(l)
อย่างไรก็ตามรหัสส่งผลให้เกิดข้อผิดพลาดเมื่อฉันเรียกใช้:
TypeError: วัตถุ 'tuple' ไม่สามารถเรียกได้ฉันจะแก้ไขปัญหานี้ได้อย่างไร
คำตอบ:
มันควรจะทำงานได้ดี อย่าใช้tuple
, list
หรือชื่อพิเศษอื่น ๆ เป็นชื่อตัวแปร อาจเป็นสิ่งที่ทำให้เกิดปัญหาของคุณ
>>> l = [4,5,6]
>>> tuple(l)
(4, 5, 6)
การขยายความคิดเห็นของ eumiro โดยปกติแล้วtuple(l)
จะแปลงรายการl
เป็น tuple:
In [1]: l = [4,5,6]
In [2]: tuple
Out[2]: <type 'tuple'>
In [3]: tuple(l)
Out[3]: (4, 5, 6)
อย่างไรก็ตามหากคุณนิยามใหม่tuple
ให้เป็น tuple มากกว่าtype
tuple
:
In [4]: tuple = tuple(l)
In [5]: tuple
Out[5]: (4, 5, 6)
จากนั้นคุณจะได้รับ TypeError เนื่องจาก tuple นั้นไม่สามารถเรียกได้:
In [6]: tuple(l)
TypeError: 'tuple' object is not callable
คุณสามารถกู้คืนคำจำกัดความเดิมสำหรับtuple
โดยการออกและรีสตาร์ทล่ามของคุณหรือ (ขอบคุณ @glglgl):
In [6]: del tuple
In [7]: tuple
Out[7]: <type 'tuple'>
คุณอาจทำสิ่งนี้:
>>> tuple = 45, 34 # You used `tuple` as a variable here
>>> tuple
(45, 34)
>>> l = [4, 5, 6]
>>> tuple(l) # Will try to invoke the variable `tuple` rather than tuple type.
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
tuple(l)
TypeError: 'tuple' object is not callable
>>>
>>> del tuple # You can delete the object tuple created earlier to make it work
>>> tuple(l)
(4, 5, 6)
นี่คือปัญหา ... เนื่องจากคุณใช้tuple
ตัวแปรเพื่อเก็บไว้tuple (45, 34)
ก่อนหน้านี้ ... ดังนั้นตอนนี้tuple
เป็นobject
ประเภทtuple
ตอนนี้ ...
มันไม่มีอีกtype
แล้วดังนั้นมันไม่มีอีกCallable
แล้ว
Never
ใช้ชนิดบิวด์อินเป็นชื่อตัวแปรของคุณ ... คุณมีชื่ออื่นที่จะใช้ ใช้ชื่อใดก็ได้สำหรับตัวแปรของคุณแทน ...
ในการเพิ่มทางเลือกอื่นในtuple(l)
ฐานะของ Python> = 3.5
คุณสามารถทำได้:
t = *l, # or t = (*l,)
สั้นเร็วขึ้นเล็กน้อยแต่อาจทนทุกข์ทรมานจากความสามารถในการอ่าน
นี้เป็นหลัก unpacks รายการl
ภายในตัวอักษร tuple ,
ซึ่งถูกสร้างขึ้นเพราะการปรากฏตัวของจุลภาคเดียว
PS: ข้อผิดพลาดที่คุณได้รับเป็นเพราะกำบังของชื่อtuple
เช่นคุณได้รับมอบหมายให้ชื่อ tuple tuple = (1, 2, 3)
ที่ไหนสักแห่งเช่น
ใช้del tuple
คุณควรจะดีไป
ฉันพบคำตอบล่าสุดและคำตอบที่ถูกต้อง แต่จะเพิ่มสิ่งใหม่ ๆ ลงในคำตอบจำนวนมาก
ในไพ ธ อนนั้นมีวิธีที่ไม่สิ้นสุดในการทำเช่นนี้ต่อไปนี้เป็นตัวอย่าง
วิธีปกติ
>>> l= [1,2,"stackoverflow","python"]
>>> l
[1, 2, 'stackoverflow', 'python']
>>> tup = tuple(l)
>>> type(tup)
<type 'tuple'>
>>> tup
(1, 2, 'stackoverflow', 'python')
วิธีที่ชาญฉลาด
>>>tuple(item for item in l)
(1, 2, 'stackoverflow', 'python')
จำไว้ว่า tuple นั้นไม่เปลี่ยนรูปใช้สำหรับเก็บสิ่งที่มีค่า ตัวอย่างเช่นรหัสผ่านคีย์หรือแฮชจะถูกเก็บไว้ใน tuples หรือพจนานุกรม หากจำเป็นต้องใช้มีดทำไมต้องใช้ดาบเพื่อตัดแอปเปิ้ล ใช้อย่างชาญฉลาดมันจะทำให้โปรแกรมของคุณมีประสิทธิภาพ
tuple(l)
(วิธีแรก) สั้นกว่าtuple(item for item in l)
(วิธีที่สอง)
tuple
ที่อื่นมาก่อนหรือไม่?