การมอบหมายงานหลามเชิงปฏิบัติ ภาษาโปรแกรม Python - จะเริ่มต้นที่ไหน? Metaclasses และคำอธิบาย

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

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

ภารกิจที่ 1: เริ่มต้นด้วยพื้นฐาน

ในขณะที่เขียนบทความนี้ Python มีสองเวอร์ชันหลัก: Python 2.7 และ Python 3.2 เวอร์ชันที่คุณเลือกเรียนนั้นไม่สำคัญนักเนื่องจากความแตกต่างจะมีน้อยมากโดยเฉพาะสำหรับผู้เริ่มต้น แต่คุณควรรู้ว่า Python 2 รองรับไลบรารีของบุคคลที่สามมากกว่า ในขณะที่ Python 3 มุ่งเน้นไปที่นักพัฒนาที่ทำงานเพื่อปรับปรุงภาษาเป็นหลัก ทางเลือกเป็นของคุณ หากโค้ดจากบทช่วยสอนใด ๆ ไม่ทำงานตามที่ตั้งใจ ตรวจสอบให้แน่ใจว่าคุณใช้ Python เวอร์ชันที่เหมาะสมจากบทช่วยสอนนั้น

Wikibooks เป็นแหล่งข้อมูลที่เชื่อถือได้สำหรับการเรียนรู้สิ่งใหม่ๆ มาโดยตลอด และ Python ก็ไม่มีข้อยกเว้น ที่นี่คุณจะได้พบกับชุดบทช่วยสอนดีๆ ที่จะช่วยให้คุณคุ้นเคยกับ Python มากขึ้น ไม่มีศัพท์เฉพาะทางด้านเทคนิคมากนัก และคุณสามารถเริ่มเขียนโค้ดได้อย่างรวดเร็ว ซึ่งจะเป็นประสบการณ์ที่คุ้มค่าอย่างแน่นอน ดังนั้น ฉันขอแนะนำไซต์นี้ให้เป็นสถานที่ที่ดีในการเริ่มต้นการเดินทางด้วย Python ของคุณ

คุณจะไม่พบแหล่งข้อมูลที่ดีไปกว่าเอกสารอย่างเป็นทางการบน python.org อย่างไรก็ตาม หากคุณต้องการเริ่มต้นจากที่นี่ทันที นี่อาจไม่ใช่ความคิดที่ดี

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

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

ภารกิจที่ 2: บทช่วยสอนและ screencasts

เพลย์ลิสต์ NewBoston นั้นยอดเยี่ยมเสมอและคุณสามารถเรียนรู้ภาษาได้มากมาย "บัคกี้" เป็นผู้สอนที่ยอดเยี่ยม เขาสนใจที่จะฟังเพราะเขาพบความสมดุลระหว่างความตลกและความรู้ดี สิ่งที่เขาพยายามสื่อนั้นง่ายต่อการเข้าใจเสมอ ฉันแนะนำให้ลองดูเพลย์ลิสต์ของเขา โดยเฉพาะเพลย์ลิสต์ Python คุณไม่จำเป็นต้องมีความรู้ด้านการเขียนโปรแกรมใดๆ หลังจากดูวิดีโอการสอนของเขาแล้ว คุณจะเข้าใจภาษาได้อย่างมั่นคง

Nettuts+ Python ตั้งแต่เริ่มต้น

การแนะนำ Python ที่ดีคือหลักสูตรของ Giles Lavelle เช่นเดียวกับซีรีส์ของ TheNewBoston Lavelle ถือว่าคุณไม่มีประสบการณ์ในการเขียนโปรแกรม

หากคุณต้องการดูแอปพลิเคชันในโลกแห่งความเป็นจริงหรือต้องการทำความเข้าใจการพัฒนาเว็บ Python ซีรีส์นี้เหมาะอย่างยิ่ง

ใน screencast นี้ คุณจะสร้างเว็บไซต์แบบไดนามิกตั้งแต่เริ่มต้นโดยใช้เฟรมเวิร์ก Django Python

หน้าจอ Python จาก ShowMeDo

StackOverflow ไม่ใช่แค่มือใหม่ จุดบกพร่อง และปัญหาเท่านั้น

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

สร้างบอท Python ที่สามารถเล่นเกมบนเว็บได้

ในบทช่วยสอนนี้ คุณจะได้ทำความคุ้นเคยกับเนื้อหาเฉพาะ ฉันไม่แนะนำให้ผู้เริ่มต้นใช้งานเด็ดขาด อย่างไรก็ตาม ฉันคิดว่ามันคุ้มค่าที่จะกล่าวถึง ในบทช่วยสอนนี้ Chris Kiehl จะแสดงให้คุณเห็นถึงวิธีสร้างบอท Python ที่น่าสนใจมากซึ่งจะเล่นเกมง่ายๆ สำหรับคุณ บทช่วยสอนจะแสดงให้คุณเห็นถึงพลังของ Python อาจเป็นประโยชน์สำหรับการแก้ปัญหางานประจำวันที่สามารถใช้เพื่อจัดการคอมพิวเตอร์ของคุณได้

ภารกิจที่ 3: eBook ฟรี

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

เรียนรู้ Python ด้วยวิธีที่ยากลำบาก

แม้ว่าชื่อหนังสือจะชื่อว่า "The Not Easy Approach to Learning Python" แต่การเรียนรู้ Python ยังคงเป็นเรื่องง่ายอย่างที่ควรจะเป็น! ในหนังสือเล่มนี้ Zed A. Shaw จะให้คำแนะนำที่สมบูรณ์และละเอียดแก่คุณ พร้อมด้วยปัญหาและตัวอย่างเพื่อทดสอบทักษะการเขียนโปรแกรมของคุณ หนังสือเล่มนี้เขียนด้วยภาษาที่ไม่เป็นทางการ แต่อธิบายรายละเอียดมากมาย ดังนั้นคุณจะไม่มีปัญหาในการอ่านและผลลัพธ์จะตามมาในเร็วๆ นี้

Think Python: วิธีคิดแบบนักวิทยาศาสตร์คอมพิวเตอร์

คุณจะไม่พบแหล่งข้อมูลที่ดีไปกว่าเอกสารอย่างเป็นทางการของ python.org

ดังที่คำบรรยายระบุว่า "Thinking Like a Programmer" คุณจะพบเนื้อหาทางทฤษฎีมากมายที่นี่ ผู้เริ่มต้นอาจหงุดหงิดและพบว่าหนังสือเล่มนี้ยาก แต่เชื่อฉันเถอะ มันคุ้มค่าที่จะอ่าน เพราะคุณจะพบข้อมูลเกี่ยวกับทฤษฎีอัลกอริทึมและแนวคิดระดับสูง

ประดิษฐ์ด้วย Python

หากคุณสนใจในภาคปฏิบัติมากกว่า การสร้างเกมของคุณเองจะเป็นประสบการณ์ที่คุ้มค่าอย่างแท้จริง! ในหนังสือเล่มนี้ Al Sweigart ถือว่าคุณไม่มีความรู้เกี่ยวกับ Python มากนัก และจะช่วยคุณสร้างเกมให้กับคุณ แม้ว่าหนังสือเล่มนี้จะเกี่ยวกับการพัฒนาเกม แต่ก็ค่อนข้างเหมาะสำหรับผู้เริ่มต้นที่สมบูรณ์เช่นกัน ต่อมาในบทความนี้ ฉันได้กล่าวถึงหนังสือเล่มหนึ่งที่คล้ายกัน แต่ต้องใช้คำสั่ง Python ที่แข็งแกร่ง หากคุณรู้สึกว่าคุณรู้ภาษานั้นดี หนังสือเล่มอื่นจะเป็นแหล่งข้อมูลที่มากกว่าสำหรับคุณ

หนังสือจังโก้

หากคุณต้องการเรียนรู้การพัฒนาเว็บไซต์ใน Python คุณน่าจะใช้ Django Framework มากที่สุด คุณอาจไม่คุ้นเคยกับเฟรมเวิร์ก Django แต่คุณควรมีความเข้าใจเกี่ยวกับ Python เป็นอย่างดีจึงจะอ่านหนังสือเล่มนี้ได้ ข้อมูลในนั้นเป็นสิ่งที่ขาดไม่ได้สำหรับนักพัฒนาเว็บมือใหม่

หนังสือเกี่ยวกับไพธอน

หากหนังสือทั้งหมดที่กล่าวมาข้างต้นยังไม่เพียงพอหรือคุณสนใจหัวข้อใดหัวข้อหนึ่ง โปรดไปที่ลิงก์นี้ หนุ่มๆ จาก python.org ได้สร้างรายชื่อหนังสือมากมาย โดยจัดเรียงตามความซับซ้อนและหัวข้อ

ภารกิจที่ 4: ทำความรู้จักกับ StackOverflow

นักพัฒนาหลายพันรายประสบปัญหาเดียวกันกับที่คุณจะต้องเผชิญหน้า StackOverflow เป็นแหล่งข้อมูลที่ดีเยี่ยมที่นักพัฒนาสามารถค้นหาวิธีแก้ไขปัญหาของตนได้ เมื่อคุณพบข้อบกพร่องอื่นและไม่รู้ว่าจะแก้ไขอย่างไร ให้ค้นหาคำตอบใน StackOverflow เป็นไปได้มากว่าจะมีข้อมูลอยู่แล้วว่าคนอื่นแก้ไขปัญหาที่คล้ายกันได้อย่างไร

แต่ StackOverflow ไม่ใช่แค่มือใหม่ จุดบกพร่อง และปัญหาเท่านั้น ไซต์นี้เต็มไปด้วยคนฉลาดที่เต็มใจช่วยเหลือ เรียนรู้จากพวกเขา!

เทคนิคและเคล็ดลับส่วนใหญ่ที่คุณจะพบในที่นี้ไม่มีอยู่ในบทช่วยสอนใดๆ และจะมีประโยชน์มากสำหรับผู้ใช้ Python ขั้นสูงหรือระดับกลาง

ภารกิจที่ 5: โปรเจ็กต์ออยเลอร์


Project Euler (ออกเสียงว่า 'Oil-er' จำไว้เพื่อจะได้ไม่เสียหน้าในอนาคต) เป็นหนึ่งในเว็บไซต์โปรดของฉัน เมื่อคุณสร้างบัญชีแล้ว คุณสามารถเข้าร่วมและแก้ปัญหาประมาณ 400 รายการบนเว็บไซต์นี้ได้ แต่ละงานคือ ในความคิดของฉัน คณิตศาสตร์ 50 เปอร์เซ็นต์ การเขียนโปรแกรม 50 เปอร์เซ็นต์ เป็นแนวทางที่ถูกต้องที่สุดในการศึกษาแต่ละวิชาเหล่านี้

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

ไม่มีอะไรจะทำให้คุณเป็นโปรแกรมเมอร์ที่ดีกว่าได้เร็วไปกว่าการค้นหาวิธีแก้ไขปัญหา Project Euler ที่มีประสิทธิภาพมากที่สุด

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

นอกจากนี้ ยังมีบล็อกที่ให้ความรู้อีกมากมายที่คุณสามารถค้นหาวิธีแก้ไขปัญหา Python บน Project Euler ได้ หากคุณติดอยู่กับปัญหา ก็ไม่เป็นไรหากคุณดูวิธีแก้ปัญหาของนักพัฒนารายอื่น สิ่งที่สำคัญที่สุดคือการเรียนรู้สิ่งใหม่จากพวกเขา นี่คือบล็อกที่ฉันชื่นชอบสองบล็อก:

ภารกิจที่ 6: สร้างเกม

นอกเหนือจากการสร้างเกมของคุณเองแล้ว ยังมีบางสิ่งที่สนุกสนานได้

นอกเหนือจากการสร้างเกมของคุณเองแล้ว ยังมีบางสิ่งที่สนุกสนานได้ มันอาจจะค่อนข้างเป็นช่วงการเรียนรู้ที่สูงชัน แต่ก็คุ้มค่าอย่างแน่นอน PyGame เป็นไลบรารี่ที่มีชื่อเสียงที่สุดสำหรับการพัฒนาเกมใน Python และคุณจะไม่มีปัญหาในการค้นหาบทช่วยสอนฟรีเกี่ยวกับเรื่องนี้ ด้านล่างนี้เป็นสิ่งที่ดีที่สุด

เอกสาร PyGame อย่างเป็นทางการ

เช่นเดียวกับบทช่วยสอน Python นักพัฒนา PyGame ได้จัดทำเอกสาร - บทนำ เนื้อหาเต็มไปด้วยคำศัพท์ทางเทคนิค ในกรณีที่คุณต้องการเริ่มพัฒนาเกมทันที อย่างไรก็ตาม เช่นเคย เอกสารสำหรับนักพัฒนาจะเป็นแหล่งข้อมูลที่ดีที่สุด นั่นเป็นเหตุผลที่ฉันแนะนำไซต์นี้

ประดิษฐ์ด้วย Python (ด้วย PyGame)

e-book ฟรีจาก AI Sweigart จะแนะนำให้ผู้อ่านรู้จักกับไลบรารี PyGame แม้ว่าคุณจะไม่รู้อะไรเกี่ยวกับไลบรารีนี้เลย หลังจากอ่านแล้ว คุณจะสามารถสร้างเกมหนึ่งหรือสองเกมได้ เกมง่ายๆ จะเป็นรากฐานที่ยอดเยี่ยมสำหรับการสร้างโปรเจ็กต์ของคุณเอง หากคุณมีความปรารถนา Sweigart แสดงความคิดเห็นโดยละเอียดเกี่ยวกับโค้ดของเขาเพื่อช่วยในกระบวนการเรียนรู้

นี่คือเพลย์ลิสต์อื่นจาก TheNewBoston การแนะนำ PyGame ที่ยอดเยี่ยม คุณอาจไม่คุ้นเคยกับไลบรารีนี้อีกต่อไป การอ่านหนังสือ คุณจะเริ่มเข้าใจ PyGame แต่ไม่เหมือนกับ InventWithPython คุณจะไม่ได้สร้างเกมที่เต็มเปี่ยม

ภารกิจที่ 7: สำรวจไลบรารีและเครื่องมือยอดนิยม

Python เป็นภาษาอเนกประสงค์ที่คุณสามารถทำอะไรได้เกือบทุกอย่าง เรามีห้องสมุดและเครื่องมือมากมายให้เลือกใช้อย่างไม่สิ้นสุด ด้านล่างเป็นรายการยอดนิยม

ปิ๊ปปี้

หากคุณต้องการรวบรวมข้อมูลจากหน้า HTML... BeautifulSoup จะทำทุกอย่างที่คุณต้องการและประหยัดเวลาได้มาก

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

NumPy + SciPy

โดยปกติแล้วไลบรารีเหล่านี้จะใช้ร่วมกัน (SciPy ขึ้นอยู่กับ NumPy) หากต้องทำงานเกี่ยวกับการคำนวณทางคณิตศาสตร์หรือการวิจัยทางวิทยาศาสตร์ ห้องสมุดเหล่านี้จะทำหน้าที่เป็นผู้ช่วยที่ดีเยี่ยม NumPy และ SciPy ขยายฟังก์ชันทางคณิตศาสตร์และความสามารถของ Python ซึ่งส่งผลให้การแก้ปัญหางานต่างๆ เร็วขึ้นอย่างมาก

ซุปที่สวยงาม

BeautifulSoup สุดยอดจริงๆ การแยกวิเคราะห์ข้อมูลจากหน้า HTML ค่อนข้างน่าเบื่อและน่าหงุดหงิด BeautifulSoup จะทำทุกอย่างเพื่อคุณและช่วยคุณประหยัดเวลาได้มาก ฉันขอแนะนำห้องสมุดนี้เป็นอย่างยิ่ง มันสนุกที่ได้ร่วมงานด้วย

ไลบรารีรูปภาพหลาม

Image Processing Library (PIL) เหมาะสำหรับงานการประมวลผลภาพทุกประเภท หากมีความจำเป็นต้องโต้ตอบกับรูปภาพไม่ว่าด้วยวิธีใดก็ตาม PIL น่าจะช่วยให้งานนี้สำเร็จได้

จังโก้

ดังที่ฉันได้กล่าวไว้ในบทความนี้ หากคุณสนใจในการพัฒนาเว็บไซต์ คุณเลือก Django Framework นี่เป็นเฟรมเวิร์ก Python ที่ได้รับความนิยมมากที่สุดและมีทรัพยากรการฝึกอบรมจำนวนมาก

ความท้าทายที่ 8: มีส่วนร่วมในโครงการโอเพ่นซอร์ส

ด้วยความเข้าใจภาษาที่ดี ความสามารถในการอ่านและนำทางโค้ดของผู้อื่นถือเป็นทักษะที่จำเป็นและยังจะพิสูจน์ได้ว่าเป็นวิธีการเรียนรู้ที่ยอดเยี่ยมอีกด้วย

นี่คือสาเหตุที่โครงการโอเพ่นซอร์สได้รับความนิยมมาก เว็บไซต์ Github และ Bitbucket เป็นที่ที่คุณควรเริ่มต้น ไม่ต้องกังวล หากมีคนวิพากษ์วิจารณ์โค้ดของคุณ คุณไม่ควรมีส่วนร่วมในโครงการเหล่านั้นทันที คุณสามารถทำงานแยกสาขาของโปรเจ็กต์นี้ได้ตลอดเวลา ค้นหาว่ามันทำงานอย่างไร และทำทุกอย่างที่คุณต้องการ หากจู่ๆ ก็เจอสิ่งที่ต้องปรับปรุง เยี่ยมมาก! ทำสิ่งนี้และส่งการปรับปรุงของคุณ นั่นคือสิ่งที่โครงการโอเพ่นซอร์สมีไว้เพื่อ

บทสรุป

ฉันหวังว่าฉันจะสามารถจัดหาฐานที่เชื่อถือได้สำหรับการเรียนรู้ Python ให้กับคุณ ในกรณีที่ฉันลืมพูดถึงแหล่งข้อมูลใด ๆ โปรดแจ้งให้เราทราบในความคิดเห็นด้านล่างเพื่อช่วยเหลือผู้ใช้รายอื่น!

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

ชนิดข้อมูล โครงสร้างพื้นฐาน

  1. วิธีรับรายการคุณลักษณะทั้งหมดของวัตถุ
  2. วิธีรับรายการคุณลักษณะสาธารณะทั้งหมดของวัตถุ
  3. วิธีรับรายการวิธีการบนวัตถุ
  4. ตัวแปร "เวทย์มนตร์" ใดที่เก็บเนื้อหาของความช่วยเหลือ
  5. มีสองสิ่งอันดับ โดยนำสิ่งอันดับสามมาต่อกันกับสองสิ่งแรก
  6. มีสองสิ่งอันดับ รับอันที่สามเป็นการรวมกันขององค์ประกอบเฉพาะของสองสิ่งอันดับแรก
  7. เหตุใดหากรายการมีการเปลี่ยนแปลงในวงวน ดังนั้น for x ใน lst[:] จะถูกใช้ ซึ่งหมายความว่า [:] ?
  8. มีสองรายการที่มีความยาวเท่ากัน รายการหนึ่งประกอบด้วยคีย์ และอีกรายการประกอบด้วยค่า ทำพจนานุกรม.
  9. มีสองรายการที่มีความยาวต่างกัน รายการหนึ่งประกอบด้วยคีย์ และอีกรายการประกอบด้วยค่า ทำพจนานุกรม. สำหรับคีย์ที่ไม่มีค่า ให้ใช้ไม่มีเป็นค่า ละเว้นค่าที่ไม่มีคีย์
  10. มีพจนานุกรม. พลิกกลับ เหล่านั้น. คีย์คู่: สลับค่า - มูลค่า: คีย์
  11. มีสตริงใน Unicode รับสตริง 8 บิตในการเข้ารหัส utf-8 และ cp1251
  12. มีสตริงในการเข้ารหัส cp1251 รับสตริง Unicode

ฟังก์ชั่น

    เขียนฟังก์ชันที่สามารถส่งผ่านอาร์กิวเมนต์ได้ทั้งในรายการ/ทูเพิลหรือทีละรายการ ฟังก์ชันจะรวมอาร์กิวเมนต์ทั้งหมด

    >>> ฉ(1, 2, 3) 6 >>> ฉ() 6 >>> ฉ((3, 5, 6)) 14 >>> ฉ(3, (5, 6)) 14

    เขียนฟังก์ชันโรงงานที่จะส่งคืนฟังก์ชันบวกพร้อมอาร์กิวเมนต์

    >>> add5 = การบวก(5) # ฟังก์ชันบวกจะคืนค่าฟังก์ชันบวกด้วย 5 >>> add5(3) # จะคืนค่า 3 + 5 = 8 8 >>> add5(8) # จะคืนค่า 8 + 5 = 13 13 >>> add8 = การบวก(8) >>> add8(2) # จะส่งคืน 2 + 8 = 10 10 >>> add8(4) # จะคืนค่า 4 + 8 = 12 12

    เขียนตัวเลือกด้วยฟังก์ชันแลมบ์ดา "ภายใน" และไม่ระบุชื่อตามปกติ

    เขียนโรงงานคล้ายกับขั้นตอนที่ 2 แต่ส่งคืนรายการฟังก์ชันดังกล่าว

    >>> เพิ่มเติม = การเพิ่มช่วง (0, 5) # รายการฟังก์ชันบวกตั้งแต่ 0 ถึง 5 รวม

    เหล่านั้น. คล้ายกัน

    เขียนแผนที่แบบอะนาล็อก:

    • อาร์กิวเมนต์แรกอาจเป็นฟังก์ชันหรือรายการฟังก์ชัน
    • อาร์กิวเมนต์ที่สองคือรายการอาร์กิวเมนต์ที่จะถูกส่งไปยังฟังก์ชัน
    • สันนิษฐานว่าฟังก์ชันเหล่านี้เป็นฟังก์ชันของอาร์กิวเมนต์เดียว
    >>> แผนที่ของฉัน(, ) [(1, 2, 3), (2, 3, 4), (3, 4, 5)]

    ในกรณีนี้ รายการ “ขยาย” จะเป็น: [(add0(1), add0(2), add0(3)), (add1(1), add1(2), add1(3)), (add2( 1), เพิ่ม2(2), เพิ่ม2(3))]

ตัววนซ้ำ

    เขียนวงจรฟังก์ชันตัวสร้างที่จะส่งคืนตัววนซ้ำแบบวน

    >>> i = iter() >>> c = รอบ(i) >>> c.next() 1 >>> c.next() 2 >>> c.next() 3 >>> c.next () 1

    เขียนฟังก์ชันตัวสร้างลูกโซ่ที่วนซ้ำวัตถุที่ส่งผ่านตามลำดับ (ตัวเลขที่กำหนดเอง)

    >>> i1 = iter() >>> i2 = iter() >>> c = chain(i1, i2) >>> c.next() 1 >>> c.next() 2 >>> c. ถัดไป() 3 >>> c.next() 4 >>> c.next() 5 >>> c.next() Traceback (การโทรล่าสุดครั้งล่าสุด): ... StopIteration

เขียน doctests สำหรับฟังก์ชันและตัววนซ้ำ

โมดูล

  1. เรามีโมดูลที่นำเข้า foo เราจะค้นหาเส้นทางทางกายภาพของไฟล์จากตำแหน่งที่นำเข้าได้อย่างไร
  2. จากโมดูล foo คุณนำเข้าโมดูล feedparser feedparser เวอร์ชัน X อยู่ในไดเร็กทอรีแพ็คเกจไซต์ทั้งระบบ เวอร์ชัน Y อยู่ถัดจากโมดูล foo มีการกำหนดตัวแปรสภาพแวดล้อม PYTHONPATH และ feedparser ก็อยู่ที่นั่นด้วย เวอร์ชัน Z จะใช้เวอร์ชันใด
  3. ฉันจะดูรายการไดเรกทอรีที่ Python ค้นหาโมดูลได้อย่างไร
  4. คุณมีโมดูล foo ภายในนั้นแถบโมดูลจะถูกนำเข้า ถัดจากโมดูล foo จะมีไฟล์ bar.py และ bar/__init__.py โมดูลใดที่จะใช้
  5. โครงสร้าง __name__ == "__main__" หมายความว่าอย่างไร และใช้เพื่ออะไร?

ชั้นเรียน

    เขียนคลาส Observable พื้นฐานที่จะอนุญาตให้ลูกหลาน:

    1. เมื่อผ่าน **kwargs ให้ป้อนค่าที่เกี่ยวข้องเป็นแอตทริบิวต์
    2. ตรวจสอบให้แน่ใจว่าแอตทริบิวต์สาธารณะทั้งหมดแสดงขึ้นเมื่อพิมพ์
    >>> คลาส X (สังเกตได้): ... ผ่าน >>> x = X(foo=1, bar=5, _bazz=12, name="Amok", อุปกรณ์ประกอบฉาก=("หนึ่ง", "สอง")) >>> พิมพ์ x X(bar=5, foo=1, name="Amok", props=("One", "two")) >>> x.foo 1 >>> x.name "Amok" > >> x._bazz 12
  1. เขียนคลาสที่ดูเหมือนเป็นพจนานุกรม แต่จะอนุญาตให้เข้าถึงคีย์ในรูปแบบแอตทริบิวต์ได้

    >>> x = DictAttr([("หนึ่ง", 1), ("สอง", 2), ("สาม", 3)]) >>> x ( "หนึ่ง": 1, "สาม": 3, "สอง": 2) >>> x["สาม"] 3 >>> x.get("หนึ่ง") 1 >>> x.get("ห้า", "หายไป") "หายไป" >>> x .one 1 >>> x.five Traceback (การโทรล่าสุดครั้งล่าสุด): ... AttributeError

    จุดที่ 2 พร้อมภาวะแทรกซ้อน: เขียนคลาสพาเรนต์ XDictAttr เพื่อให้คีย์ของผู้สืบทอดถูกกำหนดแบบไดนามิกโดยการมีอยู่ของเมธอด get_ .

    >>> คลาส X(XDictAttr): ... def get_foo(self): ... return 5 ... def get_bar(self): ... return 12 >>> x = X(("one": 1 , "สอง": 2, "สาม": 3)) >>> x X: ( "หนึ่ง": 1, "สาม": 3, "สอง": 2) >>> x["หนึ่ง"] 1 > >> x.three 3 >>> x.bar 12 >>> x["foo"] 5 >>> x.get("foo", "missing") 5 >>> x.get("bzz", "หายไป") "หายไป"

    เขียนคลาสที่ลงทะเบียนอินสแตนซ์และจัดให้มีอินเทอร์เฟซตัววนซ้ำเหนืออินสแตนซ์เหล่านั้น

    >>> x = เร็ก() >>> x >>> y = Reg() >>> y >>> z = เร็ก() >>> สำหรับฉันใน Reg: ... พิมพ์ i

เขียนการทดสอบหน่วยตามการทดสอบข้างต้น แต่ไม่จำกัดเพียงการทดสอบเหล่านี้

Metaclasses และคำอธิบาย

  1. ใช้ทำอะไร ได้รับอาร์กิวเมนต์ใด ควรส่งคืนอะไร: เมธอด __new__ และ __init__ คลาส
  2. __new__ และ __init__ ได้รับข้อโต้แย้งอะไรบ้างสำหรับ metaclass

    ใช้ตัวอธิบายที่จับประเภทแอตทริบิวต์

    >>> คลาส Image(object): ... height = Property(0) ... width = Property(0) ... path = Property("/tmp/") ... size = Property(0) > >> img = รูปภาพ() >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg >>>

    ใช้คลาสฐาน (โดยใช้ metaclass) ที่รวบรวมประเภทแอตทริบิวต์

    >>> คลาสรูปภาพ (วัตถุ): ... ความสูง = 0 ... ความกว้าง = 0 ... เส้นทาง = "/tmp" ... ขนาด = 0 >>> img = รูปภาพ () >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg" >>> img.path = 320 Traceback (ล่าสุด โทรครั้งล่าสุด): ... TypeError

    ใช้คลาสฐาน (โดยใช้เมตาคลาส) และตัวอธิบายที่จะสร้าง SQL schema (ANSI SQL) สำหรับโมเดลตามคลาส:

    >>> คลาส Image(Table): ... height = Integer() ... width = Integer() ... path = Str(128) >>> print Image.sql() CREATE TABLE image (height integer, จำนวนเต็มความกว้าง เส้นทาง varchar(128))

    ไม่จำเป็นต้องมี NULL, PRIMARY KEY, FOREIGN KEY, CONSTRAINTS ก็เพียงพอที่จะนำไปใช้สองประเภท: Integer และ Str

  • เป้าหมาย 1- ความช่วยเหลือเกี่ยวกับลิงก์ สื่อต่างๆ สำหรับผู้ที่กำลังวางแผนจะเรียนการเขียนโปรแกรมและใช้ Python เป็นภาษาแรก แสดงว่าไม่ยากอย่างที่คิด
  • เป้าหมาย 2- รวบรวมลิงก์ไปยังเนื้อหาที่เป็นประโยชน์และน่าสนใจในหัวข้อนี้ในความคิดเห็น

0. ฉันจะทำสำเร็จหรือไม่?

ตั้งแต่แรกเริ่มฉันสงสัยว่าตัวเองจะทำอะไรได้มากกว่า Hello World หรือเปล่า สำหรับฉันดูเหมือนว่าการเขียนโปรแกรมเป็นเรื่องยากมากและมหัศจรรย์อย่างยิ่ง นอกจากนี้ยังมีงาน งานอดิเรก ครอบครัว ซึ่งจะทำให้เสียสมาธิจากการเรียนเต็มตัว

ฉันไม่ควรกลัวและไม่แนะนำให้คุณ การเขียนโปรแกรมอาจจะไม่กลายเป็นอาชีพหลักของฉันเลย แต่มันเป็นวิธีที่ดีในการสร้างสรรค์ นี่คือหมากรุกและอารยธรรมในขวดเดียว

ทุกอย่างง่ายกว่าที่คิดและน่าสนใจกว่ามาก

1. วรรณกรรม

มาร์ค ลัทซ์ “การเขียนโปรแกรม Python”- ขอแนะนำให้อ่านในฟอรัมและหลักสูตรต่างๆ สำหรับฉันดูเหมือนว่ามันละเอียดเกินไปและโหลดมากสำหรับมือใหม่ อ่านให้มาก เขียนโปรแกรมให้น้อย การอ่านหลังจากเชี่ยวชาญ Python อย่างน้อยจะมีประโยชน์มากกว่ามาก

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

หนังสืออื่นๆ ทั้งหมดกลับกลายเป็นว่ามีประโยชน์และให้ข้อมูลน้อยลง โดยทั่วไปแล้ว เป็นเรื่องยากที่จะหยิบและซื้อวรรณกรรมดีๆ เกี่ยวกับหัวข้อนี้ในร้านค้าหรือในเวอร์ชันดิจิทัล

2. สิ่งที่ต้องอ่านบนอินเทอร์เน็ต

http://pythonworld.ru/ - พูดถึงพื้นฐานของภาษาในภาษาที่เรียบง่ายและเข้าใจได้ ซึ่งมักใช้เป็นสูตรโกง

หลังจากนั้นอีกสองเดือน ฉันสามารถสร้างแอปพลิเคชัน Django ตัวแรกได้ แต่สิ่งสำคัญคือตอนนี้ฉันมีความรู้เพียงพอสำหรับการพัฒนาและการเรียนรู้อย่างอิสระ สิ่งที่ยากที่สุดคือการมาถึงจุดนี้

อีกหนึ่งเดือนต่อมา ฉันได้เข้าร่วมสองโครงการบน GitHub และเข้าร่วมในโครงการเหล่านั้น แน่นอนว่าฉันยังคงแก้ปัญหาง่ายๆ แต่ได้รับคำแนะนำและการฝึกอบรมเป็นการตอบแทน

Tags: การฝึกอบรมหลาม, การฝึกอบรมการเขียนโปรแกรม

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

นอกจากนี้ยังมีพื้นที่เก็บข้อมูลสำหรับงานเหล่านี้พร้อมการทดสอบและวิธีแก้ปัญหาของฉัน (เพื่อทดสอบด้วยตัวเอง)

หากต้องการรันการทดสอบฟังก์ชันของคุณ วิธีที่ง่ายที่สุดคือเพิ่มโค้ดจากโฟลเดอร์การทดสอบที่ส่วนท้ายของไฟล์ฟังก์ชัน

และตอนนี้งานจริง:

การดำเนินการทางคณิตศาสตร์อย่างง่าย (1)

เขียนฟังก์ชันเลขคณิตที่รับอาร์กิวเมนต์ 3 ตัว โดย 2 ตัวแรกเป็นตัวเลข ส่วนตัวที่สามคือการดำเนินการที่ควรดำเนินการ หากอาร์กิวเมนต์ที่สามคือ + ให้เพิ่มเข้าไป ถ้า - แล้วลบ; * - คูณ; / - หาร (ทีละวินาที) มิฉะนั้น ให้ส่งคืนสตริง "การดำเนินการที่ไม่รู้จัก"

ปีอธิกสุรทิน (2)

เขียนฟังก์ชัน is_year_leap ที่รับ 1 อาร์กิวเมนต์ - ปี และส่งกลับค่า True หากปีนั้นเป็นปีอธิกสุรทิน และส่งคืนค่า False หากเป็นอย่างอื่น

สี่เหลี่ยมจัตุรัส (3)

เขียนฟังก์ชันสแควร์ที่รับ 1 อาร์กิวเมนต์ - ด้านข้างของสี่เหลี่ยมจัตุรัสและส่งคืนค่า 3 ค่า (โดยใช้ ): เส้นรอบวงของสี่เหลี่ยมจัตุรัส, พื้นที่ของสี่เหลี่ยมจัตุรัสและเส้นทแยงมุมของสี่เหลี่ยมจัตุรัส

ฤดูกาล (4)

เขียนฤดูกาลฟังก์ชันที่รับ 1 อาร์กิวเมนต์ - หมายเลขเดือน (ตั้งแต่ 1 ถึง 12) และส่งคืนฤดูกาลที่เป็นของเดือนนี้ (ฤดูหนาว ฤดูใบไม้ผลิ ฤดูร้อน หรือฤดูใบไม้ร่วง)

เงินฝากธนาคาร (5)

ผู้ใช้ฝากเงินรูเบิลเป็นระยะเวลาหลายปีที่ 10% ต่อปี (ทุกปีขนาดเงินฝากของเขาจะเพิ่มขึ้น 10% เงินนี้จะถูกเพิ่มเข้าไปในจำนวนเงินฝากและจะมีดอกเบี้ยในปีหน้าด้วย ).

เขียนฟังก์ชันแบงค์ที่รับอาร์กิวเมนต์ a และปี แล้วส่งคืนจำนวนเงินที่จะอยู่ในบัญชีของผู้ใช้

เลขเฉพาะ (6)

เขียนฟังก์ชัน is_prime ที่รับ 1 อาร์กิวเมนต์ - ตัวเลขตั้งแต่ 0 ถึง 1,000 และส่งคืนค่า True หากเป็นจำนวนเฉพาะ และส่งคืนค่า False หากเป็นอย่างอื่น

วันที่ถูกต้อง (7)

เขียนฟังก์ชันวันที่ที่รับอาร์กิวเมนต์ 3 รายการ ได้แก่ วัน เดือน และปี ให้คืนค่า True หากวันที่ดังกล่าวอยู่ในปฏิทินของเรา และคืนค่าเป็น False หากเป็นอย่างอื่น

การเข้ารหัส XOR (8)

เขียนฟังก์ชัน XOR_cipher ที่รับ 2 อาร์กิวเมนต์: สตริงที่จะเข้ารหัสและคีย์การเข้ารหัส ซึ่งจะส่งคืนสตริงที่เข้ารหัสโดย XOR โดยส่งอักขระของสตริงคีย์ เขียนฟังก์ชัน XOR_uncipher ซึ่งกู้คืนสตริงดั้งเดิมโดยใช้สตริงที่เข้ารหัสและคีย์

เตรียมสัมภาษณ์ตำแหน่ง Python Developer

วัสดุที่ใช้ในการเตรียมการ: คู่มือสำคัญในการสัมภาษณ์ Python, ต้องมีคำถามสัมภาษณ์ Python, คำถามสัมภาษณ์ Python ที่จำเป็น 15 ข้อ, คำถามและคำตอบในการสัมภาษณ์ Python

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

การทำงานกับรายการ

นิพจน์ Lambda, ตัวสร้างรายการ และนิพจน์ตัวสร้าง

นิพจน์แลมบ์ดา- วิธีทางลัดสำหรับการสร้างฟังก์ชันที่ไม่ระบุชื่อบรรทัดเดียว ความเรียบง่ายบ่อยครั้ง (แต่ไม่เสมอไป) ทำให้โค้ดสะอาดขึ้นและอ่านได้ง่ายกว่าการประกาศฟังก์ชันแบบคลาสสิก ในทางกลับกัน ความเรียบง่ายแบบเดียวกันจะจำกัดความเป็นไปได้และพื้นที่ของการประยุกต์ใช้นิพจน์แลมบ์ดา

เครื่องกำเนิดรายการจัดเตรียมไวยากรณ์ที่กระชับสำหรับการสร้างรายการ ใช้เพื่อสร้างรายการที่แต่ละองค์ประกอบเป็นผลมาจากการดำเนินการบางอย่างกับองค์ประกอบของลำดับหรือตัววนซ้ำอื่น ตัวสร้างรายการสามารถใช้เพื่อสร้างลำดับย่อยขององค์ประกอบเหล่านั้นที่สมาชิกตรงตามเงื่อนไขที่กำหนด ตัวสร้างรายการใน Python เป็นทางเลือกที่ไม่เหมือนใครสำหรับฟังก์ชัน map() และ filter() ในตัว

นิพจน์ Lambda พร้อมด้วยฟังก์ชัน map() และ filter() และตัวสร้างรายการจะคล้ายกัน ดังนั้นการเลือกหนึ่งในเครื่องมือเหล่านี้จึงขึ้นอยู่กับอัตนัยและเป็นกรณีไป แต่ควรสังเกตว่าตัวสร้างรายการเร็วกว่าเล็กน้อย - การเรียกใช้ฟังก์ชันแลมบ์ดาจะสร้างเฟรมสแต็กใหม่

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

อะไรคือความแตกต่างระหว่างรายการและทูเพิล?

ข้อแตกต่างหลัก: รายการสามารถเปลี่ยนแปลงได้ แต่ทูเพิลไม่สามารถทำได้ การทำงานกับสิ่งอันดับนั้นเร็วกว่าการใช้รายการ หากคุณต้องการกำหนดชุดของค่าคงที่ และสิ่งที่คุณต้องทำคือทำซ้ำองค์ประกอบต่างๆ ของมัน การใช้ทูเพิลแทนการใช้รายการจะเหมาะสมกว่า สิ่งทูเปิลยังสามารถทำหน้าที่เป็นคีย์สำหรับพจนานุกรมได้ ไม่เหมือนรายการ

ผู้ที่มีคุณสมบัติขั้นสูงสุดจะกล่าวว่าสิ่งอันดับนั้นมีความหลากหลายและการใช้งานก็คล้ายคลึงกับการใช้ struct ในภาษาการเขียนโปรแกรม C

การดีบักโค้ดและการทดสอบ

คุณใช้แนวทางใดในการทดสอบหน่วยใน Python

คำตอบพื้นฐานสำหรับคำถามนี้เกี่ยวข้องกับการใช้เฟรมเวิร์ก Python - unittest

Unittest รองรับการทดสอบอัตโนมัติ แบ่งปันโค้ดเพื่อตั้งค่าและทำการทดสอบให้เสร็จสิ้น การจัดกลุ่มการทดสอบ และอนุญาตให้แยกการทดสอบออกจากกรอบการรายงาน โมดูล unittest มีคลาสที่ทำให้ง่ายต่อการสนับสนุนคุณสมบัติเหล่านี้สำหรับชุดทดสอบ

คุณอาจถูกขอให้อธิบายองค์ประกอบสำคัญของโครงสร้าง unittest กล่าวคือ:

  • ม้านั่งทดสอบ (อุปกรณ์ทดสอบ);
  • กรณีทดสอบ;
  • ชุดทดสอบ;
  • นักวิ่งทดสอบ

ตัววนซ้ำ

ตัววนซ้ำคืออะไร?

Iterator เป็นอินเทอร์เฟซที่ให้การเข้าถึงและการนำทางผ่านองค์ประกอบของคอลเลกชัน (อาร์เรย์หรือคอนเทนเนอร์) ตัววนซ้ำอาจมีชื่อสามัญที่แตกต่างกันในระบบที่ต่างกัน ในแง่ระบบการจัดการฐานข้อมูล ตัววนซ้ำจะเรียกว่าเคอร์เซอร์ ในกรณีที่ง่ายที่สุด ตัววนซ้ำในภาษาระดับต่ำคือตัวชี้

ความแตกต่างระหว่างตัววนซ้ำและตัวสร้างคืออะไร?

ข้อกำหนดเหล่านี้เกี่ยวข้องกันอย่างใกล้ชิด (ตัวสร้างใด ๆ เป็นตัววนซ้ำ) มักจะสับสน ซึ่งบางครั้งก็นำไปสู่ความเข้าใจผิด ตัววนซ้ำเป็นแนวคิดทั่วไป นี่คือออบเจ็กต์ที่มีการกำหนดสองวิธี: __next__ และ __iter__ ในทางกลับกัน ตัวสร้างเป็นตัววนซ้ำ แต่ไม่ใช่วิธีอื่น สามารถรับตัวสร้างได้โดยใช้คีย์เวิร์ด Yield ในส่วนเนื้อหาของฟังก์ชัน

Def กำลังสอง (เริ่ม, หยุด): สำหรับ i อยู่ในช่วง (เริ่ม, หยุด): ให้ผลผลิต i * i ตัวสร้าง = กำลังสอง (a, b)

กิล

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

ผ่านการโต้แย้ง

วัตถุที่ไม่เปลี่ยนรูปถูกส่งผ่านอย่างไร

วัตถุที่ไม่เปลี่ยนรูปจะถูกส่งผ่านตามค่า วัตถุ เช่น จำนวนเต็มและสตริง จะถูกส่งผ่านเป็นการอ้างอิงวัตถุ แทนที่จะเป็นสำเนาของวัตถุ

วัตถุที่ไม่แน่นอนถูกส่งผ่านอย่างไร

วัตถุที่ไม่แน่นอนจะถูกส่งผ่าน "โดยตัวชี้" ออบเจ็กต์ เช่น รายการ และพจนานุกรม จะถูกส่งผ่านเป็นการอ้างอิงออบเจ็กต์ ซึ่งคล้ายกับวิธีการส่งพอยน์เตอร์ไปยังอาร์เรย์ในภาษา C มาก - วัตถุที่ไม่แน่นอนสามารถแก้ไขได้โดยตรงภายในฟังก์ชัน เช่นเดียวกับอาร์เรย์ใน C

>>> def f(a): # ชื่อ a ถูกกำหนดให้กับวัตถุที่ส่งผ่าน... a = 99 # เฉพาะตัวแปรท้องถิ่นเท่านั้นที่มีการเปลี่ยนแปลง... >>> b = 88 >>> f(b)# เริ่มแรก ชื่อ a และ b อ้างอิงถึงหมายเลขเดียวกัน 88 >>> print(b) # ตัวแปร b ไม่มีการเปลี่ยนแปลง 88

ในตัวอย่างนี้ เมื่อเรียกใช้ฟังก์ชัน f(b) ตัวแปร a จะถูกกำหนดให้กับออบเจ็กต์ 88 แต่มีตัวแปร a อยู่ภายในฟังก์ชันที่ถูกเรียกเท่านั้น การเปลี่ยนตัวแปร a ภายในฟังก์ชันจะไม่ส่งผลกระทบต่อสภาพแวดล้อมที่มีการเรียกใช้ฟังก์ชัน - เพียงแค่สร้างวัตถุใหม่ทั้งหมด a ในเวลาที่มีการโทร

สิ่งที่จะออกมาหลังจากการเรียกครั้งที่สองเพื่อผนวก () ในโค้ดด้านล่าง?

>>> def ผนวก(list=): ... # ผนวกความยาวของรายการเข้ากับรายการ... list.append(len(list)) ... return list ... >>> ผนวก([" a"," b"]) ["a", "b", 2] >>> >>> append() # การโทรโดยไม่มีอาร์กิวเมนต์ใช้ค่าเริ่มต้นของ list >>> >>> append() # แต่ จะเกิดอะไรขึ้นเมื่อมีการเรียก append อีกครั้งโดยไม่มีข้อโต้แย้ง?

เมื่อค่าเริ่มต้นสำหรับอาร์กิวเมนต์ของฟังก์ชันคือนิพจน์ จะมีการประเมินเพียงครั้งเดียว แทนที่จะประเมินทุกครั้งเมื่อมีการเรียกใช้ฟังก์ชัน ดังนั้น หลังจากที่รายการอาร์กิวเมนต์ได้รับการเตรียมใช้งานเป็นอาร์เรย์ว่างแล้ว การเรียกใช้ฟังก์ชันในภายหลังโดยไม่มีอาร์กิวเมนต์จะยังคงใช้อาร์เรย์เดิมที่เตรียมใช้งานไว้แต่แรก

>>> ผนวก() # การโทรครั้งแรกโดยไม่มีอาร์กิวเมนต์จะใช้ค่าเริ่มต้น >>> ผนวก() # แต่แล้ว... >>> ผนวก() # การโทรต่อเนื่อง ขยายรายการเริ่มต้น >>> ผนวก() # และ ดำเนินต่อไป...

ฉันจะเปลี่ยนการประยุกต์ใช้วิธีการผนวกในคำถามก่อนหน้าเพื่อหลีกเลี่ยงพฤติกรรมที่ไม่พึงประสงค์ที่อธิบายไว้ได้อย่างไร

มีการดำเนินการทางเลือกอื่นของวิธีการผนวกที่จะแก้ปัญหา:

>>> def append(list=None): ... if list is None: list = # เพิ่มความยาวของรายการ... list.append(len(list)) return list ... >>> append( ) >> >ผนวก()

คำถามนอกบางหมวดหมู่

คุณจะสลับค่าของตัวแปรสองตัวภายในสตริงใน Python ได้อย่างไร?

ลองดูตัวอย่างง่ายๆ:

>>> x = "X" >>> y = "Y"

ภาษาโปรแกรมอื่นๆ หลายภาษาต้องการให้คุณทำสิ่งนี้เมื่อแทนที่ค่า X และ Y:

>>> tmp = x >>> x = y >>> y = tmp >>> x, y ("Y", "X")

แต่ใน Python มีตัวเลือกให้ทำสิ่งนี้ด้วยโค้ดหนึ่งบรรทัดดังนี้:

>>> x,y = y,x >>> x,y ("ใช่", "X")

ข้อความสุดท้ายด้านล่างนี้จะแสดงผลอะไร

>>> flist = >>> for i in range(3): ... flist.append(lambda: i) ... >>> # สิ่งที่จะออกมา?

ในการปิดใดๆ ใน Python ตัวแปรจะเชื่อมโยงกันตามชื่อ ดังนั้นบรรทัดโค้ดด้านบนจะแสดงผลดังนี้:

>>> flist = >>> สำหรับฉันอยู่ในช่วง (3): ... flist.append(lambda i = i: i) ... >>>

จุดประสงค์ของคำว่า "ตนเอง" คืออะไร?

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

ผู้ใช้คลาส: def __init__(self): self.name = "Ivan Ivanov" self.age = 16 user_obj = User() user_obj.name # self.name มี "Ivan Ivanov" เป็นค่า

วัตถุประสงค์ของคำหลัก "yield" คืออะไร?

คีย์เวิร์ด Yield สามารถเปลี่ยนฟังก์ชันใดๆ ให้เป็นเครื่องกำเนิดไฟฟ้าได้ มันทำงานคล้ายกับคำสั่ง return โดยมีความแตกต่างที่คีย์เวิร์ดจะส่งคืนอ็อบเจ็กต์ตัวสร้าง ฟังก์ชันยังสามารถเรียกคีย์เวิร์ดผลตอบแทนได้หลายครั้ง

Def testgen(ดัชนี): วันธรรมดา = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"] ให้ผลผลิตวันธรรมดาให้ผลผลิตวันธรรมดา = testgen (0) พิมพ์ถัดไป ( วัน) ถัดไป (วัน) #output: อาทิตย์ จันทร์

__init__.py คืออะไร จะนำเข้าคลาสจากไดเร็กทอรีอื่นได้อย่างไร?

Init__.py ส่วนใหญ่จะใช้เพื่อเริ่มต้นแพ็คเกจ Python

ไฟล์ __init__.py ในไดเร็กทอรี lstm_m จะบอกล่าม Python ว่าไดเร็กทอรีนี้ควรถือเป็นแพ็คเกจ Python

จะนำเข้าคลาสจากไดเร็กทอรีอื่นได้อย่างไร?

โดยปกติ __init__.py จะเป็นไฟล์เปล่า และถ้าเราจำเป็นต้องใช้ lstm.py ในไฟล์ run.py ก็จะต้องนำเข้าดังนี้:

จาก lstm_m นำเข้า lstm

นอกจากนี้ ภายในโฟลเดอร์โมดูลควรมีไฟล์ชื่อ __init__.py สำหรับการนำเข้า

Python มีประเภทบิวท์อินอะไรบ้าง?

มีประเภท Python ในตัวที่ไม่เปลี่ยนรูปและไม่เปลี่ยนรูป

เปลี่ยนแปลงได้:

  • รายการ;
  • ฝูงชน;
  • พจนานุกรม

ไม่เปลี่ยนรูป:

  • สตริง;
  • สิ่งอันดับ;
  • ตัวเลข

โปรดจำไว้ว่ามีเพียงประเภทหลักเท่านั้นที่แสดงไว้ด้านบน ในความเป็นจริงมีมากกว่าหกคน

docstring ใน Python คืออะไร?

สตริงเอกสาร Python (docstring) เป็นวิธีจัดทำเอกสารฟังก์ชัน โมดูล และคลาส มาตรฐานการออกแบบอยู่บนเว็บไซต์อย่างเป็นทางการ

ฉันจะแปลงตัวเลขเป็นสตริงได้อย่างไร

หากต้องการแปลงตัวเลขเป็นสตริง โดยทั่วไปคุณจะใช้ฟังก์ชัน str() ในตัว แม้ว่าจะมีวิธีอื่นๆ เช่น "(0:d).format(number) และ "%d"%number หากคุณต้องการแปลงเลขฐานสิบเป็นฐานแปด (oct - octal) หรือเลขฐานสิบหก (hex - hexadecimal) ให้ใช้ฟังก์ชัน oct() หรือ hex() ที่มีอยู่แล้วภายในตามลำดับ

Xrange และ Range แตกต่างกันอย่างไร?

ฟังก์ชัน xrange() ส่งคืนออบเจ็กต์ xrange ในขณะที่ range() ส่งคืนรายการและใช้จำนวนหน่วยความจำเท่ากัน โดยไม่คำนึงถึงขนาดของฟังก์ชัน

ฉันจะดูวิธีการหรือคุณลักษณะของวัตถุได้อย่างไร

คำสั่ง dir(x) ส่งคืนรายการชื่อแอ็ตทริบิวต์ที่เรียงลำดับแล้วสำหรับอ็อบเจ็กต์ใดๆ ที่ส่งผ่านไป หากไม่มีการระบุวัตถุ dir() จะส่งกลับชื่อในขอบเขตปัจจุบัน

นอกจากนี้

หากคุณพูดภาษาอังกฤษ เราขอแนะนำให้ทำแบบทดสอบออนไลน์เพื่อทดสอบความรู้ของคุณก่อนการสัมภาษณ์

แหล่งรวมสื่อการเรียนรู้ Python จากเรา: , . สั้นๆ เช่นกัน อย่าลืมแก้ไขปัญหา: คุณสามารถดำเนินการได้ที่นี่

บทสรุป

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