หากคุณต้องการการกลับบิต (inversion) ของ 16 บิตแรกของตัวเลข คุณสามารถทำ XOR ของตัวเลขนั้นกับ 65535 (16 บิต 1 ใน binary) ตัวอย่าง a = 3 # 11 ใน binary b = a ^ 65535 print(bin(b)) ผลลัพธ์ 0b1111111111111100
หากคุณต้องการการกลับบิต (inversion) ของ 16 บิตแรกของตัวเลข คุณสามารถทำ XOR ของตัวเลขนั้นกับ 65535 (16 บิต 1 ใน binary) ตัวอย่าง a = 3 # 11 ใน binary b = a ^ 65535 print(bin(b)) ผลลัพธ์ 0b1111111111111100
จากเอกสาร Python: ออเปอเรเตอร์ในกลุ่มเดียวกันผูกจากซ้ายไปขวา (ยกเว้นการเปรียบเทียบ) รวมถึงการทดสอบ ซึ่งทั้งหมดมี precedence เท่ากันและเชื่อมต่อจากซ้ายไปขวา — ดูส่วน Comparisons — และการยกกำลัง (exponentiation) ซึ่งกลุ่มจากขวาไปซ้าย) ดังนั้น ออเปอเรเตอร์ ** (exponentiation) ผูกติดจากขวาไปซ้าย (right
Reversed set operators คือออเปอเรเตอร์ที่ถูกกำหนดว่า: s & z corresponds to s.__and__(z) z & s corresponds to s.__rand__(z) ออเปอเรเตอร์เหล่านี้ไม่ค่อยมีความหมายในการดำเนินการทั่วไปอย่าง and, add, or เป็นต้น ของออบเจ็กต์ธรรมดา แต่ในกรณีของการสืบทอด (inheritance) reversed operations มีประโยชน
ไม่มีไวยากรณ์พิเศษ .. (dot dot) ใน Python คุณอาจเห็นมันในกรณีของการเข้าถึงคุณสมบัติของ float ตัวอย่างเช่น: f = 1..__truediv__ # หรือ 1..__div__ สำหรับ Python 2 print(f(8)) ผลลัพธ์: 0.125 สิ่งที่เรามีคือ float literal โดยไม่มีศูนย์ท้าย ซึ่งเราจึงเข้าถึงเมธอด __truediv__ ของมัน มันไม่ใช่ออเปอเรเตอร
หากคุณต้องการแปลงคำสั่งแบบ: if : ให้เป็นบรรทัดเดียว คุณสามารถใช้ไวยากรณ์ if บรรทัดเดียวได้: if : อีกวิธีหนึ่งคือการใช้ประโยชน์จาก short-circuiting ของออเปอเรเตอร์ and: and หาก เป็น False short-circuiting จะทำงานและด้านขวาจะไม่ถูกประเมินค่า หาก เป็น True ด้านขวาจะถูกประเมินค่าและ จะถูกปร
ออเปอเรเตอร์ in ทำงานช้ามากในลิสต์ (List) ซึ่งเป็น O(n) เนื่องจากต้องวนลูปผ่านทั้งลิสต์ คุณสามารถใช้เซต (Set) หรือดิกชันนารี (Dict) ซึ่งเป็นโครงสร้างข้อมูลแบบแฮช (hashed data structures) ที่ค้นหาได้เร็วมาก เพื่อให้ได้ผลลัพธ์เดียวกันในเวลา ~O(1)! แต่สิ่งนี้ก็ขึ้นอยู่กับประเภทของโครงสร้างข้อมูลที่คุณ
สำหรับนิพจน์แบบ: a == b ตัวแปลภาษา Python จะค้นหาเมธอด __eq__() บนออบเจ็กต์ a ก่อน หากพบ จะเรียกใช้เมธอดนั้นด้วยอาร์กิวเมนต์ b คือ a.__eq__(b) หากเมธอดนี้คืนค่า NotImplemented ตัวแปลภาษาจะลองทำในทางตรงข้าม คือ เรียก: b.__eq__(a)
ออเปอเรเตอร์ ternary ไม่สามารถโอเวอร์โหลดได้ แตคุณสามารถห่อหุ้มมันใน lambda/function แล้วใช้งานได้ ตัวอย่าง result = lambda x: 1 if x < 3 else 10 print(result(2)) print(result(1000)) ผลลัพธ์ 1 10
คุณสามารถใช้เงื่อนไขหลายอย่างร่วมกันในคำสั่ง if ได้ เงื่อนไขทั้งหมดต้องถูกกำหนดโดยใช้ตรรกะบางอย่าง ตัวเช่น เพื่อตรวจสอบว่าเลขหนึ่งหารด้วย 3 และ 5 ลงตัวหรือไม่ สามารถทำได้ดังนี้: ตัวอย่าง a = 15 if a % 3 == 0: if a % 5 == 0: print(Divisible by both) ผลลัพธ์ Divisible by both ตัวอย่าง ค
นี่คือขั้นตอนบางอย่างที่คุณสามารถทำตามเพื่อเพิ่มประสิทธิภาพคำสั่ง if...elif...else แบบซ้อนกัน: จัดลำดับเส้นทางที่ใช้บ่อยที่สุดไว้ด้านบน - เรื่องนี้ทำให้ไม่ต้องตรวจสอบเงื่อนไขหลายอย่างในเส้นทางที่รันบ่อยที่สุด จัดเรียงเส้นทางตามความถี่ในการใช้งาน - วางเงื่อนไขตามลำดับการใช้งานมากไปน้อย
มีหลายวิธีในการจัดรูปแบบเงื่อนไข if หลายเงื่อนไข คุณไม่จำเป็นต้องใช้เว้นวรรค 4 ช่องในบรรทัดที่สองของเงื่อนไข ดังนั้นคุณสามารถทำได้แบบนี้: if (cond1 == val1 and cond2 == val2 and cond3 == val3 and cond4 == val4): # โค้ดจริง คุณยังสามารถเริ่มเงื่อนไขจากบรรทัดถัดไปได้: if ( cond1 == val
คุณสามารถเปรียบเทียบตัวแปร 2 ตัวในคำสั่ง if โดยใช้ออเปอเรเตอร์ == ตัวอย่าง a = 10 b = 15 if a == b: print(Equal) else: print(Not equal) ผลลัพธ์ Not equal คุณยังสามารถใช้ออเปอเรเตอร์ is ได้อีกด้วย ตัวอย่าง a = Hello b = a if a is b: print(Equal) else: print(Not equal) ผลลัพธ์ Equ
นี่คือข้อผิดพลาดในการเขียนโปรแกรม Python ที่พบบ่อยที่สุดหรือ Gotchas ที่นักเขียนโปรแกรมมักทำ: การค้นหาชื่อในขอบเขต (Scope Name Lookups) - Python ปฏิบัติตามกฎขอบเขตตามลำดับ LEGB (Local, Enclosing, Global, Built-in) เนื่องจาก Python ไม่มีการผูกประเภทข้อมูลอย่างเคร่งครัด นักเขียนโปรแกรมจึงสามารถก
นี่คือข้อผิดพลาดในการเขียนโปรแกรม Python ที่พบบ่อยที่สุดหรือ Gotchas ที่นักเขียนโปรแกรมมักทำ: การค้นหาชื่อในขอบเขต (Scope Name Lookups) Python ปฏิบัติตามกฎขอบเขต (scoping rules) ตามลำดับ LEGB (Local, Enclosing, Global, Built-in) เนื่องจาก Python ไม่มีการผูกประเภทข้อมูลอย่างเคร่งครัด (no strict type
คุณสามารถทำได้โดยตรงหากคุณครอบเงื่อนไข multiline if statements ด้วยวงเล็บ ตัวอย่างเช่น if (cond1 == val1 and cond2 == val2 and # Some comment cond3 == val3 and # Some comment cond4 == val4): อย่างไรก็ตาม ทำไม่ได้หากพยายามทำโดยไม่มีวงเล็บ ตัวอย่างเช่น โค้ดต่อไปนี้จะให้ error: if cond1 ==
คุณสามารถวาง comment ได้ที่ไหนก็ได้ใน if...elif...else statement เช่น ก่อนบล็อกแต่ละบล็อก หรือภายในบล็อกแต่ละบล็อก โปรดทราบว่าไม่สามารถวาง multiline comments ก่อน elif และ else ได้ เนื่องจาก comments เหล่านี้เป็น strings จริงๆ ซึ่งหมายถึงการหยุดชะงักของทั้ง construct ตัวอย่างเช่น # If check if True:
มีหลายวิธีในการใช้ if-else construct ใน command line ของ Python ตัวอย่างเช่น bash รองรับ multiline statements ซึ่งใช้ได้ดังนี้: จะได้ผลลัพธ์: a is true หากต้องการให้คำสั่ง Python อยู่บรรทัดเดียว สามารถใช้ \n newline ระหว่างคำสั่งได้ ตัวอย่างเช่น $ python -c $a = True\nif a: print(a is true); จะได้
Python มี 2 วิธีในการเขียน inline if statements: if condition: statement s1 if condition else s2 โปรดทราบว่า type ที่ 2 ไม่สามารถใช้โดยไม่มี else ได้ ตอนนี้คุณสามารถใช้ inline ใน print statement ได้ ตัวอย่างเช่น a = True if a: print(Hello) จะได้ผลลัพธ์: Hello a = False print(True if a else False)
วิธีที่ตรงไปตรงมาที่สุดคือใช้ external iterator เพื่อติดตามดัชนี หมายเหตุว่าคำตอบนี้พิจารณาว่าคุณวนลูปบนลิสต์ที่มีขนาดเท่ากัน ตัวอย่าง a = [10, 12, 14, 16, 18] b = [10, 8, 6, 4, 2] for i in range(len(a)): print(a[i] + b[i]) ผลลัพธ์ จะได้ผลลัพธ์ดังนี้ 20 20 20 20 20 ตัวอย่าง คุณยังสามารถใช้เมธอด
มีหลายวิธีในการใช้คำสั่งหลายบรรทัดใน command line ของ Python ตัวอย่างเช่น bash รองรับ multiline statements ซึ่งใช้ได้ดังนี้ ตัวอย่าง ผลลัพธ์ จะได้ผลลัพธ์ดังนี้ a is true หากต้องการให้คำสั่ง Python อยู่บรรทัดเดียว สามารถใช้ \n newline ระหว่างคำสั่งได้ ตัวอย่าง $ python -c $a = True\nif a: print(a i