# 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
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yo-sarawut.gitbook.io/knowledge-base/tutorials/python/important-basic-syntax.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
