ฟังก์ชั่น Python3
ฟังก์ชั่นเป็นองค์กรที่ดีนำมาใช้ใหม่ที่ใช้ในการบรรลุส่วนของรหัสเดียวหรือฟังก์ชั่นที่เกี่ยวข้อง
ฟังก์ชั่นสามารถนำไปใช้ในการปรับปรุงต้นแบบและนำมาใช้รหัส คุณรู้อยู่แล้วว่างูใหญ่ให้ในตัวฟังก์ชั่นเป็นจำนวนมากเช่นการพิมพ์ () แต่คุณยังสามารถสร้างฟังก์ชั่นของคุณเองซึ่งเรียกว่าฟังก์ชั่นที่ผู้ใช้กำหนด
กำหนดฟังก์ชัน
คุณสามารถกำหนดฟังก์ชั่นจากฟังก์ชั่นที่คุณต้องการกฎง่ายๆต่อไปนี้:
- def คำหลักฟังก์ชั่นบล็อกในการเริ่มต้นตามด้วยชื่อฟังก์ชั่นและตัวบ่งชี้ในวงเล็บ ()
- พารามิเตอร์ใด ๆ ที่เข้ามาและการขัดแย้งจะต้องอยู่ในวงเล็บที่อยู่ตรงกลางก็สามารถนำมาใช้ในการกำหนดค่าพารามิเตอร์ระหว่างวงเล็บ
- บรรทัดแรกของคำสั่งฟังก์ชั่นสามารถเลือกที่จะใช้เอกสารสตริง - ใช้สำหรับคำอธิบายฟังก์ชั่น
- เนื้อหาฟังก์ชั่นเริ่มต้นด้วยลำไส้ใหญ่และเยื้อง
- กลับปลาย [การแสดงออก] ของฟังก์ชั่นเลือกที่จะกลับมาเป็นมูลค่าให้กับผู้ที่โทรมา กลับมาโดยไม่ต้องเทียบเท่าแสดงออกเพื่อกลับไม่มี
ไวยากรณ์
ฟังก์ชั่นหลามที่กำหนดไว้โดยใช้คำหลัก def, รูปแบบทั่วไปเป็นดังนี้:
def 函数名(参数列表): 函数体
โดยค่าเริ่มต้นชื่อพารามิเตอร์และค่าพารามิเตอร์ที่อยู่ในลำดับที่กำหนดไว้ในประกาศฟังก์ชันตรง
ตัวอย่าง
ลองใช้ฟังก์ชั่นเพื่อการส่งออก "Hello World!":
>>> def hello() : print("Hello World!") >>> hello() Hello World! >>>
แอพลิเคชันของจุดที่ซับซ้อนมากขึ้นที่จะนำตัวแปรพารามิเตอร์ของฟังก์ชันนี้:
#!/usr/bin/python3 # 计算面积函数 def area(width, height): return width * height def print_welcome(name): print("Welcome", name) print_welcome("w3big") w = 4 h = 5 print("width =", w, " height =", h, " area =", area(w, h))
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
Welcome w3big width = 4 height = 5 area = 20
เรียกใช้ฟังก์ชัน
กำหนดฟังก์ชั่นที่จะให้ฟังก์ชั่นชื่อระบุพารามิเตอร์ของฟังก์ชันมีและโครงสร้างการป้องกันรหัส
หลังจากเสร็จสิ้นการโครงสร้างพื้นฐานของฟังก์ชั่นนี้คุณสามารถดำเนินการเรียกใช้ฟังก์ชันอื่นที่จะดำเนินการได้โดยตรงจากคำสั่งหลาม
ตัวอย่างต่อไปนี้จะเรียกว่า printMe () ฟังก์ชัน:
#!/usr/bin/python3 # 定义函数 def printme( str ): "打印任何传入的字符串" print (str); return; # 调用函数 printme("我要调用用户自定义函数!"); printme("再次调用同一函数");
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
我要调用用户自定义函数! 再次调用同一函数
พารามิเตอร์ผ่านค่าและส่งผ่านพารามิเตอร์โดยการอ้างอิง
ในหลามพารามิเตอร์ทั้งหมด (ตัวแปร) จะถูกส่งผ่านโดยการอ้างอิง ถ้าคุณเปลี่ยนพารามิเตอร์ในการทำงานแล้วฟังก์ชั่นนี้จะเรียกว่าฟังก์ชั่นพารามิเตอร์เดิมที่มีการเปลี่ยนแปลงยัง ตัวอย่างเช่น:
#!/usr/bin/python3 # 可写函数说明 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/python3 #可写函数说明 def printme( str ): "打印任何传入的字符串" print (str); return; #调用printme函数 printme();
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
Traceback (most recent call last): File "test.py", line 10, in <module> printme(); TypeError: printme() missing 1 required positional argument: 'str'
ข้อโต้แย้งคำหลัก
ข้อโต้แย้งคำหลักและสายงานสายงานความสัมพันธ์ใกล้ชิดใช้อาร์กิวเมนต์คำหลักในการกำหนดค่าของพารามิเตอร์ที่ผ่านมา
เมื่อใช้พารามิเตอร์คำหลักช่วยให้พารามิเตอร์ฟังก์ชั่นเพื่อการโทรที่ไม่สอดคล้องกับคำสั่งเพราะงูหลามล่ามที่มีความสามารถในการจับคู่ค่าพารามิเตอร์โดยใช้ชื่อพารามิเตอร์
ฟังก์ชั่น printMe ตัวอย่างต่อไปนี้ () จะเรียกว่ามีชื่อพารามิเตอร์:
#!/usr/bin/python3 #可写函数说明 def printme( str ): "打印任何传入的字符串" print (str); return; #调用printme函数 printme( str = "本教程");
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
本教程
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้งานฟังก์ชั่นของพารามิเตอร์ที่ไม่จำเป็นต้องใช้คำสั่งที่ระบุ:
#!/usr/bin/python3 #可写函数说明 def printinfo( name, age ): "打印任何传入的字符串" print ("名字: ", name); print ("年龄: ", age); return; #调用printinfo函数 printinfo( age=50, name="w3big" );
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
名字: w3big 年龄: 50
พารามิเตอร์เริ่มต้น
เมื่อฟังก์ชั่นที่เรียกว่าถ้าพารามิเตอร์ไม่ผ่านก็จะใช้พารามิเตอร์เริ่มต้น ตัวอย่างต่อไปนี้หากไม่มีพารามิเตอร์อายุเข้ามาค่าเริ่มต้น:
#!/usr/bin/python3 #可写函数说明 def printinfo( name, age = 35 ): "打印任何传入的字符串" print ("名字: ", name); print ("年龄: ", age); return; #调用printinfo函数 printinfo( age=50, name="w3big" ); print ("------------------------") printinfo( name="w3big" );
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
名字: w3big 年龄: 50 ------------------------ 名字: w3big 年龄: 35
ตัวแปรที่มีความยาว
คุณอาจต้องฟังก์ชั่นที่สามารถจัดการมากขึ้นกว่าเดิมประกาศของพารามิเตอร์ พารามิเตอร์เหล่านี้จะเรียกว่าพารามิเตอร์ยาวตัวแปรและทั้งสองประเภทของพารามิเตอร์จะแตกต่างกันไม่ได้ตั้งชื่อประกาศ ไวยากรณ์พื้นฐานจะเป็นดังนี้:
def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression]
ที่มีเครื่องหมายดอกจัน (*) จะถูกเก็บไว้ในชื่อตัวแปรตัวแปรทั้งหมดที่ไม่มีชื่อ ถ้าอาร์กิวเมนต์เมื่อฟังก์ชั่นที่เรียกว่าไม่มีมันเป็นอันดับที่ว่างเปล่า เราไม่สามารถส่งผ่านตัวแปรชื่อเพื่อฟังก์ชั่น ตัวอย่างต่อไปนี้:
#!/usr/bin/python3 # 可写函数说明 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 มาตรฐานนี้เพื่อกำหนดฟังก์ชั่น
- เพียงแค่การแสดงออกแลมบ์ดา, ร่างกายของฟังก์ชั่นง่ายกว่า def
- ร่างกายคือการแสดงออกแลมบ์ดามากกว่าบล็อกของรหัส เราสามารถจัดแพคเกจตรรกะ จำกัด ลงในการแสดงออกแลมบ์ดา
- ฟังก์ชั่นแลมบ์ดามี namespace ของตัวเองและไม่สามารถเข้าถึงนอกรายการอาร์กิวเมนต์ของตัวเองหรือพารามิเตอร์ namespace โลก
- แม้ว่าฟังก์ชั่นแลมบ์ดาดูเพียงเขียนบรรทัดเดียว แต่ไม่ได้เช่นเดียวกับฟังก์ชั่นแบบอินไลน์ใน C หรือ C ++ วัตถุประสงค์หลังไม่ครอบครองเมื่อการเรียกฟังก์ชันหน่วยความจำสแต็คขนาดเล็กเพื่อเพิ่มประสิทธิภาพการดำเนินงาน
ไวยากรณ์
แลมบ์ดาไวยากรณ์ฟังก์ชั่นที่มีเพียงคำสั่งอย่างใดอย่างหนึ่งดังต่อไปนี้:
lambda [arg1 [,arg2,.....argn]]:expression
ตัวอย่างต่อไปนี้:
#!/usr/bin/python3 # 可写函数说明 sum = lambda arg1, arg2: arg1 + arg2; # 调用sum函数 print ("相加后的值为 : ", sum( 10, 20 )) print ("相加后的值为 : ", sum( 20, 20 ))
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
相加后的值为 : 30 相加后的值为 : 40
คำสั่งกลับ
กลับ [การแสดงออก] คำสั่งที่ใช้ในการออกจากฟังก์ชั่นการคัดเลือกไปยังผู้โทรจะส่งกลับแสดงออกคำสั่งกลับมีพารามิเตอร์ไม่มีผลตอบแทนที่ไม่มี ไม่มีตัวอย่างก่อนหน้านี้แสดงให้เห็นถึงวิธีการที่จะคืนค่าตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้คำสั่งกลับไปนี้:
#!/usr/bin/python3 # 可写函数说明 def sum( arg1, arg2 ): # 返回2个参数的和." total = arg1 + arg2 print ("函数内 : ", total) return total; # 调用sum函数 total = sum( 10, 20 ); print ("函数外 : ", total)
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
函数内 : 30 函数外 : 30
ขอบเขตตัวแปร
Pyhton ตัวแปรที่ไม่ได้เป็นตำแหน่งที่โปรแกรมสามารถเข้าถึงการเข้าถึงขึ้นอยู่กับที่ตัวแปรที่ได้รับมอบหมาย
- ตัวแปรทั่วโลก
- ตัวแปรท้องถิ่น
ตัวแปรระดับโลกและระดับท้องถิ่น
ความหมายของฟังก์ชั่นของตัวแปรภายในมีขอบเขตในท้องถิ่นตามที่กำหนดไว้ในฟังก์ชั่นด้านนอกมีขอบเขตทั่วโลก
ตัวแปรท้องถิ่นเท่านั้นที่สามารถประกาศภายในฟังก์ชันการเข้าถึงไปยังตัวแปรทั่วโลกสามารถเข้าถึงได้ตลอดขั้นตอน เมื่อคุณเรียกใช้ฟังก์ชันทั้งหมดชื่อตัวแปรในการประกาศฟังก์ชั่นจะถูกเพิ่มในขอบเขต ตัวอย่างต่อไปนี้:
#!/usr/bin/python3 total = 0; # 这是一个全局变量 # 可写函数说明 def sum( arg1, arg2 ): #返回2个参数的和." total = arg1 + arg2; # total在这里是局部变量. print ("函数内是局部变量 : ", total) return total; #调用sum函数 sum( 10, 20 ); print ("函数外是全局变量 : ", total)
ตัวอย่างของการส่งออกดังกล่าวข้างต้น:
函数内是局部变量 : 30 函数外是全局变量 : 0