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

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

30
var functionName = function () {} vs function functionName () {}
ฉันเพิ่งเริ่มรักษารหัส JavaScript ของคนอื่น ฉันแก้ไขข้อบกพร่องเพิ่มคุณสมบัติและพยายามจัดระเบียบโค้ดและทำให้สอดคล้องกันมากขึ้น ผู้พัฒนาก่อนหน้านี้ใช้การประกาศฟังก์ชั่นสองวิธีและฉันไม่สามารถทำงานได้หากมีเหตุผลที่อยู่เบื้องหลังหรือไม่ สองวิธีคือ: var functionOne = function() { // Some code }; function functionTwo() { // Some code } อะไรคือสาเหตุของการใช้ทั้งสองวิธีที่แตกต่างกันและข้อดีและข้อเสียของแต่ละวิธีคืออะไร มีสิ่งใดบ้างที่สามารถทำได้ด้วยวิธีการหนึ่งที่ไม่สามารถทำได้ด้วยวิธีอื่น

30
จะทำอย่างไรถ้า __name__ ==“ __main__”: ทำอย่างไร
ตั้งค่าไว้ที่นี่แล้วStack Overflow нарусском : Чтоделаютถ้า __name__ ==“ __main__”? รับรหัสต่อไปนี้สิ่งที่จะif __name__ == "__main__":ทำอย่างไร # Threading example import time, thread def myfunction(string, sleeptime, lock, *args): while True: lock.acquire() time.sleep(sleeptime) lock.release() time.sleep(sleeptime) if __name__ == "__main__": lock = thread.allocate_lock() thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock)) thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))

10
วิธีการใช้รูปแบบวิธีการจากโรงงานใน C ++ อย่างถูกต้อง
มีสิ่งหนึ่งใน C ++ ที่ทำให้ฉันรู้สึกไม่สบายตัวเป็นเวลานานเพราะฉันไม่รู้วิธีการทำอย่างสุจริตแม้ว่ามันจะฟังดูง่าย: ฉันจะใช้วิธีการโรงงานใน C ++ ได้อย่างถูกต้องได้อย่างไร เป้าหมาย: เพื่อให้ลูกค้าสามารถสร้างอินสแตนซ์ของวัตถุโดยใช้วิธีการจากโรงงานแทนตัวสร้างของวัตถุโดยไม่มีผลกระทบที่ยอมรับไม่ได้และประสิทธิภาพในการทำงาน โดย "รูปแบบวิธีการของโรงงาน" ฉันหมายถึงทั้งวิธีคงที่จากโรงงานภายในวัตถุหรือวิธีที่กำหนดไว้ในคลาสอื่นหรือฟังก์ชั่นระดับโลก เพียงแค่โดยทั่วไป "แนวคิดของการเปลี่ยนเส้นทางวิธีปกติของการสร้างอินสแตนซ์ของคลาส X ไปที่อื่นนอกเหนือจากตัวสร้าง" ให้ฉันอ่านคำตอบที่เป็นไปได้ที่ฉันคิด 0) อย่าสร้างโรงงานสร้างสิ่งก่อสร้าง สิ่งนี้ฟังดูดี (และมักจะเป็นทางออกที่ดีที่สุด) แต่ไม่ใช่วิธีการรักษาทั่วไป ประการแรกมีกรณีที่การก่อสร้างวัตถุเป็นงานที่ซับซ้อนพอที่จะพิสูจน์การแยกไปยังชั้นอื่น แต่ถึงกระนั้นก็ยังมีการวางความจริงนั้นไว้แม้กระทั่งสำหรับวัตถุอย่างง่ายที่ใช้เพียงแค่ตัวสร้างมักจะไม่ทำ ตัวอย่างที่ง่ายที่สุดที่ฉันรู้คือคลาสเวกเตอร์ 2 มิติ เรียบง่าย แต่ซับซ้อน ฉันต้องการสร้างมันทั้งจากพิกัดคาร์ทีเซียนและขั้ว เห็นได้ชัดว่าฉันไม่สามารถทำ: struct Vec2 { Vec2(float x, float y); Vec2(float angle, float magnitude); // not a valid overload! // ... …

16
รับรหัสที่สอดคล้องกับค่าต่ำสุดภายในพจนานุกรม
หากฉันมีพจนานุกรม Python ฉันจะรับกุญแจไปยังรายการที่มีค่าต่ำสุดได้อย่างไร ฉันคิดว่าจะทำอะไรกับmin()ฟังก์ชั่น ... รับอินพุต: {320:1, 321:0, 322:3} 321มันจะกลับมา

9
ฉันจะวนซ้ำแผนที่ C ++ ของแผนที่ได้อย่างไร
ฉันจะวนซ้ำstd::mapใน C ++ ได้อย่างไร แผนที่ของฉันถูกกำหนดเป็น: std::map< std::string, std::map<std::string, std::string> > ตัวอย่างเช่นคอนเทนเนอร์ด้านบนเก็บข้อมูลดังนี้: m["name1"]["value1"] = "data1"; m["name1"]["value2"] = "data2"; m["name2"]["value1"] = "data1"; m["name2"]["value2"] = "data2"; m["name3"]["value1"] = "data1"; m["name3"]["value2"] = "data2"; ฉันจะวนลูปผ่านแผนที่นี้และเข้าถึงค่าต่างๆได้อย่างไร?

23
Python idiom เพื่อส่งคืนไอเท็มแรกหรือไม่มี
ฉันแน่ใจว่ามีวิธีที่ง่ายกว่าในการทำเช่นนี้ซึ่งไม่ได้เกิดขึ้นกับฉัน ฉันกำลังเรียกวิธีการมากมายที่ส่งคืนรายการ รายการอาจว่างเปล่า หากรายการไม่ว่างฉันต้องการส่งคืนรายการแรก; มิฉะนั้นฉันต้องการคืนค่าไม่มี รหัสนี้ใช้งานได้: my_list = get_list() if len(my_list) > 0: return my_list[0] return None สำหรับฉันแล้วดูเหมือนว่าควรมีสำนวนแบบบรรทัดเดียวที่เรียบง่ายสำหรับการทำสิ่งนี้ แต่สำหรับชีวิตของฉันฉันไม่สามารถคิดได้ มีอะไรบ้าง แก้ไข: เหตุผลที่ฉันกำลังมองหานิพจน์บรรทัดเดียวที่นี่ไม่ใช่ว่าฉันชอบรหัสตัวอักษรที่เหลือเชื่อ แต่เพราะฉันต้องเขียนโค้ดจำนวนมากเช่นนี้: x = get_first_list() if x: # do something with x[0] # inevitably forget the [0] part, and have a bug to fix y = get_second_list() if y: …

30
ฉันจะย้อนกลับอาร์เรย์ int ใน Java ได้อย่างไร
Наэтотвопросестьответына กองมากเกินнарусском : КакперевернутьмассиввДжаве? ฉันพยายามที่จะย้อนกลับอาร์เรย์ int ใน Java วิธีนี้จะไม่ย้อนกลับอาร์เรย์ for(int i = 0; i < validData.length; i++) { int temp = validData[i]; validData[i] = validData[validData.length - i - 1]; validData[validData.length - i - 1] = temp; } มีอะไรผิดปกติกับมัน?
238 java  arrays  idioms  idiomatic 

21
วิธีการ pythonic ในการตรวจสอบองค์ประกอบสุดท้ายในวง 'for' คืออะไร?
ฉันต้องการทราบวิธีที่ดีที่สุด (ขนาดกะทัดรัดและวิธี "pythonic") เพื่อทำการดูแลเป็นพิเศษสำหรับองค์ประกอบสุดท้ายในการวนรอบ มีชิ้นส่วนของรหัสที่ควรเรียกระหว่างองค์ประกอบเท่านั้นถูกระงับในสุดท้าย นี่คือวิธีที่ฉันทำในปัจจุบัน: for i, data in enumerate(data_list): code_that_is_done_for_every_element if i != len(data_list) - 1: code_that_is_done_between_elements มีวิธีที่ดีกว่านี้ไหม? หมายเหตุ: ฉันไม่ต้องการที่จะทำให้มันมี hacks reduceเช่นการใช้;)

16
Python: วิธีที่ไม่มีการแปลงเป็นสตริงที่ว่างเปล่า?
วิธีการทำตามสำนวนที่เป็นไปได้มากที่สุด def xstr(s): if s is None: return '' else: return s s = xstr(a) + xstr(b) อัปเดต:ฉันกำลังรวมข้อเสนอแนะของ Tryptich ในการใช้ str (s) ซึ่งทำให้รูทีนนี้ทำงานได้สำหรับประเภทอื่น ๆ นอกเหนือจากสตริง ฉันประทับใจมากกับคำแนะนำแลมบ์ดาของ Vinay Sajip แต่ฉันต้องการให้โค้ดของฉันค่อนข้างเรียบง่าย def xstr(s): if s is None: return '' else: return str(s)
156 string  python  idioms 



9
คู่จากรายการเดียว
บ่อยครั้งที่ฉันพบว่าจำเป็นต้องประมวลผลรายการทีละคู่ ฉันสงสัยว่าวิธีใดจะเป็นวิธีที่มีประสิทธิภาพและมีประสิทธิภาพและพบสิ่งนี้ใน Google pairs = zip(t[::2], t[1::2]) ฉันคิดว่านั่นเพียงพอแล้ว แต่หลังจากการสนทนาล่าสุดเกี่ยวกับสำนวนเทียบกับประสิทธิภาพฉันตัดสินใจทำการทดสอบบางอย่าง: import time from itertools import islice, izip def pairs_1(t): return zip(t[::2], t[1::2]) def pairs_2(t): return izip(t[::2], t[1::2]) def pairs_3(t): return izip(islice(t,None,None,2), islice(t,1,None,2)) A = range(10000) B = xrange(len(A)) def pairs_4(t): # ignore value of t! t = B return izip(islice(t,None,None,2), islice(t,1,None,2)) …
101 python  list  zip  slice  idioms 

10
ʻif key ใน dict` เทียบกับ `try / except` - สำนวนไหนอ่านง่ายกว่ากัน?
ฉันมีคำถามเกี่ยวกับสำนวนและความสามารถในการอ่านและดูเหมือนว่าจะมีการปะทะกันของปรัชญา Python สำหรับกรณีนี้: ฉันต้องการสร้างพจนานุกรม A จากพจนานุกรม B หากไม่มีคีย์เฉพาะใน B ให้ทำอะไรแล้วดำเนินการต่อ ทางไหนดีกว่ากัน? try: A["blah"] = B["blah"] except KeyError: pass หรือ if "blah" in B: A["blah"] = B["blah"] "ทำและขอการอภัย" เทียบกับ "ความเรียบง่ายและชัดเจน" ไหนดีกว่ากันและทำไม?

3
การต่อสตริงกับ Groovy
วิธีที่ดีที่สุด (สำนวน) ในการต่อสตริงใน Groovy คืออะไร ตัวเลือกที่ 1: calculateAccountNumber(bank, branch, checkDigit, account) { bank + branch + checkDigit + account } ทางเลือกที่ 2: calculateAccountNumber(bank, branch, checkDigit, account) { "$bank$branch$checkDigit$account" } ฉันได้พบประเด็นที่น่าสนใจเกี่ยวกับหัวข้อนี้ในเว็บไซต์ Groovy เก่า: สิ่งที่คุณทำได้ แต่ดีกว่าปล่อยให้เลิกทำ เช่นเดียวกับใน Java คุณสามารถเชื่อมสตริงที่มีสัญลักษณ์ "+" เข้าด้วยกัน แต่ Java ต้องการให้หนึ่งในสองรายการของนิพจน์ "+" เป็น String ไม่ว่าจะอยู่ในตำแหน่งแรกหรือรายการสุดท้ายก็ตาม Java จะใช้เมธอด toString () …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.