คำถามติดแท็ก cpython

การใช้งานอ้างอิงของภาษาโปรแกรม Python ใช้แท็กนี้สำหรับคำถามเฉพาะสำหรับการใช้งานนี้คำถาม Python ทั่วไปควรติดแท็กด้วย "python"

3
ทำไมรหัสไพ ธ อนจึงทำงานได้เร็วขึ้นในฟังก์ชั่น?
def main(): for i in xrange(10**8): pass main() รหัสชิ้นนี้ใน Python ทำงานใน (หมายเหตุ: การจับเวลาเสร็จสิ้นด้วยฟังก์ชั่นเวลาใน BASH ใน Linux) real 0m1.841s user 0m1.828s sys 0m0.012s อย่างไรก็ตามหาก for for ไม่ได้อยู่ในฟังก์ชัน for i in xrange(10**8): pass จากนั้นมันจะทำงานเป็นเวลานาน: real 0m4.543s user 0m4.524s sys 0m0.012s ทำไมนี้

12
ทำไมฉันไม่ควรใช้ PyPy กับ CPython ถ้า PyPy เร็วกว่า 6.3 เท่า?
ฉันได้ยินมามากมายเกี่ยวกับโครงการPyPy พวกเขาอ้างว่ามันคือ 6.3 ครั้งเร็วกว่าCPythonล่ามบนเว็บไซต์ของพวกเขา เมื่อใดก็ตามที่เราพูดถึงภาษาไดนามิกเช่น Python ความเร็วเป็นหนึ่งในปัญหาอันดับต้น ๆ เพื่อแก้ปัญหานี้พวกเขาบอกว่า PyPy เร็วขึ้น 6.3 เท่า ปัญหาที่สองคือการขนานกันInterpreter Lock (GIL) ที่น่าอับอาย สำหรับเรื่องนี้ PyPy บอกว่ามันสามารถให้ GIL น้อยหลาม หาก PyPy สามารถแก้ปัญหาความท้าทายที่ยิ่งใหญ่เหล่านี้อะไรคือจุดอ่อนที่ป้องกันการยอมรับในวงกว้าง? นั่นคือจะบอกว่าสิ่งที่ป้องกันไม่ให้คนอย่างผมซึ่งเป็นผู้พัฒนาหลามทั่วไปจากการเปลี่ยนไป PyPy ในขณะนี้ ?

9
Python กับ Cpython
มีอะไรยุ่งยากเกี่ยวกับ Python และ CPython (Jython, IronPython)ฉันไม่เข้าใจ: python.orgระบุว่า CPython คือ: การใช้งาน "ดั้งเดิม" ของ Python (ชื่อเล่น CPython) คำถาม Stack Overflow อีกฉบับระบุว่า: CPython เป็นล่ามรหัสไบต์เริ่มต้นของ Python ซึ่งเขียนเป็น C จริงๆแล้วฉันไม่เข้าใจความหมายของคำอธิบายทั้งสอง แต่สิ่งที่ฉันคิดคือถ้าฉันใช้ CPython หมายความว่าเมื่อฉันเรียกใช้ตัวอย่างรหัสไพ ธ อนมันจะรวบรวมเป็นภาษา C และดำเนินการราวกับว่าเป็น C รหัส ดังนั้นอะไรคือ CPython และแตกต่างกันอย่างไรเมื่อเปรียบเทียบกับ python และฉันควรใช้ CPython เหนือ Python และข้อดีของมันคืออะไร?
447 python  cpython 

2
ทำไมบางลอย <เปรียบเทียบจำนวนเต็มสี่ครั้งช้ากว่าคนอื่น ๆ ?
เมื่อเปรียบเทียบลอยกับจำนวนเต็มคู่ของค่าบางอย่างใช้เวลานานในการประเมินมากกว่าค่าอื่น ๆ ที่มีขนาดใกล้เคียงกัน ตัวอย่างเช่น: &gt;&gt;&gt; import timeit &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953421000") # run 1 million times 0.5387085462592742 แต่ถ้าจำนวนลอยหรือจำนวนเต็มน้อยกว่าหรือใหญ่กว่าการเปรียบเทียบจะทำงานได้เร็วขึ้น: &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953422000") # integer increased by 1000 0.1481498428446173 &gt;&gt;&gt; timeit.timeit("562949953423001.8 &lt; 562949953421000") # float increased by 3001.1 0.1459577925548956 การเปลี่ยนตัวดำเนินการเปรียบเทียบ (เช่นการใช้==หรือ&gt;แทน) จะไม่ส่งผลกระทบต่อเวลาในลักษณะที่สังเกตเห็นได้ สิ่งนี้ไม่ได้เกี่ยวข้องกับขนาดเพียงอย่างเดียวเพราะการเลือกค่าที่มากขึ้นหรือน้อยลงอาจทำให้การเปรียบเทียบเร็วขึ้นดังนั้นฉันจึงสงสัยว่ามันจะลงไปในทางที่โชคร้ายเล็กน้อยที่บิตเรียงกัน เห็นได้ชัดว่าการเปรียบเทียบค่าเหล่านี้เร็วกว่าเพียงพอสำหรับกรณีใช้งานส่วนใหญ่ ฉันแค่อยากรู้ว่าทำไม Python ดูเหมือนจะต่อสู้กับค่าบางคู่มากกว่ากับคนอื่น

5
มีการตั้งค่าอย่างไร ()
ฉันเคยเห็นคนพูดว่าsetวัตถุในหลามมี O (1) การตรวจสอบสมาชิก พวกเขานำมาใช้ภายในเพื่ออนุญาตสิ่งนี้ได้อย่างไร โครงสร้างข้อมูลชนิดใดที่ใช้? การใช้งานนั้นมีความหมายอะไรอีกบ้าง ทุกคำตอบที่นี่ให้ความกระจ่างจริง ๆ แต่ฉันยอมรับได้เพียงคำตอบเดียวดังนั้นฉันจะไปกับคำตอบที่ใกล้เคียงที่สุดกับคำถามดั้งเดิมของฉัน ขอบคุณสำหรับข้อมูล!

3
อะไรทำให้ [* a] แสดงผลโดยรวม
เห็นได้ชัดว่าlist(a)ไม่รวม overallocate, [x for x in a]overallocates ในบางจุดและ[*a]overallocates ตลอดเวลา ? นี่คือขนาด n จาก 0 ถึง 12 และขนาดผลลัพธ์เป็นไบต์สำหรับวิธีการสามวิธี: 0 56 56 56 1 64 88 88 2 72 88 96 3 80 88 104 4 88 88 112 5 96 120 120 6 104 120 128 7 112 120 136 8 …

3
เหตุใดการวนซ้ำบนสตริงขนาดเล็กจึงช้ากว่ารายการขนาดเล็ก
ฉันกำลังเล่นกับเวลาและสังเกตว่าการทำความเข้าใจรายการอย่างง่ายบนสตริงขนาดเล็กใช้เวลานานกว่าการดำเนินการแบบเดียวกันกับรายการสตริงอักขระเดี่ยวขนาดเล็ก คำอธิบายใด ๆ เป็นเวลาเกือบ 1.35 เท่า &gt;&gt;&gt; from timeit import timeit &gt;&gt;&gt; timeit("[x for x in 'abc']") 2.0691067844831528 &gt;&gt;&gt; timeit("[x for x in ['a', 'b', 'c']]") 1.5286479570345861 เกิดอะไรขึ้นในระดับล่างที่ทำให้เกิดสิ่งนี้

1
ทำไมทูเปิล (set ([1,“ a”,“ b”,“ c”,“ z”,“ f”])) == tuple (set ([“ a”,“ b”,“ c”, “ z”,“ f”, 1])) 85% ของเวลาที่เปิดใช้งานการสุ่มแฮช?
เมื่อได้รับคำตอบของ Zero Piraeus สำหรับคำถามอื่นเรามีสิ่งนั้น x = tuple(set([1, "a", "b", "c", "z", "f"])) y = tuple(set(["a", "b", "c", "z", "f", 1])) print(x == y) พิมพ์Trueประมาณ 85% ของเวลาที่เปิดใช้งานการสุ่มแฮช ทำไมถึง 85%?

10
IronPython กับ Python .NET
ฉันต้องการเข้าถึงแอสเซมบลี. NET บางตัวที่เขียนด้วย C # จากโค้ด Python การวิจัยเล็กน้อยแสดงให้เห็นว่าฉันมีสองทางเลือก: IronPythonพร้อมความสามารถในการเชื่อมต่อ. NET / การสนับสนุนในตัว Python ด้วยแพ็คเกจPython .NET การแลกเปลี่ยนระหว่างโซลูชันทั้งสองคืออะไร?

2
ทำไมไพ ธ อนไม่ตั้งค่ารักษาลำดับการแทรก
ฉันรู้สึกประหลาดใจที่ค้นพบเมื่อเร็ว ๆ นี้ว่าในขณะที่ dicts รับประกันเพื่อรักษาลำดับการแทรกใน Python 3.7+ ชุดจะไม่: &gt;&gt;&gt; d = {'a': 1, 'b': 2, 'c': 3} &gt;&gt;&gt; d {'a': 1, 'b': 2, 'c': 3} &gt;&gt;&gt; d['d'] = 4 &gt;&gt;&gt; d {'a': 1, 'b': 2, 'c': 3, 'd': 4} &gt;&gt;&gt; s = {'a', 'b', 'c'} &gt;&gt;&gt; s {'b', 'a', 'c'} …
12 python  set  cpython 

4
Tuple slicing ไม่ส่งคืนวัตถุใหม่ซึ่งต่างจากการแบ่งส่วนรายการ
ใน Python (2 และ 3) เมื่อใดก็ตามที่เราใช้การแบ่งรายการมันจะส่งคืนวัตถุใหม่เช่น: l1 = [1,2,3,4] print(id(l1)) l2 = l1[:] print(id(l2)) เอาท์พุต &gt;&gt;&gt; 140344378384464 &gt;&gt;&gt; 140344378387272 หากสิ่งเดียวกันซ้ำกับ tuple วัตถุเดียวกันจะถูกส่งกลับเช่น: t1 = (1,2,3,4) t2 = t1[:] print(id(t1)) print(id(t2)) เอาท์พุต &gt;&gt;&gt; 140344379214896 &gt;&gt;&gt; 140344379214896 มันจะดีถ้ามีใครบางคนสามารถทำให้เข้าใจว่าทำไมสิ่งนี้ถึงเกิดขึ้นตลอดประสบการณ์ Python ของฉันฉันอยู่ภายใต้การแสดงผลชิ้นส่วนที่ว่างเปล่าส่งคืนวัตถุใหม่ ความเข้าใจของฉันคือการส่งคืนวัตถุเดียวกันกับสิ่งอันดับที่ไม่เปลี่ยนรูปและไม่มีจุดสร้างสำเนาใหม่ แต่ก็ไม่ได้กล่าวถึงในเอกสารทุกที่
12 python  list  tuples  slice  cpython 

2
ทำไมการตั้งค่า descriptor บนคลาสจะเขียนทับ descriptor?
เล่นง่าย: class VocalDescriptor(object): def __get__(self, obj, objtype): print('__get__, obj={}, objtype={}'.format(obj, objtype)) def __set__(self, obj, val): print('__set__') class B(object): v = VocalDescriptor() B.v # prints "__get__, obj=None, objtype=&lt;class '__main__.B'&gt;" B.v = 3 # does not print "__set__", evidently does not trigger descriptor B.v # does not print anything, we overwrote the …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.