ฟังก์ชั่นหลาม
ฟังก์ชั่นเป็นองค์กรที่ดีนำมาใช้ใหม่ที่ใช้ในการบรรลุส่วนของรหัสเดียวหรือฟังก์ชั่นที่เกี่ยวข้อง
ฟังก์ชั่นสามารถนำไปใช้ในการปรับปรุงต้นแบบและนำมาใช้รหัส คุณรู้อยู่แล้วว่างูใหญ่ให้ในตัวฟังก์ชั่นเป็นจำนวนมากเช่นการพิมพ์ () แต่คุณยังสามารถสร้างฟังก์ชั่นของคุณเองซึ่งเรียกว่าฟังก์ชั่นที่ผู้ใช้กำหนด
กำหนดฟังก์ชัน
คุณสามารถกำหนดฟังก์ชั่นจากฟังก์ชั่นที่คุณต้องการกฎง่ายๆต่อไปนี้:
- def คำหลักฟังก์ชั่นบล็อกในการเริ่มต้นตามด้วยชื่อฟังก์ชั่นและตัวบ่งชี้ในวงเล็บ ()
- พารามิเตอร์ใด ๆ ที่เข้ามาและการขัดแย้งจะต้องอยู่ในวงเล็บที่อยู่ตรงกลาง มันสามารถนำมาใช้ในการกำหนดค่าพารามิเตอร์ระหว่างวงเล็บ
- บรรทัดแรกของคำสั่งฟังก์ชั่นสามารถเลือกที่จะใช้เอกสารสตริง - ใช้สำหรับคำอธิบายฟังก์ชั่น
- เนื้อหาฟังก์ชั่นเริ่มต้นด้วยลำไส้ใหญ่และเยื้อง
- กลับปลาย [การแสดงออก] ของฟังก์ชั่นเลือกที่จะกลับมาเป็นมูลค่าให้กับผู้ที่โทรมา กลับมาโดยไม่ต้องเทียบเท่าแสดงออกเพื่อกลับไม่มี
ไวยากรณ์
def functionname( parameters ): "函数_文档字符串" function_suite return [expression]
โดยค่าเริ่มต้นชื่อพารามิเตอร์และค่าพารามิเตอร์ที่อยู่ในลำดับที่กำหนดไว้ในประกาศฟังก์ชันตรง
ตัวอย่าง
ต่อไปนี้เป็นฟังก์ชั่นหลามง่ายผ่านมันสตริงเป็นพารามิเตอร์แล้วพิมพ์ไปยังอุปกรณ์แสดงผลมาตรฐาน
def printme( str ): "打印传入的字符串到标准显示设备上" print str return
เรียกใช้ฟังก์ชัน
กำหนดฟังก์ชั่นเท่านั้นที่ชื่อฟังก์ชั่นระบุพารามิเตอร์และโครงสร้างการป้องกันรหัสที่มีฟังก์ชั่น
หลังจากเสร็จสิ้นการโครงสร้างพื้นฐานของฟังก์ชั่นนี้คุณสามารถดำเนินการเรียกใช้ฟังก์ชันอื่นที่จะดำเนินการได้โดยตรงจากหน้าจอพร้อมรับคำหลาม
ตัวอย่างต่อไปนี้จะเรียกว่า printMe () ฟังก์ชัน:
#!/usr/bin/python # -*- coding: UTF-8 -*- # 定义函数 def printme( str ): "打印任何传入的字符串" print str; return; # 调用函数 printme("我要调用用户自定义函数!"); printme("再次调用同一函数");
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
我要调用用户自定义函数! 再次调用同一函数
พารามิเตอร์ผ่านค่าและส่งผ่านพารามิเตอร์โดยการอ้างอิง
พารามิเตอร์ทั้งหมด (อาร์กิวเมนต์) ในหลามจะถูกส่งผ่านโดยการอ้างอิง ถ้าคุณเปลี่ยนพารามิเตอร์ในการทำงานแล้วฟังก์ชั่นนี้จะเรียกว่าฟังก์ชั่นพารามิเตอร์เดิมที่มีการเปลี่ยนแปลงยัง ตัวอย่างเช่น:
#!/usr/bin/python # -*- coding: UTF-8 -*- # 可写函数说明 def changeme( mylist ): "修改传入的列表" mylist.append([1,2,3,4]); print "函数内取值: ", mylist return # 调用changeme函数 mylist = [10,20,30]; changeme( mylist ); print "函数外取值: ", mylist
และผ่านเข้าสู่ฟังก์ชั่นของวัตถุที่สิ้นสุดในการเพิ่มเนื้อหาใหม่โดยใช้การอ้างอิงเดียวกัน ดังนั้นผลการส่งออกมีดังนี้
函数内取值: [10, 20, 30, [1, 2, 3, 4]] 函数外取值: [10, 20, 30, [1, 2, 3, 4]]
พารามิเตอร์
ต่อไปนี้เป็นพารามิเตอร์ชนิดอย่างเป็นทางการสามารถนำมาใช้เมื่อเรียกฟังก์ชั่น:
- พารามิเตอร์บังคับ
- ข้อโต้แย้งคำหลัก
- พารามิเตอร์เริ่มต้น
- ตัวแปรที่มีความยาว
พารามิเตอร์บังคับ
พารามิเตอร์บังคับที่จะส่งผ่านไปยังฟังก์ชั่นในลำดับที่ถูกต้อง เมื่อจำนวนของสายและจะต้องมีการประกาศเดียวกัน
โทร printMe () ฟังก์ชันคุณต้องผ่านในพารามิเตอร์หรือไวยากรณ์ผิดพลาดที่จะเกิดขึ้น:
#!/usr/bin/python # -*- coding: UTF-8 -*- #可写函数说明 def printme( str ): "打印任何传入的字符串" print str; return; #调用printme函数 printme();
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
Traceback (most recent call last): File "test.py", line 11, in <module> printme(); TypeError: printme() takes exactly 1 argument (0 given)
ข้อโต้แย้งคำหลัก
ข้อโต้แย้งคำหลักและสายงานสายงานความสัมพันธ์ใกล้ชิดใช้อาร์กิวเมนต์คำหลักในการกำหนดค่าของพารามิเตอร์ที่ผ่านมา
เมื่อใช้พารามิเตอร์คำหลักช่วยให้พารามิเตอร์ฟังก์ชั่นเพื่อการโทรที่ไม่สอดคล้องกับคำสั่งเพราะงูหลามล่ามที่มีความสามารถในการจับคู่ค่าพารามิเตอร์โดยใช้ชื่อพารามิเตอร์
ฟังก์ชั่น printMe ตัวอย่างต่อไปนี้ () จะเรียกว่ามีชื่อพารามิเตอร์:
#!/usr/bin/python # -*- coding: UTF-8 -*- #可写函数说明 def printme( str ): "打印任何传入的字符串" print str; return; #调用printme函数 printme( str = "My string");
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
My string
ตัวอย่างต่อไปนี้สามารถสั่งซื้อโต้แย้งคำหลักไม่ได้แสดงให้เห็นอย่างชัดเจนที่สำคัญอื่น ๆ :
#!/usr/bin/python # -*- coding: UTF-8 -*- #可写函数说明 def printinfo( name, age ): "打印任何传入的字符串" print "Name: ", name; print "Age ", age; return; #调用printinfo函数 printinfo( age=50, name="miki" );
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
Name: miki Age 50
พารามิเตอร์เริ่มต้น
เมื่อฟังก์ชั่นที่เรียกว่าค่าเริ่มต้นถ้าพารามิเตอร์ไม่ผ่านค่าเริ่มต้นคือการพิจารณา โดยค่าเริ่มต้นพิมพ์การประชุมปกติอายุถ้าอายุไม่ผ่าน:
#!/usr/bin/python # -*- coding: UTF-8 -*- #可写函数说明 def printinfo( name, age = 35 ): "打印任何传入的字符串" print "Name: ", name; print "Age ", age; return; #调用printinfo函数 printinfo( age=50, name="miki" ); printinfo( name="miki" );
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
Name: miki Age 50 Name: miki Age 35
ตัวแปรที่มีความยาว
คุณอาจต้องฟังก์ชั่นที่สามารถจัดการมากขึ้นกว่าเดิมประกาศของพารามิเตอร์ พารามิเตอร์เหล่านี้จะเรียกว่าพารามิเตอร์ยาวตัวแปรและทั้งสองประเภทของพารามิเตอร์จะแตกต่างกันไม่ได้ตั้งชื่อประกาศ ไวยากรณ์พื้นฐานจะเป็นดังนี้:
def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression]
ที่มีเครื่องหมายดอกจัน (*) จะถูกเก็บไว้ในชื่อตัวแปรตัวแปรทั้งหมดที่ไม่มีชื่อ พารามิเตอร์ผ่านอาจจะมีทางเลือกน้อย ตัวอย่างต่อไปนี้:
#!/usr/bin/python # -*- coding: UTF-8 -*- # 可写函数说明 def printinfo( arg1, *vartuple ): "打印任何传入的参数" print "输出: " print arg1 for var in vartuple: print var return; # 调用printinfo 函数 printinfo( 10 ); printinfo( 70, 60, 50 );
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
输出: 10 输出: 70 60 50
ฟังก์ชั่นที่ไม่ระบุชื่อ
หลามใช้แลมบ์ดาเพื่อสร้างฟังก์ชั่นที่ไม่ระบุชื่อ
- เพียงแค่การแสดงออกแลมบ์ดา, ร่างกายของฟังก์ชั่นง่ายกว่า def
- ร่างกายคือการแสดงออกแลมบ์ดามากกว่าบล็อกของรหัส เราสามารถจัดแพคเกจตรรกะ จำกัด ลงในการแสดงออกแลมบ์ดา
- ฟังก์ชั่นแลมบ์ดามี namespace ของตัวเองและไม่สามารถเข้าถึงนอกรายการอาร์กิวเมนต์ของตัวเองหรือพารามิเตอร์ namespace โลก
- แม้ว่าฟังก์ชั่นแลมบ์ดาดูเพียงเขียนบรรทัดเดียว แต่ไม่ได้เช่นเดียวกับฟังก์ชั่นแบบอินไลน์ใน C หรือ C ++ วัตถุประสงค์หลังไม่ครอบครองเมื่อการเรียกฟังก์ชันหน่วยความจำสแต็คขนาดเล็กเพื่อเพิ่มประสิทธิภาพการดำเนินงาน
ไวยากรณ์
แลมบ์ดาไวยากรณ์ฟังก์ชั่นที่มีเพียงคำสั่งอย่างใดอย่างหนึ่งดังต่อไปนี้:
lambda [arg1 [,arg2,.....argn]]:expression
ตัวอย่างต่อไปนี้:
#!/usr/bin/python # -*- coding: UTF-8 -*- # 可写函数说明 sum = lambda arg1, arg2: arg1 + arg2; # 调用sum函数 print "相加后的值为 : ", sum( 10, 20 ) print "相加后的值为 : ", sum( 20, 20 )
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
相加后的值为 : 30 相加后的值为 : 40
คำสั่งกลับ
ผลตอบแทนงบ [การแสดงออก] เพื่อออกจากฟังก์ชั่นการคัดเลือกไปยังผู้โทรจะส่งกลับแสดงออก คำสั่งกลับมีพารามิเตอร์ไม่มีผลตอบแทนที่ไม่มี ไม่มีตัวอย่างก่อนหน้านี้แสดงให้เห็นถึงวิธีการที่จะคืนค่าตัวอย่างต่อไปนี้จะแสดงให้คุณวิธีการที่จะทำมัน
#!/usr/bin/python # -*- coding: UTF-8 -*- # 可写函数说明 def sum( arg1, arg2 ): # 返回2个参数的和." total = arg1 + arg2 print "函数内 : ", total return total; # 调用sum函数 total = sum( 10, 20 );
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
函数内 : 30
ขอบเขตตัวแปร
ตัวแปรทั้งหมดในโปรแกรมซึ่งไม่ได้เป็นตำแหน่งที่สามารถเข้าถึงได้ การเข้าถึงขึ้นอยู่กับที่ตัวแปรที่ได้รับมอบหมาย
- ตัวแปรทั่วโลก
- ตัวแปรท้องถิ่น
ตัวแปรระดับโลกและระดับท้องถิ่น
ความหมายของฟังก์ชั่นของตัวแปรภายในมีขอบเขตในท้องถิ่นตามที่กำหนดไว้ในฟังก์ชั่นด้านนอกมีขอบเขตทั่วโลก
ตัวแปรท้องถิ่นเท่านั้นที่สามารถประกาศภายในฟังก์ชันการเข้าถึงไปยังตัวแปรทั่วโลกสามารถเข้าถึงได้ตลอดขั้นตอน เมื่อคุณเรียกใช้ฟังก์ชันทั้งหมดชื่อตัวแปรในการประกาศฟังก์ชั่นจะถูกเพิ่มในขอบเขต ตัวอย่างต่อไปนี้:
#!/usr/bin/python # -*- coding: UTF-8 -*- total = 0; # 这是一个全局变量 # 可写函数说明 def sum( arg1, arg2 ): #返回2个参数的和." total = arg1 + arg2; # total在这里是局部变量. print "函数内是局部变量 : ", total return total; #调用sum函数 sum( 10, 20 ); print "函数外是全局变量 : ", total
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
函数内是局部变量 : 30 函数外是全局变量 : 0