21 มีนาคม 2568
Python เป็นภาษาโปรแกรมที่ใช้งานได้หลากหลายและใช้กันอย่างแพร่หลาย เป็นที่รู้จักกันดีในเรื่องไวยากรณ์ที่ชัดเจนและอ่านง่าย ทำให้เป็นตัวเลือกที่เหมาะสำหรับผู้เริ่มต้น เพราะมันถูกใช้ในทุกอย่างตั้งแต่การพัฒนาเว็บไปจนถึงวิทยาศาสตร์ข้อมูล เปิดเส้นทางอาชีพมากมาย บทความนี้จะแนะนำคุณเกี่ยวกับแนวคิดพื้นฐานของ Python พร้อมตัวอย่างโค้ดที่เรียบง่ายและเข้าใจง่าย
เริ่มต้นด้วยโปรแกรม “Hello, World!” แบบดั้งเดิม ใน Python สิ่งนี้ตรงไปตรงมาเป็นพิเศษ:
print("Hello, Beginner!")
บรรทัดเดียวนี้ทำสิ่งต่อไปนี้:
print()
: นี่คือ function ที่ built-in ฟังก์ชันคือบล็อกโค้ดที่นำกลับมาใช้ใหม่ได้ซึ่งทำงานเฉพาะ print()
แสดงผลลัพธ์ต่อผู้ใช้("Hello, Beginner!")
: ภายในวงเล็บคือ string literal สตริงคือลำดับของอักขระ อยู่ในเครื่องหมายคำพูดเดี่ยว ('...'
) หรือคู่ ("..."
)เมื่อคุณรันสิ่งนี้ ตัวแปลภาษา Python จะรัน print()
โดยแสดง “Hello, Beginner!” บนหน้าจอของคุณ
ตัวแปรมีความสำคัญต่อการจัดเก็บข้อมูล คิดว่ามันเป็นเหมือนตู้คอนเทนเนอร์ที่มีป้ายกำกับ เป็นแนวทางปฏิบัติที่ดีในการใช้ชื่อที่สื่อความหมาย เริ่มต้นด้วยตัวอักษรพิมพ์เล็ก และใช้ขีดล่างเพื่อแยกคำ (เช่น my_variable
, user_age
) นี่คือตัวอย่าง:
# การกำหนดค่าให้กับตัวแปร
message = "Welcome to Python!"
number = 10
pi = 3.14159
# การพิมพ์ค่าตัวแปร
print(message)
print(number)
print(pi)
คำอธิบาย:
message = "Welcome to Python!"
: ตัวแปรชื่อ message
ถูกสร้างขึ้น โดยจัดเก็บสตริง “Welcome to Python!”number = 10
: ตัวแปรชื่อ number
จัดเก็บจำนวนเต็ม 10
pi = 3.14159
: ตัวแปรชื่อ pi
จัดเก็บเลขทศนิยม 3.14159
print()
จะแสดงค่าเหล่านี้ Python เป็น dynamically typed: คุณไม่จำเป็นต้องระบุประเภทของตัวแปร (สตริง, จำนวนเต็ม, ทศนิยม) อย่างชัดเจน Python จะอนุมานจากค่าที่กำหนด
โปรแกรมแบบโต้ตอบมักต้องการข้อมูลจากผู้ใช้ นี่คือวิธีรับ:
# การรับข้อมูลจากผู้ใช้
name = input("Please enter your name: ")
# การพิมพ์คำทักทายส่วนตัว
print("Hello, " + name + "!") # การต่อสตริง
คำอธิบาย:
name = input("Please enter your name: ")
: input()
หยุดโปรแกรมชั่วคราว รอให้ผู้ใช้พิมพ์บางอย่างแล้วกด Enter และจัดเก็บเป็นสตริงใน name
print("Hello, " + name + "!")
: สิ่งนี้พิมพ์คำทักทาย เครื่องหมาย +
เมื่อใช้กับสตริง จะทำหน้าที่ string concatenation โดยเชื่อมต่อเข้าด้วยกัน เป็นแนวทางปฏิบัติที่ดีในการเพิ่มช่องว่างรอบๆ +
เมื่อทำการต่อสตริงเพื่อให้อ่านง่ายif
, else
, และ elif
คำสั่งแบบมีเงื่อนไขช่วยให้โปรแกรมของคุณตัดสินใจ ควบคุมว่าบล็อกโค้ดใดจะถูกรันโดยพิจารณาจากเงื่อนไขว่าเป็นจริงหรือเท็จ
age = int(input("Enter your age: "))
if age >= 18:
print("You are eligible to vote.")
elif age < 0:
print("That is an incorrect age.")
else:
print("You are not eligible to vote yet.")
รายละเอียด:
age = int(input("Enter your age: "))
: รับข้อมูลอายุจากผู้ใช้ int()
แปลงข้อมูลที่ป้อนเข้า (ซึ่งเป็นสตริงโดยค่าเริ่มต้น) ให้เป็นจำนวนเต็มif age >= 18:
: ตรวจสอบว่า age
มากกว่าหรือเท่ากับ 18 หรือไม่ ถ้าจริง คำสั่ง print
ที่เยื้องจะถูกรันelif age < 0:
: หากเงื่อนไข if
ก่อนหน้านี้เป็นเท็จ เงื่อนไขนี้จะถูกตรวจสอบ หากเป็นจริง บล็อกที่เกี่ยวข้องจะถูกรัน elif
ย่อมาจาก “else if” และอนุญาตให้ตรวจสอบเงื่อนไขหลายๆ เงื่อนไขตามลำดับelse:
: ถ้าไม่มีเงื่อนไข if
หรือ elif
เป็นจริง โค้ดที่เยื้องภายใต้ else
จะถูกรัน การเยื้องมีความสำคัญใน Python; มันกำหนดบล็อกโค้ดที่เกี่ยวข้องกับ if
, elif
, และ else
การเยื้องที่สอดคล้องกัน (ปกติคือ 4 ช่องว่าง) เป็นสิ่งสำคัญสำหรับโค้ด Python ที่จะทำงานได้อย่างถูกต้องfor
ลูปทำซ้ำบล็อกโค้ด ลูป for
ทำซ้ำตามลำดับ (เช่น รายการหรือช่วงของตัวเลข)
# การพิมพ์ตัวเลข 0-4
for i in range(5):
print(i)
# การพิมพ์องค์ประกอบรายการ
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
คำอธิบาย:
for i in range(5):
: range(5)
สร้างตัวเลขตั้งแต่ 0 ถึง (แต่ ไม่ รวม) 5 ลูปจะวนซ้ำตามลำดับนี้ ในแต่ละรอบ ตัวเลขปัจจุบันจะถูกกำหนดให้กับ i
for fruit in fruits:
: ลูปนี้วนซ้ำผ่านรายการ fruits
ในแต่ละรอบ องค์ประกอบรายการปัจจุบันจะถูกกำหนดให้กับ fruit
while
ลูป while
จะดำเนินต่อไปตราบเท่าที่เงื่อนไขเป็นจริง
count = 0
while count < 5:
print(count)
count += 1 # เพิ่มค่า count
คำอธิบาย:
count = 0
: กำหนดค่าเริ่มต้น count
เป็น 0while count < 5:
: ลูปจะดำเนินต่อไปตราบเท่าที่ count
น้อยกว่า 5count += 1
: ภายในลูป count
จะเพิ่มขึ้น 1 ในแต่ละรอบ สิ่งนี้ป้องกัน infinite loop (ที่เงื่อนไขจะเป็นจริงเสมอ)ฟังก์ชันมีความสำคัญต่อการนำโค้ดกลับมาใช้ใหม่ การจัดระเบียบ และความสามารถในการอ่าน แทนที่จะทำซ้ำโค้ดเดิมหลายครั้ง คุณสามารถกำหนดฟังก์ชันหนึ่งครั้งและเรียกใช้เมื่อใดก็ตามที่คุณต้องการฟังก์ชันนั้น กำหนดเองโดยใช้ def
# การกำหนดฟังก์ชัน
def greet(name):
print("Hello, " + name + "!")
# การเรียกใช้ฟังก์ชัน
greet("Alice")
greet("Bob")
ประเด็นสำคัญ:
def greet(name):
: กำหนดฟังก์ชันชื่อ greet
ที่รับ parameter หนึ่งตัวชื่อ name
print("Hello, " + name + "!")
: body ของฟังก์ชัน—โค้ดที่ถูกรันเมื่อมีการเรียกใช้ฟังก์ชันgreet("Alice")
: เรียกใช้ ฟังก์ชัน greet
โดยส่ง “Alice” เป็น argumentรวมแนวคิดเข้าเป็นโปรแกรมที่ซับซ้อนขึ้นเล็กน้อย:
def calculate_area(length, width):
"""คำนวณพื้นที่ของสี่เหลี่ยมผืนผ้า""" # Docstring
area = length * width
return area
# รับขนาด
length = float(input("Enter length: "))
width = float(input("Enter width: "))
# คำนวณพื้นที่
rectangle_area = calculate_area(length, width)
# พิมพ์ผลลัพธ์
print("Area:", rectangle_area)
คำอธิบาย:
def calculate_area(length, width):
: กำหนดฟังก์ชันเพื่อคำนวณพื้นที่สี่เหลี่ยมผืนผ้า โดยรับ length
และ width
เป็นพารามิเตอร์ """..."""
คือ docstring อธิบายฟังก์ชัน Docstrings ใช้สำหรับเอกสารประกอบและสามารถเข้าถึงได้โดยฟังก์ชัน help()return area
: ฟังก์ชัน return พื้นที่ที่คำนวณได้ คำสั่ง return
ออกจากฟังก์ชันและส่งค่ากลับไปยังตำแหน่งที่เรียกใช้ฟังก์ชันfloat()
การใช้ float()
ช่วยให้สามารถใช้ค่าทศนิยมได้ ทำให้เครื่องคิดเลขใช้งานได้หลากหลายมากขึ้นcalculate_area
โดยส่งผ่านขนาด และจัดเก็บค่าที่ส่งคืนใน rectangle_area
Python มีเครื่องมืออื่นๆ สำหรับควบคุมโฟลว์ของโปรแกรม
break
, continue
, และ else
ในลูปbreak
: ออกจากลูป for
หรือ while
ที่อยู่ด้านในสุดcontinue
: ไปยังรอบถัดไปของลูปelse
clause: ใน for
จะถูกรันหลังจากลูปเสร็จสิ้น (เว้นแต่จะเกิด break
) ใน while
จะถูกรันหลังจากเงื่อนไขเป็นเท็จ (เว้นแต่จะเกิด break
)#ตัวอย่างสำหรับ break
numbers = [1, 2, 3, 4, 5]
for number in numbers:
if number == 3:
break # ออกจากลูปเมื่อ number เท่ากับ 3
print(number) # ผลลัพธ์: 1 2
#ตัวอย่างสำหรับ continue
numbers = [1, 2, 3, 4, 5]
for number in numbers:
if number == 3:
continue # ข้ามไปยังรอบถัดไปเมื่อ number เท่ากับ 3
print(number) # ผลลัพธ์: 1 2 4 5
#ตัวอย่างสำหรับ else
for i in range(5):
print(i)
else:
print("Loop finished") #จะถูกรัน
for i in range(5):
if i==3:
break
print(i)
else:
print("Loop finished") #จะไม่ถูกรัน
match
match
เปรียบเทียบค่ากับรูปแบบ มันเหมือนกับคำสั่ง switch ในภาษาอื่น ๆ แต่มีการจับคู่รูปแบบที่มีประสิทธิภาพมากกว่า ซึ่งใช้งานได้ตั้งแต่ Python 3.10
def http_error(status):
match status:
case 400:
return "Bad request"
case 401 | 403 | 404: # หลายกรณี
return "Not allowed"
case 418:
return "I'm a teapot"
case _: # ค่าเริ่มต้น
return "Something's wrong"
print(http_error(404))
print(http_error(500))
_
เป็นสัญลักษณ์แทน (wildcard) จับคู่กับอะไรก็ได้หากไม่มีกรณีอื่นตรงกัน
Python มีโครงสร้างข้อมูลในตัวสำหรับการจัดระเบียบข้อมูล
my_list = [1, 2, 3, "apple"]
my_list.append("cherry") # เพิ่มองค์ประกอบที่ส่วนท้าย
print(my_list[0]) # เข้าถึงองค์ประกอบด้วยดัชนี (เริ่มต้นจาก 0)
my_list.remove(2) # ลบองค์ประกอบตามค่า
print(my_list)
my_tuple = (1, 2, 3, "apple")
# my_tuple[0] = 5 # ข้อผิดพลาด (immutable) - Tuples ไม่สามารถแก้ไขได้หลังจากการสร้าง
print(my_tuple[1])
my_set = {1, 2, 3, 3, 4, 5} # รายการที่ซ้ำกันจะถูกลบโดยอัตโนมัติ
print(my_set) # ผลลัพธ์: {1, 2, 3, 4, 5}
my_dict = {"name": "Alice", "age": 30}
print(my_dict["name"]) # เข้าถึงค่าด้วยคีย์
my_dict["age"] = 31 # แก้ไขค่า
print(my_dict)
squares = [x**2 for x in range(10)] # รายการของกำลังสอง
even = [x for x in range(20) if x % 2 == 0] # เลขคู่
print(squares)
print(even)
โมดูลจัดระเบียบโค้ดเป็นไฟล์ที่นำกลับมาใช้ใหม่ได้ ใช้ import
เพื่อเข้าถึงฟังก์ชันจากโมดูลอื่นๆ
import math
print(math.sqrt(16)) # เข้าถึงฟังก์ชัน sqrt จากโมดูล math
print(math.pi) # เข้าถึงค่าคงที่ pi
from math import sqrt # นำเข้าฟังก์ชันเฉพาะ
print(sqrt(25))
from math import * # นำเข้าทั้งหมด (โดยทั่วไปควรหลีกเลี่ยง)
print(pi)
นี่แสดงให้เห็นถึงการใช้โมดูล math
(ซึ่งมีฟังก์ชันทางคณิตศาสตร์) การนำเข้าฟังก์ชันหรือค่าคงที่เฉพาะสามารถปรับปรุงความสามารถในการอ่านโค้ดและหลีกเลี่ยงความขัดแย้งในการตั้งชื่อ การนำเข้าทุกอย่างด้วย *
โดยทั่วไปไม่แนะนำในโครงการขนาดใหญ่
ฟังก์ชันสามารถมีค่าเริ่มต้นสำหรับอาร์กิวเมนต์
def greet(name, greeting="Hello"):
print(greeting + ", " + name + "!")
greet("Bob") # ใช้ค่าเริ่มต้นของคำทักทาย
greet("Alice", "Hi") # แทนที่ค่าเริ่มต้น
เรียกใช้ฟังก์ชันโดยใช้ไวยากรณ์ keyword=value
def describe_pet(animal_type, pet_name):
print("I have a " + animal_type + " named " + pet_name + ".")
describe_pet(pet_name="Harry", animal_type="hamster") # ลำดับไม่สำคัญ
ฟังก์ชันสามารถรับอาร์กิวเมนต์ตำแหน่งจำนวนเท่าใดก็ได้โดยใช้ *args
def make_pizza(*toppings):
print("Making a pizza with:")
for topping in toppings:
print("- " + topping)
make_pizza("pepperoni")
make_pizza("mushrooms", "cheese", "peppers")
*toppings
รวบรวมอาร์กิวเมนต์ตำแหน่งทั้งหมดไว้ใน tuple ชื่อ toppings
ฟังก์ชันสามารถรับอาร์กิวเมนต์แบบ keyword จำนวนเท่าใดก็ได้โดยใช้ **kwargs
def build_profile(first, last, **kwargs):
# รวมอาร์กิวเมนต์แบบ keyword ที่คงที่และแบบ arbitrary เพื่อสร้างโปรไฟล์ผู้ใช้
profile = {'first_name': first, 'last_name': last}
profile.update(kwargs) # อัปเดตโปรไฟล์ด้วยคู่คีย์-ค่าจาก kwargs
return profile
user = build_profile("Albert", "Einstein", location="Princeton", field="physics")
print(user) # Output: {'first_name': 'Albert', 'last_name': 'Einstein', 'location': 'Princeton', 'field': 'physics'}
**kwargs
ย่อมาจาก “keyword arguments” และเป็นแบบแผนการตั้งชื่อทั่วไปสำหรับการรวบรวมอาร์กิวเมนต์ที่มีชื่อเพิ่มเติมลงใน dictionary สิ่งนี้ช่วยให้ฟังก์ชันสามารถจัดการอินพุตที่ยืดหยุ่นได้
ฟังก์ชันขนาดเล็กที่ไม่ระบุชื่อที่สร้างด้วย lambda
add = lambda x, y: x + y
print(add(5, 3)) # ผลลัพธ์: 8
pairs = [(1, 'one'), (2, 'two'), (3, 'three')]
pairs.sort(key=lambda pair: pair[1]) #เรียงลำดับตามองค์ประกอบที่สองของ tuple
print(pairs)
ฟังก์ชัน Lambda มักใช้เป็นอาร์กิวเมนต์สำหรับฟังก์ชันลำดับสูง (ฟังก์ชันที่รับฟังก์ชันอื่นเป็นอาร์กิวเมนต์) เช่น sort
ในตัวอย่างนี้
คลาสเป็นวิธีการรวมข้อมูล (แอตทริบิวต์) และฟังก์ชัน (เมธอด) ที่ทำงานกับข้อมูลนั้น เป็นหนึ่งในคุณสมบัติหลักในการเขียนโปรแกรมเชิงวัตถุ ช่วยให้คุณสร้างพิมพ์เขียวสำหรับวัตถุ
class Dog:
def __init__(self, name, age): #constructor
self.name = name
self.age = age
def bark(self):
print("Woof!")
my_dog = Dog("Buddy", 3) #instance ของคลาส
print(my_dog.name)
my_dog.bark()
คำอธิบาย:
class Dog:
: กำหนดคลาสชื่อ Dog
def __init__(self, name, age):
: นี่คือ constructor (หรือ initializer) มันถูกเรียกโดยอัตโนมัติเมื่อคุณสร้างวัตถุ Dog
ใหม่
self
: อ้างถึง instance ของคลาส (วัตถุ Dog
เฉพาะที่คุณกำลังทำงานด้วย) เป็นพารามิเตอร์แรกในทุกเมธอดภายในคลาสdef bark(self):
: นี่คือ method—ฟังก์ชันที่เป็นของคลาส Dog
มันสามารถเข้าถึงข้อมูลของสุนัขได้ (เช่น self.name
แม้ว่าในตัวอย่างง่ายๆ นี้จะไม่ได้ใช้ก็ตาม)my_dog = Dog("Buddy", 3)
สร้าง instance ของคลาส Dog ชื่อ my_dog
.Iterator คืออ็อบเจกต์ที่ให้เราท่องผ่านองค์ประกอบทั้งหมดของคอลเล็กชัน โดยไม่คำนึงถึงการนำไปใช้งานเฉพาะ
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
Generator เป็น iterable ประเภทหนึ่ง เหมือนกับ lists หรือ tuples แต่ต่างจาก lists ตรงที่ generators จะไม่เก็บ contents ไว้ในหน่วยความจำ แต่จะสร้าง values ขึ้นมาทันที โดยใช้ keyword yield
ทำให้มีประสิทธิภาพในการใช้หน่วยความจำสำหรับ sequences ขนาดใหญ่ และทำให้มันแตกต่างจาก list comprehensions ซึ่งจะสร้าง list ทั้งหมดขึ้นในหน่วยความจำ
def my_generator():
yield 1
yield 2
yield 3
for value in my_generator():
print(value)
#generator expression
squares = (x*x for x in range(10))
print(list(squares))
พื้นฐานเหล่านี้เป็นรากฐานที่มั่นคงสำหรับการเดินทางใน Python ของคุณ โดยการทดลองกับแนวคิดเหล่านี้และรวมเข้าด้วยกัน คุณสามารถสร้างโปรแกรมที่ซับซ้อนมากขึ้นได้ โปรดจำไว้ว่าการฝึกฝนและการสำรวจเป็นกุญแจสำคัญในการเรียนรู้ภาษาโปรแกรมใดๆ