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

Python เป็นภาษาการเขียนโปรแกรมตีความระดับสูงแบบไดนามิก การออกแบบมุ่งเน้นไปที่ไวยากรณ์ที่ชัดเจนวิธีการเขียนโปรแกรมเชิงวัตถุและวิธีที่ถูกต้องในการทำสิ่งที่ชัดเจน Python สนับสนุนโมดูลและข้อยกเว้นและมีไลบรารีโมดูลมาตรฐานมากมาย Python มีวัตถุประสงค์ทั่วไปและใช้กันอย่างแพร่หลายตั้งแต่เว็บไปจนถึงระบบฝังตัว

9
ทำไมผู้คนถึงลังเลที่จะใช้ Python 3
Python 3 เปิดตัวในเดือนธันวาคม 2551 เวลาผ่านไปนานมากแล้ว แต่จนถึงทุกวันนี้นักพัฒนาหลายคนลังเลที่จะใช้ Python 3 แม้แต่กรอบงานที่ได้รับความนิยมอย่าง Django ก็ไม่สามารถทำงานร่วมกับ Python 3 ได้ แต่ก็ยังต้องพึ่งพา Python 2 แน่นอนว่า Python 3 มีความเข้ากันไม่ได้กับ Python 2 และบางคนจำเป็นต้องพึ่งพาความเข้ากันได้แบบย้อนหลัง แต่ Python 3 ยังไม่พอสำหรับโปรเจ็กต์ส่วนใหญ่ที่จะเปลี่ยนหรือเริ่มต้นด้วย Python 3 การมีสองเวอร์ชันที่แข่งขันกันนั้นมีข้อเสียมากมาย สองสาขาต้องได้รับการดูแลรักษาความสับสนสำหรับผู้เรียนและอื่น ๆ เหตุใดจึงมีความลังเลอย่างมากในชุมชน Python เกี่ยวกับการเปลี่ยนเป็น Python 3

23
การเขียนโปรแกรมอย่างหมดจดเมื่อเขียนโค้ดทางวิทยาศาสตร์
ฉันไม่ได้เขียนโครงการขนาดใหญ่จริงๆ ฉันไม่ได้บำรุงรักษาฐานข้อมูลขนาดใหญ่หรือจัดการกับโค้ดหลายล้านบรรทัด รหัสของฉันคือ "สคริปต์" สิ่งที่พิมพ์ - สิ่งที่จะทดสอบฟังก์ชั่นทางคณิตศาสตร์หรือเพื่อจำลองบางอย่าง - "การเขียนโปรแกรมทางวิทยาศาสตร์" โปรแกรมที่ยาวที่สุดที่ฉันทำงานจนถึงจุดนี้คือโค้ดสองร้อยบรรทัดและโปรแกรมส่วนใหญ่ที่ฉันใช้อยู่นั้นมีประมาณ 150 รายการ รหัสของฉันยังอึ ฉันรู้เรื่องนี้เมื่อวันก่อนขณะที่ฉันพยายามค้นหาไฟล์ที่ฉันเขียนสักครู่แล้ว แต่ฉันอาจจะเขียนทับและฉันไม่ได้ใช้การควบคุมเวอร์ชันซึ่งอาจทำให้คุณรู้สึกปวดร้าวใจเป็นจำนวนมาก รูปแบบของรหัสของฉันมีความซับซ้อนและเต็มไปด้วยความคิดเห็นที่ล้าสมัยซึ่งระบุวิธีอื่นในการทำบางสิ่งหรือคัดลอกบรรทัดของรหัสไป ในขณะที่ชื่อตัวแปรเริ่มต้นที่ดีมากและเป็นคำอธิบายในขณะที่ฉันเพิ่มหรือเปลี่ยนแปลงสิ่งต่าง ๆ ตามเช่นสิ่งใหม่ที่ใครบางคนต้องการทดสอบรหัสได้รับการซ้อนทับด้านบนและเขียนทับและเพราะฉันรู้สึกว่าสิ่งนี้ควรทดสอบอย่างรวดเร็วตอนนี้ มีกรอบฉันเริ่มใช้ชื่อตัวแปรเส็งเคร็งและไฟล์ไปที่หม้อ ในโครงการที่ฉันกำลังทำอยู่ตอนนี้ฉันอยู่ในช่วงที่สิ่งเหล่านี้กลับมากัดฉันอย่างมาก แต่ปัญหาคือ (นอกเหนือจากการใช้การควบคุมเวอร์ชันและการสร้างไฟล์ใหม่สำหรับการทำซ้ำแต่ละครั้งและบันทึกทั้งหมดในไฟล์ข้อความที่ไหนสักแห่งซึ่งอาจจะช่วยสถานการณ์ได้อย่างมาก) ฉันไม่รู้จริง ๆ ว่าจะดำเนินการปรับปรุงอย่างไร สไตล์การเข้ารหัสที่แท้จริงของฉัน การทดสอบหน่วยจำเป็นสำหรับการเขียนโค้ดขนาดเล็กลงหรือไม่? แล้ว OOP ล่ะ วิธีใดบ้างที่ดีสำหรับการเขียนโค้ดที่ดีและสะอาดได้อย่างรวดเร็วเมื่อทำการ "การเขียนโปรแกรมเชิงวิทยาศาสตร์" ซึ่งต่างจากการทำงานในโครงการขนาดใหญ่ ฉันถามคำถามเหล่านี้เพราะบ่อยครั้งการเขียนโปรแกรมเองนั้นไม่ซับซ้อน มันเกี่ยวกับคณิตศาสตร์หรือวิทยาศาสตร์ที่ฉันกำลังทดสอบหรือค้นคว้าด้วยการเขียนโปรแกรม เช่นคลาสจำเป็นหรือไม่เมื่อมีตัวแปรสองตัวและฟังก์ชั่นอาจดูแลได้ (พิจารณาสิ่งเหล่านี้โดยทั่วไปเป็นสถานการณ์ที่ความเร็วของโปรแกรมเป็นที่ต้องการในตอนท้ายที่เร็วกว่า - เมื่อคุณรันขั้นตอนการจำลองมากกว่า 25,000,000+ ครั้งคุณต้องการให้มันเป็นแบบนั้น) บางทีนี่อาจจะกว้างเกินไปและถ้าเป็นเช่นนั้นฉันขอโทษ แต่เมื่อดูหนังสือโปรแกรมพวกเขามักจะพูดถึงโครงการขนาดใหญ่ รหัสของฉันไม่จำเป็นต้องมี OOP และมันก็ค่อนข้างสั้นอยู่แล้วดังนั้นจึงไม่เหมือน "โอ้ แต่ไฟล์จะลดลงหนึ่งพันบรรทัดถ้าเราทำอย่างนั้น!" ฉันต้องการทราบวิธี …

24
ข้อเสียของ Python คืออะไร [ปิด]
Python ดูเหมือนจะโกรธแค้นในทุกวันนี้และไม่ใช่เรื่องที่ไม่สมควรเพราะมันเป็นภาษาที่แท้จริงที่คนส่วนใหญ่ชอบที่จะได้รับปัญหาใหม่ในการแก้ปัญหา แต่ในฐานะที่เป็นนักปราชญ์เคยกล่าวไว้ว่า (เรียกเขาว่านักปราชญ์เท่านั้นเพราะฉันไม่รู้ว่าใครพูดจริง ๆ ไม่แน่ใจว่าเขาเป็นคนฉลาดเลย) เพื่อรู้ภาษาที่แท้จริงไม่เพียง แต่รู้ ไวยากรณ์, การออกแบบ, ฯลฯ , ข้อดี แต่ยังรวมถึงข้อเสียของมัน ไม่มีภาษาใดที่สมบูรณ์แบบบางคนดีกว่าคนอื่น ดังนั้นสิ่งที่จะเป็นในความคิดของคุณข้อเสียวัตถุประสงค์ของงูหลาม หมายเหตุ: ฉันไม่ได้ขอให้เปรียบเทียบภาษาที่นี่ (เช่น C # ดีกว่า Python เพราะ ... yadda yadda yadda) - มีวัตถุประสงค์มากกว่า (ในบางระดับ) ความคิดเห็นที่คุณลักษณะภาษาได้รับการออกแบบไม่ดีไม่ว่าจะเป็นอะไร บางอย่างที่คุณขาดไปและอื่น ๆ หากต้องใช้ภาษาอื่นเป็นการเปรียบเทียบ แต่เพียงเพื่อแสดงให้เห็นถึงจุดที่ยากที่จะอธิบายรายละเอียดอย่างอื่น (เช่นเพื่อความเข้าใจง่าย)

8
'โมดูลนำเข้า' กับ 'จากฟังก์ชันนำเข้าโมดูล'
ฉันใช้วิธีนี้มาตลอด: from sys import argv และใช้argvมีเพียงargv แต่มีแบบแผนของการใช้สิ่งนี้: import sys และใช้ argv โดย sys.argv วิธีที่สองทำให้รหัสตัวเองเอกสารและฉัน(จริงๆ) เป็นไปตามมัน แต่เหตุผลที่ฉันชอบวิธีแรกคือรวดเร็วเพราะเรานำเข้าเฉพาะฟังก์ชั่นที่ต้องการแทนที่จะนำเข้าโมดูลทั้งหมด (ซึ่งมีฟังก์ชั่นที่ไร้ประโยชน์มากกว่าซึ่งไพ ธ อนจะเสียเวลาในการนำเข้า) โปรดทราบว่าฉันต้องการเพียง argv และฟังก์ชั่นอื่น ๆ จาก sys นั้นไร้ประโยชน์สำหรับฉัน ดังนั้นคำถามของฉันคือ วิธีแรกทำให้สคริปต์เร็วขึ้นจริง ๆ หรือไม่ วิธีใดที่เป็นที่ต้องการมากที่สุด ทำไม?
143 python 

1
โมดูลเทียบกับแพ็คเกจ?
เมื่อใดก็ตามที่ฉันทำfrom 'x' import 'y'ฉันสงสัยว่าอันไหนที่ถือว่าเป็น 'โมดูล' และอันไหนคือ 'แพ็คเกจ' และทำไมมันจึงไม่มีวิธีอื่น
140 python  packages  modules 

2
รูปแบบการตั้งชื่อไฟล์ Python?
ฉันเคยเห็นส่วนนี้ของ PEP-8 https://www.python.org/dev/peps/pep-0008/#package-and-module-names ฉันยังไม่ชัดเจนว่านี่หมายถึงชื่อไฟล์ของโมดูล / คลาส / แพ็คเกจหรือไม่ หากฉันมีตัวอย่างหนึ่งของชื่อไฟล์ควรเป็นตัวพิมพ์เล็กทั้งหมดที่มีขีดล่างถ้าเหมาะสมหรือไม่ หรืออย่างอื่น?

3
ทำไมงูหลามเขียนด้วย GIL
การล็อคล่ามทั่วโลก (GIL) ดูเหมือนจะถูกอ้างถึงบ่อยครั้งเป็นเหตุผลหลักว่าทำไมการทำเกลียวและสิ่งที่คล้ายกันนั้นเป็นเรื่องยุ่งยากใน Python ซึ่งทำให้เกิดคำถามขึ้นมาว่า การเป็นโปรแกรมเมอร์ไม่ใช่ฉันไม่รู้ว่าทำไมอาจเป็น - อะไรคือเหตุผลที่อยู่เบื้องหลังในการวาง GIL?

10
ทำไม Python จึงใช้กับการคำนวณประสิทธิภาพสูง / วิทยาศาสตร์ (แต่ไม่ใช่ Ruby)
มีการอ้างอิงจากการพูดคุย PyCon 2011ที่ไป: อย่างน้อยในร้านค้าของเรา (Argonne National Laboratory) เรามีสามภาษาที่ได้รับการยอมรับสำหรับการคำนวณทางวิทยาศาสตร์ ตามลำดับนี้พวกเขาคือ C / C ++, Fortran ในทุกภาษาและ Python คุณจะสังเกตเห็นว่าการขาด Ruby, Perl, Java มันอยู่ในบริบททั่วไปของการคำนวณประสิทธิภาพสูง การได้รับใบเสนอราคานั้นมาจากร้านค้าเพียงแห่งเดียว แต่มีอีกคำถามเกี่ยวกับภาษาสำหรับ HPCและระบุว่า Python เป็นหนึ่งในการเรียนรู้ (และไม่ใช่ Ruby) ตอนนี้ฉันสามารถเข้าใจ C / C ++ และ Fortran ที่ใช้ในปัญหาพื้นที่ (และ Perl / Java ไม่ได้ใช้) แต่ฉันประหลาดใจที่จะมีความแตกต่างที่สำคัญใน Python และ Ruby ที่ใช้กับ HPC เนื่องจากพวกเขามีความคล้ายคลึงกัน (หมายเหตุ - …

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

2
เกิดอะไรขึ้นกับการนำเข้าที่สัมพันธ์กันใน Python
ฉันเพิ่งอัพเกรดpylintเวอร์ชั่นตัวตรวจสอบ Python สไตล์ยอดนิยม มันเกิดขึ้นอย่างรวดเร็วในรหัสของฉันชี้สถานที่ที่ฉันนำเข้าโมดูลในแพ็คเกจเดียวกันโดยไม่ต้องระบุเส้นทางของแพ็คเกจทั้งหมด ข้อความแสดงข้อผิดพลาดใหม่คือ W0403 W0403: การนำเข้าสัมพัทธ์% r ควรเป็น% r ใช้เมื่อตรวจพบการนำเข้าที่สัมพันธ์กับไดเรกทอรีแพ็คเกจ ตัวอย่าง ตัวอย่างเช่นถ้าแพ็คเกจของฉันมีโครงสร้างแบบนี้: /cake /__init__.py /icing.py /sponge.py /drink และในแพ็คเกจฟองน้ำฉันเขียน: import icing แทน import cake.icing ฉันจะได้รับข้อผิดพลาดนี้ ในขณะที่ฉันเข้าใจว่าไม่ใช่ข้อความ Pylint ทั้งหมดที่มีความสำคัญเท่ากันและฉันไม่กลัวที่จะยกเลิกข้อความเหล่านั้น แต่ฉันไม่เข้าใจว่าทำไมการฝึกเช่นนี้จึงถือเป็นแนวคิดที่ไม่ดี ฉันหวังว่าบางคนสามารถอธิบายข้อผิดพลาดได้ดังนั้นฉันจึงสามารถปรับปรุงรูปแบบการเขียนรหัสได้มากกว่า (อย่างที่ฉันวางแผนจะทำในปัจจุบัน) ปิดการเตือนที่น่าเกรงขามนี้

5
ทำไม% s ถึงดีกว่า + สำหรับการต่อข้อมูล
ฉันเข้าใจว่าเราควรใช้%sเพื่อเชื่อมสตริงเข้าด้วยกันแทนที่จะเป็น+Python ฉันสามารถทำสิ่งใดก็ได้: hello = "hello" world = "world" print hello + " " + world print "%s %s" % (hello, world) print "{} {}".format(hello, world) print ' '.join([hello, world]) แต่ทำไมฉันถึงควรใช้สิ่งอื่นนอกเหนือจาก+? การเขียนเรียงต่อกันด้วยวิธีง่าย+กว่าทำได้เร็วกว่า จากนั้นหากคุณดูที่สตริงการจัดรูปแบบคุณจะระบุประเภทเช่น%sและ%dและ ฉันเข้าใจว่ามันจะดีกว่าหากจะระบุประเภทให้ชัดเจน แต่ฉันอ่านแล้วว่า+ควรหลีกเลี่ยงการใช้การต่อข้อมูลแบบเรียงต่อกันแม้ว่าจะพิมพ์ง่ายกว่าก็ตาม มีเหตุผลที่ชัดเจนที่ควรรวมสตริงเข้าด้วยกันด้วยวิธีใดวิธีหนึ่งเหล่านี้หรือไม่?
88 python  strings 

9
ตรวจสอบการจัดการข้อยกเว้นครั้งแรกหรือไม่
ฉันกำลังทำงานกับหนังสือ"Head First Python" (เป็นภาษาของฉันที่จะเรียนรู้ในปีนี้) และฉันได้ไปยังส่วนที่พวกเขาโต้เถียงเกี่ยวกับเทคนิคสองรหัส: การ ตรวจสอบการจัดการข้อยกเว้นข้อแรก นี่คือตัวอย่างของรหัสไพ ธ อน: # Checking First for eachLine in open("../../data/sketch.txt"): if eachLine.find(":") != -1: (role, lineSpoken) = eachLine.split(":",1) print("role=%(role)s lineSpoken=%(lineSpoken)s" % locals()) # Exception handling for eachLine in open("../../data/sketch.txt"): try: (role, lineSpoken) = eachLine.split(":",1) print("role=%(role)s lineSpoken=%(lineSpoken)s" % locals()) except: pass ตัวอย่างแรกเกี่ยวข้องโดยตรงกับปัญหาใน.splitฟังก์ชัน คนที่สองเพียงแค่ให้ตัวจัดการข้อยกเว้นจัดการกับมัน (และละเว้นปัญหา) …

6
ทำไมความนิยมของไพ ธ อนจึงเกิดขึ้นอย่างรวดเร็ว? [ปิด]
ปรากฏงูใหญ่ครั้งแรกในปี 1991 แต่มันก็ค่อนข้างที่ไม่รู้จักจนถึงปี 2004 หากการจัดอันดับ TIOBEปริมาณที่มีความหมายอะไร เกิดอะไรขึ้น? อะไรทำให้ความสนใจในภาษาเก่า 13 ปีนี้ต้องผ่านหลังคา มีเหตุผลที่ Python ไม่ได้พิจารณาว่าเป็นคู่แข่งที่แท้จริงของ Perl ในทศวรรษแรกของการมีชีวิตอยู่หรือไม่? มีเหตุผลหรือไม่ที่ Python ไม่ได้อยู่ในความสับสนต่อเนื่องไปอีกสิบปี? โดยส่วนตัวฉันคิดว่า Python เป็นภาษาที่ดีมากและฉันดีใจที่ฉันไม่ใช่คนเดียว แต่มันไม่ได้มีการสำรองข้อมูลขององค์กรหรือคุณสมบัตินักฆ่าที่จะอธิบายการเพิ่มขึ้นอย่างฉับพลันของความเกี่ยวข้อง ไม่มีใครรู้เรื่องนี้บ้าง?

3
ฉันจะย้ายออกจากโรงเรียนแห่งความคิด“ for-loop” ได้อย่างไร?
นี่เป็นคำถามที่ค่อนข้างเป็นแนวคิด แต่ฉันหวังว่าฉันจะได้รับคำแนะนำที่ดีเกี่ยวกับเรื่องนี้ การเขียนโปรแกรมจำนวนมากที่ฉันทำคือกับอาร์เรย์( NumPy ); ฉันมักจะต้องจับคู่รายการในสองอาร์เรย์ขึ้นไปที่มีขนาดแตกต่างกันและสิ่งแรกที่ฉันไปคือ for-loop หรือแย่กว่านั้นเป็นซ้อนสำหรับ for-loop ฉันต้องการหลีกเลี่ยงการวนซ้ำมากที่สุดเพราะมันช้า (อย่างน้อยใน Python) ฉันรู้ว่าสิ่งต่าง ๆ มากมายกับ NumPy มีคำสั่งที่กำหนดไว้ล่วงหน้าที่ฉันเพียงแค่ต้องทำการวิจัย แต่คุณ (เป็นโปรแกรมเมอร์ที่มีประสบการณ์มากกว่า) มีกระบวนการคิดทั่วไปที่อยู่ในใจเมื่อคุณต้องทำอะไรบางอย่าง? ดังนั้นฉันมักจะมีสิ่งนี้ซึ่งน่ากลัวและฉันต้องการหลีกเลี่ยง: small_array = np.array(["one", "two"]) big_array = np.array(["one", "two", "three", "one"]) for i in range(len(small_array)): for p in range(len(big_array)): if small_array[i] == big_array[p]: print "This item is matched: ", small_array[i] …
79 python  array  loops 

6
คำพูดเดี่ยวเทียบกับเครื่องหมายคำพูดคู่ [ปิด]
ฉันเพิ่งเริ่มงานที่ฉันเขียน Python หลังจากมาจากพื้นหลัง Java และฉันสังเกตเห็นว่านักพัฒนารายอื่นมักจะพูดสตริงโดยใช้เครื่องหมายคำพูดเดี่ยว ( '') แทนที่จะเป็นเครื่องหมายคำพูดคู่ ( "") ตัวอย่างเช่น: line1 = 'This is how strings typically look.' line2 = "Not like this." มีเหตุผลใดที่นอกเหนือไปจากความชอบส่วนตัวหรือไม่? นี่เป็นวิธีที่เหมาะสมในการอ้างอิงสตริงหรือไม่ โดยเฉพาะสิ่งที่ฉันต้องการทราบคือหากมีมาตรฐานบางประเภทหรือวิธีปฏิบัติที่ดีที่สุดที่ยอมรับได้ซึ่งผลักดันรูปแบบการเข้ารหัสนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.