ฉันจะเปลี่ยนประเภทข้อมูลเป็นสตริงใน Python ได้อย่างไร
strเรียกใช้โดยไม่มีข้อผิดพลาดหรือไม่?
ฉันจะเปลี่ยนประเภทข้อมูลเป็นสตริงใน Python ได้อย่างไร
strเรียกใช้โดยไม่มีข้อผิดพลาดหรือไม่?
คำตอบ:
myvariable = 4
mystring = str(myvariable) # '4'
นอกจากนี้หรือลอง repr:
mystring = repr(myvariable) # '4'
สิ่งนี้เรียกว่า "การแปลง" ใน python และเป็นเรื่องธรรมดา
str(u'ä')จะไม่ทำงาน อย่างไรก็ตามrepr(u'ä')จะได้ผล
strเรียกใช้โดยไม่มีข้อผิดพลาดหรือไม่?
strมีขึ้นเพื่อสร้างการแสดงสตริงของข้อมูลของวัตถุ หากคุณกำลังเขียนชั้นเรียนของตัวเองและต้องการstrทำงานให้คุณเพิ่ม:
def __str__(self):
return "Some descriptive string"
print str(myObj)จะโทรmyObj.__str__().
reprเป็นวิธีการที่คล้ายกันซึ่งโดยทั่วไปจะให้ข้อมูลเกี่ยวกับข้อมูลชั้นเรียน สำหรับอ็อบเจ็กต์ไลบรารีหลักส่วนใหญ่reprสร้างชื่อคลาส (และบางครั้งข้อมูลคลาส) ระหว่างวงเล็บมุม reprจะถูกนำมาใช้ตัวอย่างเช่นเพียงแค่พิมพ์วัตถุของคุณลงในบานหน้าต่างการโต้ตอบโดยไม่ต้องใช้printหรือสิ่งอื่นใด
คุณสามารถกำหนดพฤติกรรมของreprวัตถุของคุณเองได้เช่นเดียวกับที่คุณกำหนดพฤติกรรมของstr:
def __repr__(self):
return "Some descriptive string"
>>> myObjในบานหน้าต่างการโต้ตอบของคุณหรือrepr(myObj)จะส่งผลให้myObj.__repr__()
object.__repr__-style angle-bracket แทน แต่ส่วนใหญ่ที่ใช้กันทั่วไปไม่ กฎของหัวแม่มือสำหรับreprคือว่าถ้ามันทำให้ความรู้สึกที่จะส่งคืนรหัสหลามที่อาจได้รับการประเมินในการผลิตวัตถุเดียวกันทำอย่างนั้นเหมือนstr, frozensetและส่วนใหญ่ builtins อื่น ๆ ทำ แต่ถ้ามันไม่ได้ใช้มุมวงเล็บ แบบฟอร์มเพื่อให้แน่ใจว่าสิ่งที่คุณส่งกลับมาไม่อาจถูกเข้าใจผิดว่าเป็นตัวแทนที่อ่านได้และประเมินได้ในฐานะแหล่งที่มา
listนั่นคือตัวมันเองจะส่งคืนสิ่งที่ไม่เพียง แต่ดูเหมือน แต่เป็นโค้ดที่ประเมินได้ซึ่งประเมินว่าผิด - แต่ผู้พัฒนาหลักไม่เคยถือเอาสิ่งนั้นมาเป็นใบอนุญาตในการขยายสิ่งเดียวกัน พฤติกรรมใน stdlib)
strเรียกใช้โดยไม่มีข้อผิดพลาดหรือไม่?
__str__เป็นฟังก์ชันที่สืบทอดมาจากคลาสอ็อบเจ็กต์ซึ่งเป็นรูทสำหรับคลาสอื่น ๆ ทั้งหมดใน Python docs.python.org/3/reference/datamodel.html#object.__str__
str(object)ผมเห็นคำตอบทั้งหมดขอแนะนำให้ใช้ อาจล้มเหลวหากวัตถุของคุณมีอักขระ ascii มากกว่าและคุณจะเห็นข้อผิดพลาดเช่นordinal not in range(128). นี่เป็นกรณีของฉันในขณะที่ฉันกำลังแปลงรายการสตริงเป็นภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ
ฉันแก้ไขโดยใช้ unicode(object)
strเรียกใช้โดยไม่มีข้อผิดพลาดหรือไม่?
str(object) จะทำเคล็ดลับ
หากคุณต้องการเปลี่ยนวิธีที่อ็อบเจ็กต์ถูกกำหนดให้กำหนด__str__(self)วิธีการสำหรับคลาสของอ็อบเจ็กต์ วิธีการดังกล่าวต้องส่งคืนวัตถุ str หรือ unicode
str(any_var)หรือany_var.__str__()
timeitโมดูล) คุณควรใช้str(any_var)เนื่องจากสามารถอ่านได้มากขึ้นสำหรับมนุษย์และอนุญาตให้ได้รับประโยชน์จากกรณีต่างๆเมื่อany_varกำหนด__repr__()แต่ไม่ ' __str__()ทีกำหนด
strเรียกใช้โดยไม่มีข้อผิดพลาดหรือไม่?
ใช้ในstrตัว:
x = str(something)
ตัวอย่าง:
>>> str(1)
'1'
>>> str(1.0)
'1.0'
>>> str([])
'[]'
>>> str({})
'{}'
...
จากเอกสารประกอบ:
ส่งคืนสตริงที่มีการแสดงวัตถุที่พิมพ์ได้อย่างสวยงาม สำหรับสตริงจะคืนค่าสตริงเอง ความแตกต่างกับ repr (object) คือ str (object) ไม่พยายามส่งคืนสตริงที่เป็นที่ยอมรับสำหรับ eval (); เป้าหมายคือการส่งคืนสตริงที่พิมพ์ได้ หากไม่ได้ระบุอาร์กิวเมนต์ให้ส่งกลับสตริงว่าง ''
strเรียกใช้โดยไม่มีข้อผิดพลาดหรือไม่?
ด้วยstr(x). อย่างไรก็ตามข้อมูลทุกประเภทสามารถกำหนดการแปลงสตริงของตัวเองได้ดังนั้นนี่อาจไม่ใช่สิ่งที่คุณต้องการ
คุณสามารถใช้%sเช่นด้านล่าง
>>> "%s" %([])
'[]'
เพียงใช้str- ตัวอย่างเช่น:
>>> str([])
'[]'
ใช้การจัดรูปแบบ:
"%s" % (x)
ตัวอย่าง:
x = time.ctime(); str = "%s" % (x); print str
เอาท์พุท: พฤหัสบดี 11 ม.ค. 20:40:05 น. 2018
โปรดใช้ความระมัดระวังหากคุณต้องการ "เปลี่ยน" ประเภทข้อมูลจริงๆ เช่นเดียวกับในกรณีอื่น ๆ (เช่นการเปลี่ยนตัววนซ้ำในการforวนซ้ำ) สิ่งนี้อาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด:
>> dct = {1:3, 2:1}
>> len(str(dct))
12
>> print(str(dct))
{1: 31, 2: 0}
>> l = ["all","colours"]
>> len(str(l))
18
str(var)เหรอ? นั่นคือสิ่งที่คุณกำลังมองหา?