Tags:
Forums: 

def test(a):
    return(a)

def test(a, b):
    return(a*b)

เรียก test(5) แล้วมันบอก args ไม่พอ แต่เรียก test(3, 5) แล้วได้แฮะ

อีกเรื่องครับ เราจะเช็คประสิทธิภาพ code ได้ยังไงครับ?
เช่นผมมีวิธีเขียน function gcd อยู่ 3 แบบ (recursive, วน loop, แยกตัวประกอบ)
อยากรู้ว่าแบบไหนดีที่สุดต้องเอาอะไรไปตรวจสอบครับ?

Get latest news from Blognone
By: rattananen
AndroidWindows
on 30 November 2010 - 09:33 #236327

ถ้าอยากได้ program ที่มีประสิทธิภาพให้หลีกเลียงการใช้ recursive ครับ
ถึงมันจะดูเท่กว่า loop ธรรมดาก็เถอะ

ส่วนวีธีเช็คประสิทธิภาพ ผมคิดว่า Python น่าจะมี function get เวลาระดับ microsecond นะ
get เวลาก่อน execute function
get เวลาหลัง execute function
เอา (หลัง-ก่อน)*1000 จะได้ความเร็วของการ execute ครั้งนั้น หน่วยเป็น millisecond

ผมไม่รู้ syntax, function ของ Python เลยตอบได้เท่านี้ล่ะครับ

By: neizod
ContributorTraineeIn Love
on 30 November 2010 - 17:14 #236541 Reply to:236327
neizod's picture

อ้าว เราก็หลงใช้ recursive มาตลอด ^^"

ค้นๆ ดูแล้วเจอ time.clock() ครับ เดี๋ยวจะลองใช้ดูตามที่ว่า
ขอบคุณครับ

By: ZetaSolid
Windows PhoneSymbianUbuntuWindows
on 30 November 2010 - 20:13 #236604 Reply to:236327
ZetaSolid's picture

แล้วแต่สถานการณ์ หรือเปล่าครับ ว่าจะเขียนอะไร
Recursive จริงๆ ก็ไม่ได้เลวร้ายนะครับ โดย
เฉพาะ divide and conquer อาธิเช่น
quick sort จะเขียน ด้วย for-loop กับ
stack มันก็ไม่เวิร์คเท่า recursive ปะครับ

By: lew
FounderJusci's WriterMEconomicsAndroid
on 30 November 2010 - 20:15 #236605 Reply to:236327
lew's picture

psyco ช่วยได้ครับ โดยเฉพาะพวก recursive นี่ถูกลงไปมหาศาล


lewcpe.com, @wasonliw

By: Wai on 30 November 2010 - 22:33 #236660 Reply to:236327

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

By: adente
ContributorSUSESymbianWindows
on 30 November 2010 - 09:50 #236345
adente's picture

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

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 30 November 2010 - 17:09 #236536 Reply to:236345
PaPaSEK's picture

เอ่อ...

เข้าใจ Method Overloading มั้ยครับ

By: adente
ContributorSUSESymbianWindows
on 30 November 2010 - 20:30 #236608 Reply to:236536
adente's picture

เข้าใจดีครับ เรื่องนี้ เพียงแต่ไม่แน่ใจว่า python มันรองรับหรือเปล่านะครับ
อีกอย่างผมไม่ได้อ่านหัวข้อให้ดีเองว่าเขาถามอะไร :P

By: lexurous on 30 November 2010 - 09:52 #236347
lexurous's picture

เข้าใจว่า python ไม่ต้องใช้ function overloading เพราะว่าเป็น dynamic type และยังมี *args, **kwargs ให้ใช้อีก

By: darktong
ContributorAndroidUbuntu
on 30 November 2010 - 11:51 #236432

python ไม่มี overloading แต่เราเขียนแบบนี้ก็ได้ครับ


def test(a=1, b=1):
    return a*b

>>> test(5)
5
>>> test(3, 5)
15

By: neizod
ContributorTraineeIn Love
on 30 November 2010 - 16:27 #236523 Reply to:236432
neizod's picture

กระจ่างเลยครับ ขอบคุณครับ ^__^

By: kowito
Android
on 1 December 2010 - 01:52 #236712
def python_overload(argument):
    if isinstance(argument,int):
        return type(argument)
    elif isinstance(argument,str):
        return type(argument)
By: อุ๊บะอันตะอู้
Windows PhoneAndroidSymbianUbuntu
on 24 July 2011 - 20:33 #314404 Reply to:236712
อุ๊บะอันตะอู้'s picture

+1

แต่คงใช้เฉพาะพวกใน้ python foundation มั้ง