Latest web development tutorials

ฟังก์ชั่นหลาม

ฟังก์ชั่นเป็นองค์กรที่ดีนำมาใช้ใหม่ที่ใช้ในการบรรลุส่วนของรหัสเดียวหรือฟังก์ชั่นที่เกี่ยวข้อง

ฟังก์ชั่นสามารถนำไปใช้ในการปรับปรุงต้นแบบและนำมาใช้รหัส คุณรู้อยู่แล้วว่างูใหญ่ให้ในตัวฟังก์ชั่นเป็นจำนวนมากเช่นการพิมพ์ () แต่คุณยังสามารถสร้างฟังก์ชั่นของคุณเองซึ่งเรียกว่าฟังก์ชั่นที่ผู้ใช้กำหนด


กำหนดฟังก์ชัน

คุณสามารถกำหนดฟังก์ชั่นจากฟังก์ชั่นที่คุณต้องการกฎง่ายๆต่อไปนี้:

  • 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