---
# System prepended metadata

title: 2-2 認識變數
tags: [chapter 2, Python]

---

###### tags: `chapter 2` `Python`
# 2-2 認識變數 #
如果說一個寫python的環境(jupyter、PyCharm)是一個機械製造廠，那變數就是裡面的螺絲，你需要各種不同的螺絲才可以組裝出你期望的精密機械，在python和其他所有的程式語言世界裡，你會需要變數來協助你完成你的程式。

![](https://i.imgur.com/22pdILC.png)
螺絲分成很多種螺絲，變數也是，分成很多種`型態`，不同型態的變數是無法混合使用的哦！
![](https://i.imgur.com/aRbtlPJ.png)

變數底層的運作大致上是從記憶體要到一塊空間，然後在裡面存放程式運行中的值，就像是你取出螺絲，那桌子(記憶體)上一定要有地方給螺絲(變數)放。實際上的運作則有點複雜，也不是重點，但你只要記得`變數是用來存放程式運行中產生的值`即可，就像是前一小節我們變數比喻為成績欄，那`成績欄就是用來存放這張考卷的成績`。


### 宣告一個變數 ###
如果你想宣告一個變數，你只要很簡單的打上你賦予他的名字，以及最一開始的值即可。

假設小明今天想宣告一個變數叫做`hourly salary`(時薪)。
```python=
hourly_salary = 150
```
根據上述程式，可以發現小明時薪是150元(!?)

有了這個變數的知識，搭配上四則運算，就可以很輕鬆的算出小明的月薪了!!!
```python=
hourly_salary = 150
total_hours_this_month = 50
print("這個月的月薪是" , hourly_salary * total_hours_this_month , "元")
print("今年的年薪是", hourly_salary * 50 * 12, "元")
print("一個月有", 24 * 30 - total_hours_this_month, "個小時沒在上班")
```

**Ｑ**：這樣子的好處在哪裡呢？
**Ａ**：當今天小明的時薪或著時長改變，我們只需更動變數內的值就可以收工了！

**假設場景**：小明加薪了！現在的`hourly_salary`是300元。
```python=
# 使用變數概念
hourly_salary = 300 # 從原本的150改為300
total_hours_this_month = 50
print("這個月的月薪是" , hourly_salary * total_hours_this_month , "元")
print("今年的年薪是", hourly_salary * 50 * 12, "元")
print("一個月有", 24 * 30 - total_hours_this_month, "個小時沒在上班")
```

```python=
# 「不使用」變數概念
print("這個月的月薪是", 300 * 50, "元")          # 手動調整
print("今年的年薪是", 300 * 50 * 12, "元")       # 手動調整
print("一個月有", 24 * 30 - 50, "個小時沒在上班") # 沒有使用到時薪，不用調整
```

![](https://i.imgur.com/dQxwK0X.png)
關於變數的命名有一定的規則：
* 必須由英文字母、底線( _ )開頭和組成
* 大小寫必須分割，Name和name是兩個不同的變數
* Python系統保留字(關鍵字)是無法當作變數名稱的
![](https://i.imgur.com/DBV9EDJ.png)

如果想知道這顆螺絲(變數)放在桌上(記憶體)的哪個位置，我們可以利用`id()`這個函式，讓python告訴我們他在哪。

```python=
hourly_salary = 150
print(id(hourly_salary))
```

輸出結果可能每台電腦都不太一樣，因為每台電腦分配的位置可能都不同。