Latest web development tutorials

ฟังก์ชั่น 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