เกี่ยวกับ list
จุดแรกที่สำคัญมากซึ่งทุกอย่างจะตามมา (ฉันหวังว่า)
ในไพ ธ อนธรรมดาlist
ไม่ได้มีความพิเศษ แต่อย่างใด (ยกเว้นมีซินแท็กซ์ที่น่ารักสำหรับการสร้างซึ่งส่วนใหญ่เป็นอุบัติเหตุทางประวัติศาสตร์) เมื่อรายการ[3,2,6]
จะทำก็คือสำหรับ intents และวัตถุประสงค์เพียงวัตถุหลามธรรมดาเช่นหมายเลข3
ชุดหรือฟังก์ชั่น{3,7}
lambda x: x+5
(ใช่มันรองรับการเปลี่ยนแปลงองค์ประกอบของมันและรองรับการทำซ้ำและสิ่งอื่น ๆ อีกมากมาย แต่นั่นเป็นสิ่งที่ประเภท: สนับสนุนการดำเนินงานบางอย่างในขณะที่ไม่สนับสนุนคนอื่น ๆ int สนับสนุนการเพิ่มอำนาจ แต่ไม่ได้ ทำให้มันพิเศษมาก - มันคือสิ่งที่ int เป็น lambda รองรับการโทร แต่นั่นไม่ได้ทำให้พิเศษมาก - นั่นคือสิ่งที่แลมบ์ดาใช้สำหรับ :)
เกี่ยวกับ and
and
ไม่ใช่ตัวดำเนินการ (คุณสามารถเรียกมันว่า "โอเปอเรเตอร์" แต่คุณสามารถเรียกว่า "สำหรับ" โอเปอเรเตอร์ได้เช่นกัน :) ตัวดำเนินการใน Python เป็นวิธีการ (นำไปใช้ผ่าน) ที่เรียกใช้บนวัตถุบางชนิดซึ่งมักเขียนเป็นส่วนหนึ่งของชนิดนั้น ไม่มีวิธีใดสำหรับวิธีที่จะระงับการประเมินผลตัวถูกดำเนินการบางอย่าง แต่and
สามารถ (และต้อง) ทำเช่นนั้น
ผลที่ตามมาก็คือ and
ไม่สามารถโหลดได้มากเกินไปเช่นเดียวกับที่for
ไม่สามารถโอเวอร์โหลดได้ มันเป็นเรื่องทั่วไปอย่างสมบูรณ์และสื่อสารผ่านโปรโตคอลที่ระบุ สิ่งที่คุณสามารถทำได้คือปรับแต่งส่วนของโพรโทคอล แต่นั่นไม่ได้หมายความว่าคุณสามารถปรับเปลี่ยนพฤติกรรมของโพรโทคอลได้and
อย่างสมบูรณ์ โปรโตคอลคือ:
ลองนึกภาพ Python ตีความ "a และ b" (สิ่งนี้ไม่ได้เกิดขึ้นในลักษณะนี้ แต่ช่วยให้เข้าใจได้) เมื่อพูดถึง "และ" มันจะดูที่วัตถุที่เพิ่งประเมิน (a) และถามว่า: คุณจริงหรือไม่ ( ไม่ : คุณเป็นTrue
อย่างไร) หากคุณเป็นผู้แต่งชั้นเรียนคุณสามารถปรับแต่งคำตอบนี้ได้ ถ้าa
คำตอบ "ไม่" and
(ข้าม b อย่างสมบูรณ์จะไม่ได้รับการประเมินเลยและ) บอกว่า: a
คือผลลัพธ์ของฉัน ( ไม่ใช่ : เท็จคือผลลัพธ์ของฉัน)
ถ้าa
ไม่ตอบand
ให้ถามมันความยาวของคุณคืออะไร (อีกครั้งคุณสามารถปรับแต่งสิ่งนี้เป็นผู้เขียนของa
คลาส) ถ้าa
ตอบ 0and
ทำเช่นเดียวกันกับด้านบน - ถือว่าเป็นเท็จ ( ไม่ใช่เท็จ) ข้าม b และให้a
ผลลัพธ์
หากa
ตอบคำถามอื่นที่ไม่ใช่ 0 ถึงคำถามที่สอง ("ความยาวของคุณคืออะไร") หรือไม่ตอบเลยหรือตอบว่า "ใช่" กับคำถามแรก ("คุณเป็นคนจริง") and
ประเมินค่า b และ พูดว่า: b
คือผลลัพธ์ของฉัน โปรดทราบว่าจะไม่ถามb
คำถามใด ๆ
อีกวิธีหนึ่งในการพูดทั้งหมดนี้a and b
คือเกือบจะเหมือนกับb if a else a
ยกเว้น a ถูกประเมินเพียงครั้งเดียว
ทีนี้นั่งสักครู่ด้วยปากกาและกระดาษและโน้มน้าวตัวเองว่าเมื่อ {a, b} เป็นส่วนย่อยของ {True, False} มันทำงานได้อย่างที่คุณคาดหวังจากผู้ให้บริการบูลีน แต่ฉันหวังว่าฉันจะทำให้คุณมั่นใจว่ามันเป็นเรื่องทั่วไปมากขึ้นและอย่างที่คุณเห็นมันมีประโยชน์มากกว่านี้
นำสองสิ่งนี้มารวมกัน
ตอนนี้ฉันหวังว่าคุณจะเข้าใจตัวอย่างของคุณ 1 and
ไม่สนใจว่า mylist1 เป็นตัวเลขรายการแลมบ์ดาหรือวัตถุของคลาส Argmhbl เพียงแค่ใส่ใจกับคำตอบของ mylist1 สำหรับคำถามของโปรโตคอล และแน่นอน mylist1 ตอบคำถาม 5 ข้อเกี่ยวกับความยาวดังนั้นและส่งคืน mylist2 และนั่นคือมัน มันไม่มีส่วนเกี่ยวข้องกับองค์ประกอบของ mylist1 และ mylist2 - พวกเขาไม่ได้ป้อนรูปภาพทุกที่
ตัวอย่างที่สอง: &
เปิดlist
ในทางกลับกัน&
ผู้ประกอบการเหมือนคนอื่น ๆ เช่น+
เป็น มันสามารถกำหนดประเภทโดยการกำหนดวิธีการพิเศษในชั้นเรียนนั้น int
กำหนดเป็นบิต "และ" และบูลกำหนดเป็นตรรกะ "และ" แต่นั่นเป็นเพียงหนึ่งตัวเลือก: ยกตัวอย่างเช่นชุดและวัตถุอื่น ๆ เช่นมุมมองปุ่ม Dict กำหนดมันเป็นจุดตัดชุดlist
เพียงแค่ไม่ได้นิยามอาจเป็นเพราะกุยโดไม่ได้คิดวิธีการกำหนดที่ชัดเจน
numpy
ในอีกด้านหนึ่ง: -D อาร์เรย์ที่มีจำนวนมากเป็นพิเศษหรืออย่างน้อยก็พยายามเป็น แน่นอนว่า numpy.array เป็นเพียงคลาสมันไม่สามารถแทนที่ได้and
ในทางใดทางหนึ่งดังนั้นจึงทำสิ่งที่ดีที่สุดต่อไป: เมื่อถูกถามว่า "คุณจริงหรือไม่" numpy.array เพิ่ม ValueError โดยพูดว่า "โปรดใช้คำถามใหม่อีกครั้ง มุมมองของความจริงไม่สอดคล้องกับโมเดลของคุณ " (โปรดทราบว่าข้อความ ValueError ไม่ได้พูดถึงand
- เนื่องจาก numpy.array ไม่รู้ว่าใครกำลังถามคำถามมันแค่พูดถึงความจริงเท่านั้น)
สำหรับ&
มันเป็นเรื่องที่แตกต่างอย่างสิ้นเชิง numpy.array สามารถกำหนดได้ตามที่ต้องการและจะกำหนด&
อย่างสม่ำเสมอกับตัวดำเนินการอื่น ๆ : pointwise ดังนั้นในที่สุดคุณก็จะได้สิ่งที่คุณต้องการ
HTH,
np.bitwise_and()
และnp.logical_and()
และเพื่อน ๆ เพื่อหลีกเลี่ยงความสับสน