> For the complete documentation index, see [llms.txt](https://yo-sarawut.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yo-sarawut.gitbook.io/knowledge-base/tutorials/python/important-basic-syntax.md).

# Important basic syntax

## ไวยกรณ์พื้นฐานที่จำเป็นอย่างยิ่งต้องจดจำ (Important basic syntax) <a href="#important-basic-syntax" id="important-basic-syntax"></a>

ไวยกรณ์ต่าง ๆ ที่จะกล่าวต่อไปนี้ ขอให้ผู้อ่านจดจำ และท่องให้ขึ้นใจ เพราะมันจะทำให้การเขียนโปรแกรมไม่มีอุปสรรค

#### Case sensitivity <a href="#case-sensitivity" id="case-sensitivity"></a>

การตั้งชื่อตัวแปร ตัวใหญ่ และตัวเล็กถือว่าเป็นคนละตัวแปร เช่น Number และ number ไม่ใช่ตัวแปรตัวเดียวกัน

#### Space and tabs don’t mix <a href="#space-and-tabs-dont-mix" id="space-and-tabs-dont-mix"></a>

ไพธอนมองว่า space และ tabs มีความหมายไม่เหมือนกัน ดังนั้นเวลาเขียนโปรแกรมอย่าผสมระหว่าง space และ tabs เข้าด้วยกันให้เลือกเอาอย่างใดอย่างหนึ่งเท่านั้น

#### Objects (วัตถุ) <a href="#objects" id="objects"></a>

ไพธอนถูกสร้างขึ้นภายใต้แนวคิดการโปรแกรมเชิงวัตถุ ดังนั้นเมื่อเราเรียกใช้งานคลาสใด ๆ ก็ตามถือว่าเป็นวัตถุตามแนวความคิดแบบโปรแกรมเชิงวัตถุ (การโปรแกรมเชิงวัตถุจะกล่าวในบทที่ 11 ) ดังนั้นเมื่อใดก็ตามที่มีการสร้างวัตถุและต้องการเข้าถึงแอตทริบิวต์ (Attribute) หรือฟังชัน (Function) ใดๆ ในวัตถุต้องใช้`“ ”` แล้วตามด้วยเครื่องหมาย `( )` แต่ถ้าอ้างถึงตัวแปรไม่ต้อง มี ( ) เช่น เมื่อต้องการเปลี่ยนค่าสตริง `'Pop'`เป็นตัวอักษรตัวใหญ่ทั้งหมด ทำได้โดยเรียกใช้คลาส upper ในไลบรารีของไพธอน ดังนี้ `'Pop'.upper()`

#### Scope <a href="#scope" id="scope"></a>

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

#### Namespaces <a href="#namespaces" id="namespaces"></a>

คือพื้นที่ที่ใช้เก็บตัวแปรของระบบที่สร้างไว้ให้เราโดยที่เราไม่รู้ และตัวแปรต่าง ๆ ที่เราสร้างขึ้นมาทีหลัง เราสามารถขอดูข้อมูลที่เก็บอยู่ใน Namespaces ได้โดยใช้คำสั่ง `dir()` ซึ่งเป็น `built-in function` ที่มีอยู่ในไพธอน ซึ่งถ้าเรายังไม่ได้ประกาศตัวแปร หรือฟังชันใดๆ ในโรแกรมจะปรากฎรายการของตัวแปรที่ระบบสร้างไว้ให้ 6 ตัวคือ`'__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__'`

ถ้าต้องการดูประเภทของตัวแปรเหล่านี้ว่าเป็นชนิดอะไร สามารถเรียกดูได้โดยใช้คำสั่ง `type()` เช่น `type (__builtins__)` ชนิดของตัวแปรที่ปรากฎคือ`<class 'module'>`หรือ `type (__doc__)` ชนิดของตัวแปรที่ปรากฎคือ `<class 'NoneType'>` เมื่อตัวแปรเป็นชนิด module

เราสามารถดูข้อมูลภายในโมดูลเหล่านั้นได้ด้วยคำสั่ง `dir( )` เช่น `dir(__builtins__)` ผลที่ได้ คือชื่อของฟังชัน หรือคลาสที่อยู่ภายในทั้งหมดออกมา ดังนี้ `['ArithmeticError', 'AssertionError', 'AttributeError',…., 'zip']` ในแต่ละ `Namespaces` เปรียบเสมือนเป็นคลัง หรือตู้คอนเทนเนอร์สำหรับเก็บข้อมูลต่างๆ ลงไป ดังนั้นแต่ละโปรแกรมจะถูกเก็บแยกออก จากกันโดยอิสระ

ดังนั้นอาจจะเรียก Namespaces ว่าเหมือนกับ Scope ก็ได้ เมื่อใดก็ตามที่เราสร้างตัวแปร หรือฟังชัน ตัวแปรที่สร้างขึ้นก็จะถูกเก็บอยู่ในพื้นที่ของ Namespaces ทั้งหมด เมื่อเราทำการนำเข้าคลาสใดๆ เข้ามาใช้งานในโปรแกรมด้วยการใช้`import` คลาสต่าง ๆ เหล่านั้นก็จะมาปรากฎใน Namespaces ด้วย เช่น import math จากนั้นใช้คำสั่ง `dir()` ผลลัพธ์ที่ได้คือ `['__builtins__', '__doc__', '__loader__', '__name__', '__package__', 'math', 'x']`

ถ้าผู้เขียนโปรแกรมต้องการทราบรายละเอียดของฟังชัน หรือ เมธอต (Method) ในคลาส`math` ให้ใช้คำสั่ง `dir(math)` ถ้าผู้เขียนโปรแกรมต้องการทราบการทำงานในแต่ละฟังชันของ math ว่าทำงานอย่างไร สามารถทำได้โดยใช้ฟังชัน print ตามด้วยชื่อคลาส.เมธอต เช่น `print (math.pow)` หรือ `print (math.pi)` เป็นต้น

#### Colons <a href="#colons" id="colons"></a>

ไพธอนตัดเครื่องหมายแสดงขอบเขตของข้อมูล `{…}`ทิ้งไป แล้วใช้ : ร่วมกับการเขียนโปรแกรมด้วยการย่อหน้าแทน โดยเริ่มจากคอลัมภ์ที่ 1 เสมอดังนั้นอย่าลืม : หลังคำสั่ง`if, for, while, def` เป็นอันขาด

#### Blank lines <a href="#blank-lines" id="blank-lines"></a>

เมื่อจำเป็นต้องเขียนคำสั่งที่มีความยาวมากๆ ไม่หมดใน 1 บรรทัด ให้ใช้เครื่องหมาย`\` ตามด้วย`enter`เช่น

```
print ('This is a really long lines \  
but we can make it across \  
multiple lines')
```

หรือ

```
x = 4 * 5 - 5 + \  
6 + 8 \  
+ 5 % 2  
print(x)
```

#### Lines and Indentation <a href="#lines-and-indentation" id="lines-and-indentation"></a>

ไพธอนไม่ใช้เครื่องหมาย`{…}`ในการกำหนดขอบเขต เหมือนในภาษาซี ไพธอนใช้การเยื้อง หรือย่อหน้าแทน ดังนั้นผู้เขียนโปรแกรมจะต้องระวังการเยื้องหน้าให้ดี จากตัวอย่างต่อไปนี้

**ตัวอย่างที่ 1**

```
if True:  
    print ("True")  
else:  
    print ("Answer")
    print ("False")
```

**ตัวอย่างที่ 2**

```
if True:  
    print ("Answer")  
    print ("True")  
else:  
    print ("Answer")
print ("False")
```

โปรแกรมตัวอย่างที่ 1 จะไม่เกิด ข้อผิดพลาด เพราะว่าคำสั่งหลัง else ย่อหน้าตรงกัน\
โปรแกรมตัวอย่างที่ 2 จะเกิดข้อผิดพลาด เพราะว่าคำสั่งหลัง else ย่อหน้าไม่ตรงกัน

#### Multi-line statements <a href="#multi-line-statements" id="multi-line-statements"></a>

แต่ละคำสั่งของไพธอนส่วนใหญ่จบลงด้วยการขึ้นบรรทัดใหม่ (new line) แต่ผู้เขียนโปรแกรมสามารถใช้เครื่องหมาย`\`เพื่อเชื่อมคำสั่งได้ เช่น

```
total = item_one + \ #item_one = "one"
item_two + \ #item_two = "two" 
item_three #item_three = "three"
```

**OUTPUT**

```
one two three
```

สำหรับข้อมูลในเครื่องหมาย `[…], {…}` หรือ`(…)` ไม่จำเป็นต้องใช้เครื่องหมาย `\`เช่น

```
days = ['Monday', 'Tuesday', 'Wednesday',  
'Thursday', 'Friday']
```

#### Quotation in Python <a href="#quotation-in-python" id="quotation-in-python"></a>

ไพธอนใช้เครื่องหมาย`' (single quote), " (double quote)`ในการแสดงค่าของสตริง แต่เครื่องหมาย`""" (triple quote)`สามารถใช้เชื่อมต่อสตริงแบบหลาย ๆ บรรทัดได้ เช่น

```
word = 'word'  
sentence = "This is a sentence."  
paragraph = """This is a paragraph. It is  made up of multiple lines and  
sentences."""  
print(paragraph)
```

**OUTPUT**

```
This is a paragraph. It is  made up of multiple lines and sentences.
```

#### Waiting for the user <a href="#waiting-for-the-user" id="waiting-for-the-user"></a>

บ่อยครั้งที่ผู้เขียนโปรแกรมต้องการให้โปรแกรมหยุดรอก่อนโปรแกรมทำงานเสร็จ โดยขึ้นข้อความว่า “Press the enter key to exit.” สามารถใช้ `\n\n` ใส่ไว้ก่อนข้อความ ดังนี้

```
input("\n\nPress the enter key to exit.")
```

#### Multiple statements on a single line <a href="#multiple-statements-on-a-single-line" id="multiple-statements-on-a-single-line"></a>

ผู้เขียนโปรแกรมสามารถใช้เครื่องหมาย ; เพื่อสั่งให้สามารถรันหลายๆ คำสั่งได้ในบรรทัดเดียวกันได้

```
import sys; x = 'Python'; sys.stdout.write(x + ' \n')
```

**OUTPUT**

```
Python  
7
```
