2016年9月21日 星期三

【Mac/Python3】基礎入門(8) - function


使用 def 來開一個新的 function
import math 
def test(x): 
print(“x=“,x) 
x = math.pi 
print(“x=“,x) 
return x 

y = test(“test”) 
print(“y=“,y)

result:
x=test
x= 3.141592653589793

y= 3.141592653589793

因為使用到 math 的 pi function,所以我們需要在一開頭加一句 import math
def 後面的就是 function 名稱 
() 裡的就是參數,意思是 call 這個 function 時需要 pass 什麼過去
return 就是返回 value 給 call function 的人
如果沒有 return 這一句


default 是 return None 的


除此之外
function 是可以返回多個數值
def test(): 
x = 1 
y = 2 
return x, y 

a, b = test() 
print(“a, b=“,a,b)


result: a, b= 1 2



可變參數:

我們可以傳 list 或 tuple 進去的

第一個方法是:
def clac(numbers): 
print(numbers)
>>>calc([1,2]) 
[1,2]

第二個方法是:
只要 function 的參數前面加個 *
def calc(*numbers): 
print(numbers) 
>>> calc(1,2) 
(1,2)

如果本來已有個list
>>> n = [1,2] 
>>> calc(n[0],n[1]) 
(1,2)
這樣也是可以的,只是當list大了的時候會很不方便吧
所以 Python 是可以讓我們直接傳 list 進去的,只要在 list 前加個 *
>>> n = [1,2] 
>>> calc(*n) 
(1,2)

*n 表示把 n 這個 list 的所有元素作為可變參數傳進去


關鍵字參數:

關鍵字參數允許我們傳入0個或任意個含參數名的參數
這些參數會內部組裝成一個 list 
def person(name, age, **kw) 
print(’name:’,name,’age:’,age,’other:’,kw) 
>>> person(‘nightsnow’,15) 
name: nightsnow age: 15 other: {}

可傳入任意個數參數
>>> person(‘nightsnow’,15,city=“HK”,gender=“F”) 
name: nightsnow age: 15 other: {‘city’: ’HK’, ‘gender’: ‘F’}

又或是如果我們已有個 dict
>>> extra = {‘city’: ’HK’, ‘gender’: ‘F’} 
>>> person(‘nightsnow’,15,**extra) 
name: nightsnow age: 15 other: {‘city’: ’HK’, ‘gender’: ‘F’}

**extra 表示把 extra 這個 dict 的所有 key-value 用關鍵字參數傳入到 **kw 中
kw 將直接獲得一個 dict
kw 只是得到 extra 的拷貝,kw 的改動並不會影響到 extra



*注意不要少寫了冒號 : 

*總結:
*  是 可變參數,接收的是一個 tuple
** 是 關鍵字參數,接收的是一個 dict 




【Mac/Python3】基礎入門(8) - function


使用 def 來開一個新的 function
import math 
def test(x): 
print(“x=“,x) 
x = math.pi 
print(“x=“,x) 
return x 

y = test(“test”) 
print(“y=“,y)

result:
x=test
x= 3.141592653589793

y= 3.141592653589793

因為使用到 math 的 pi function,所以我們需要在一開頭加一句 import math
def 後面的就是 function 名稱 
() 裡的就是參數,意思是 call 這個 function 時需要 pass 什麼過去
return 就是返回 value 給 call function 的人
如果沒有 return 這一句


default 是 return None 的


除此之外
function 是可以返回多個數值
def test(): 
x = 1 
y = 2 
return x, y 

a, b = test() 
print(“a, b=“,a,b)


result: a, b= 1 2



可變參數:

我們可以傳 list 或 tuple 進去的

第一個方法是:
def clac(numbers): 
print(numbers)
>>>calc([1,2]) 
[1,2]

第二個方法是:
只要 function 的參數前面加個 *
def calc(*numbers): 
print(numbers) 
>>> calc(1,2) 
(1,2)

如果本來已有個list
>>> n = [1,2] 
>>> calc(n[0],n[1]) 
(1,2)
這樣也是可以的,只是當list大了的時候會很不方便吧
所以 Python 是可以讓我們直接傳 list 進去的,只要在 list 前加個 *
>>> n = [1,2] 
>>> calc(*n) 
(1,2)

*n 表示把 n 這個 list 的所有元素作為可變參數傳進去


關鍵字參數:

關鍵字參數允許我們傳入0個或任意個含參數名的參數
這些參數會內部組裝成一個 list 
def person(name, age, **kw) 
print(’name:’,name,’age:’,age,’other:’,kw) 
>>> person(‘nightsnow’,15) 
name: nightsnow age: 15 other: {}

可傳入任意個數參數
>>> person(‘nightsnow’,15,city=“HK”,gender=“F”) 
name: nightsnow age: 15 other: {‘city’: ’HK’, ‘gender’: ‘F’}

又或是如果我們已有個 dict
>>> extra = {‘city’: ’HK’, ‘gender’: ‘F’} 
>>> person(‘nightsnow’,15,**extra) 
name: nightsnow age: 15 other: {‘city’: ’HK’, ‘gender’: ‘F’}

**extra 表示把 extra 這個 dict 的所有 key-value 用關鍵字參數傳入到 **kw 中
kw 將直接獲得一個 dict
kw 只是得到 extra 的拷貝,kw 的改動並不會影響到 extra



*注意不要少寫了冒號 : 

*總結:
*  是 可變參數,接收的是一個 tuple

** 是 關鍵字參數,接收的是一個 dict 

【Mac/Python3】基礎入門(7) - dict, set


dict:

全稱為 dictionary
在其他語言稱為 map, arraylist 等等
簡單來說就是使用了 key 和 value 來儲存
具有極快的查找速度
dict 是用 {}
>>> info = {‘Amy’:80, ‘Bob’:75, ‘Cathy’:100} 
>>> print(info[‘Bob’]) 
75
在這個例子中,Amy, Bob, Cathy 就是 key,而數字就是 value
>>> print(info[‘nightsnow’])
key 不在的情況下
它就會報錯顯示 KeyError: ‘nightsnow’

避免 key 不在的情況,我們可以使用 in 來判斷 key 存在與否
>>> print(’nightsnow’ in info) 
False
又或是使用 get(),沒有這個 key 的話會返回 None,又或是我們可以給他指定的 value
有這個 key 的話就會返回該 key 的 value
>>> print(info.get(‘nightsnow’) 
None 
>>> print(info.get(’nightsnow’,-1)) 
-1 
>>> print(info.get(‘Amy’)) 
80
要刪除 key,使用 pop(key)
>>> info.pop(‘Bob’) 
>>> print(info) 
{‘Amy’:80,’Cathy’:100}

*dict 的內部存文的順序跟 key 放入的順序是沒有關係的
*key 是不會重複的

和 list 比較,dict 有幾個特點
(1)查找發插入速度極快,不會隨著 key 的增加而變慢
(2)需要佔用大量內存
簡單來說,dict 是用空間來換取時間的一種方法


set:

dict 跟 set 類似,不同的是 set 只有 key 沒有 value
在 set 中,不會有重複的 key
使用 set() 就代表那是一個 set 了

*set 傳入的參數只能是 list
>>> s = set([1, 1, 2, 2, 3]) 
>>> print(s) 
{1, 2, 3}
通過 add(key) 可以添加元素到 set 中,可以重複添加,但不會有效果哦
>>> s.add(4) 
>>> print(s) 
{1, 2, 3, 4} 
>>> s.add(4) 
>>> print(s) 
{1, 2, 3, 4}
通過 remove(key) 來刪減元素
>>> s.remove(4) 
>>> print(s) 
{1, 2, 3}



【Mac/Python3】基礎入門(6) - for, while


寫程式超級常用的莫過於 loop 了
for 或 while 是經常使用的
Python 的 for while 是非常簡單的

for:

不像傳統 for loop 那樣長長的一句
而是用 for…in
names = [‘a’,’b’,’c’] 
for name in names: 
print(name) 
print(‘end for’)

result:
a
b
c
end for

假如我們想計算 1-100 的總和,那我們不可能把 100 個數字全寫入 list 中的吧
所以我們可以用到 range() 功能
它可以生成一個整數序列
之後通過 list() 把函數轉成 list
例如 range(101) 就是指 0-100 了
sum = 0 
for x in list(range(101)): 
sum = sum + x 
print(sum)

result: 5050


while:
sum = 0 
n = 99 
while n > 0: 
sum = sum + n 
n = n - 2 
print(sum)
意思是直到 n 小過或等於 0 時就會完了


*注意不要少寫了冒號 : 

*要注意如果沒用 tab,就代表著那句是在 loop 出面了,所以我們的 print 只會 print 一次,如果 print 有加 tab 在前面,每 loop 一次就會 print 一次了




2016年9月20日 星期二

【Mac/Python3】基礎入門(5) - if, elif, else

我們經常使用 if-else 來做條件判斷
而Python 的 if, else if, else 都很簡短的
跟其他語言不同的是
它不需要用到 (),而且 else if 的寫法是 elif
age = 17 
if age > 18: 
print(‘age > 18’) 
elif age > 16: 
print(‘age > 16’) 
else: 
print(‘age <= 16’)
result: age > 16


*注意不要少寫了冒號 : 






【Mac/Python3】基礎入門(4) - list 和 tuple

list (列表):

是一種有序的集合,可隨時增加或刪減其中的元素
就像 Array 一樣

假如現在我們想列出班裡同學的名字
>>> classmates = [‘Amy’,’Bob’,’Cathy’] 
>>> print(classmates) 
[‘Amy’,Bob,’Cathy’]
然後我們想知道有多少個同學, 用 len() 就可以知道 list 有多大
>>> a = len(classmates) 
>>> print(a) 
3
如果我們想知道最後一位同學的名字
首先我們要用 a = len() -1 知道 index 是什麼
( -1 的原因是 list 的 index 數是由0開始的,所以 Amy 是 index 0)
>>> print(classmates[a]) 
Cathy
更簡單的方法是
>>> print(classmates[-1]) 
Cathy
倒數第二的就是
>>> print(classmates[-2]) 
Bob
諸此類推

拿出 index 1 的同學名字
>>> print(classmates[1]) 
Bob
*要注意 index 不要越界
*例如:>>> print(classmates[3]
*可是我們根本沒有 index 3
*這時候會出現 IndexError: list index out of range

list 是一個可變的有序表,所以是可以增加元素進去的
例如使用 append() 增加到最尾
>>> classmates.append(‘Peter’) 
>>> print(classmates) 
[‘Amy’,’Bob’,’Cathy’,’Peter’]
又或是使用 insert() 增加到指定位置,例如 index 1
>>> classmates.insert(1,‘Jack’) 
>>> print(classmates) 
[‘Amy’,’Jack’,’Bob’,’Cathy’,’Peter’]
可以增加元素,自然也可以刪減,使用 pop () 來刪減最尾的元素
>>> classmates.pop() 
>>> print(classmates) 
[‘Amy’,’Jack’,’Bob’,’Cathy’]
刪減指定元素,使用 pop(i)
>>> classmates.pop(1) 
>>> print(classmates) 
[‘Amy’,’Bob’,’Cathy’]
更改某index為別的元素
>>> classmates[1] = ‘Mary’ 
>>> print(classmates) 
[‘Amy’,’Mary’,’Cathy’]
list 中不一定只放 string 的,可以放不同的類型
當然在裡面也可以放 list 嚕
>>> assoList = [‘a’,’b’,[‘c’,’d’],’e’]
然後如果想拿list中list的值
>>> print(assoList[2][0] 
c


tuple (元組):

tuple 跟 list 很相似,也是類似 array 的,唯一不同的是
tuple 一但初始化了就不能被修改
list 是用 []
tuple 是用 ()
>>> classmates(‘Amy’,’Bob’,’Cathy’)
現在 classmates 這個 tuple 不能變了
假如我們嘗試 
>>> classmates[0] = ‘test’
他會報錯顯示
TypeError: ‘tuple’ object does not support item assignment
意思是 tuple 不能被修改的
這樣有個好處
就是比較安全
所以如果能用tuple代替list就盡量用tuple好了

*要注意的是,使用 tuple 時,要在初始化時就把全部元素確定下來
*因為他不能被修改,不會有 append(), insert() 這些方法的

定義一個空的tuple時,可以使用 ()
>>> a = ()
定義一個只有一個元素的 tuple 時,如果你這樣定義
>>> b = (1)
這樣我們不是在定義 tuple,而是在定義 1 這個數字
因為 () 除了表示 tuple 外,亦表示數學公式中的小括號
所以如果我們定義只有一個元素的 tuple 時
後面一定要加上逗號
>>> b = (1,)
這樣 python 就會知道這是 tuple 了

最後來一個看起來”可變的”tuple
假如我們在tuple裡放入list
>>> c = (‘a’,’b’,[‘x’,’y’]) 
>>> c[2][0] = ‘c’ 
>>> print(c) 
(‘a’,’b’,[‘c’,’y’])
這個tuple裡定義了的是 a, b, 和一個 list
為什麼我們可以修改到?
因為我們只是修改了 list 裡面的元素

tuple 的元素是沒變的,還是 a, b, 和一個 list



2016年9月19日 星期一

【Mac/Python3】基礎入門(3) - 符號、變數、計算

符號:

首先我們要知道的是
字符串都是用 包著的
那如果字符串裡需要用到這兩款引號時,要怎麼辦呢?
例如 
>>> print(‘I’m nightsnow’)
如果這樣輸入,是會報錯的
這時候我們需要用到 \ 這個轉義來標識
>>> print(‘I\’m nightsnow’) 
I’m nightsnow

\ 這個轉義字符可以轉義很多字符
例給常用的有
\n = 換行
\t = tab 
\\ = \

>>> print(“This is\nnew line”) 
This is 
new line

但當我們需要換很多行時
可以做用 '''…'''
>>>print(‘’’line1 
line2 
line3’’’) 
line1 
line2 
line3

Python的空值是 None
None 不能理解成0喔~

另外Python中的comment 是
#This is a comment
運行時就會自動跳離這句


在字串中想使用特定格式時
例如我們常見的有
"親愛的xxx你好!本月的費用為xxx元!”
這時候我們會使用到佔位符%
>>> print(‘Hi! %s, you have %d apples’ % (‘nightsnow’, 5)) 
Hi! nightsnow, you have 5 apples
常用的佔位符有:
%d = 整數
%f = 浮點數
%s = 字符串

%x = 十六進制整數

變數:

在Python中,如果沒定義變數種類,他會根據變數的值來定義種類
>>> a = 1
這個 a 的種類為 int
>>> a = “abc”
a 的種類變成了string

但如果我們指定了變數的種類,它就不能轉變成其他種類
>>> int a = 1 
>>> a = “abc”
這樣是會報錯的


計算:

值得注意的是除法
python 的除法即使除出來的是整數,最後也會變成浮點數的
>>> print(“9/3=”,9/3) 
9/3= 3.0
如果除出來不是整數
>>> print(“10/3=”,10/3) 
10/3= 3.3333333333333335

如果使用 // 這個符號,除出來的會是整數(下捨入法)
>>> print(“10//3=”,10//3) 
10//3= 3 
>>> print(“10//4=“,10//4) 
10//4= 2




【Mac/Python3】基礎入門(2)-輸出和輸入

輸出:
先來說說 python 是怎樣做輸出動作的
很簡單
使用 print() 指令
>>> print(“Hello World!”)

print() 指令能接受多個字串符,需要使用逗號分隔
>>> print(“I”,”am”,”nightsnow”)
I am nightsnow

print() 會依次輸出,遇到逗號時就會輸出空格


print() 指令也可以打印整數或計算結果, 當然也可以把結果打印得漂亮一點
>>> print(200) 
200 
>>> print(100+100) 
200 
>>> print(“100+200=“,100+200) 
100+200= 300
*python 版本為3以下時,使用逗號是會報錯的
*這時候請用
*>>> print("100+200%d"%100+200)

輸入:
如果想讓 user 輸入一些字串,我們可以使用 input() 指令


(如果python版本是2.7, 請使用 raw_input() 指令)
>>> name = input()
當輸入這一句後,python就會等待 user 輸入,當user輸入完成後,才會回到 >>> 狀態
這一句的意思是,把user輸入的字串存放到name這個變數中

然後當我們 
>>> print(name)
他就會出現user輸入的字串了

然後我們是可以輸入提示訊息,讓user知道自己應該輸入什麼的
name = input(‘Please enter your name:’) 
print(“Hello,”,name)
執行檔案後結果如下
Please enter your name: nightsnow


Hello, nightsnow



【Mac/Python3】基礎入門(1) - 簡介

Python 語言非常簡單易用
Python 可以做什麼? 日常一點的像自動備份,很多著名網站例如Youtube也是用Python寫出來的,亦可以做網站遊戲後台等等

Python 為我們提供了非常完善的代碼庫,覆蓋了網絡,文件,GUI,數據庫,文本等大量內容
被稱作為”內置電池” (Batteries included)
用Python開發,很多功能不需要由零開始,直接用現成的就可以了


安裝Python:
linux 內置是有Python的
如果想更新最新版本要到Python官網下載並安裝

查看是否有 Python:
在終端機輸入 python
看到 >>> 符號就代表我們進入了python環境中了
要離開python環境只需要輸入 exit() 或直接關掉終端機就可以了


Python 的副檔案名字為 .py 
要運行 .py 文件,我們需要 Python解釋器去執行

Python解釋器有好多款,最為廣泛的是CPython
CPython解釋器是在我們下載並安裝好Python後,就會自動獲得的

在終端機輸入 python 進入 python環境後
我們可以試試輸入
>>> 100+100 
200
會看到直接得出result200
如果我們把 100 + 100 放進 testPython.py 裡
然後執行py檔 (記得執行py檔案前要先退出python環境喔)
python testPython.py
如果Python版本為 3 以上, 請使用

python3 testPython.py
發現沒任何輸出的

在py檔案裡,我們必需使用 print() 這個指令
把 100+100 這句改成 print(100+100)
再執行一次testPython.php
就能看到輸出是200了

文本編輯器
人是推介 Pycharm 的

Community 版本是免費的阿



2016年9月8日 星期四

【Linux】Linux command - pipe, cat, tail


pipe 指令

 | <-- 這個符號就是管道(pipe)
pipe 是分隔兩個管線命令的界定
簡單來說
pipe = 把左邊得出的結果丟到右邊去

來個簡單的例子
當我們使用 ls -la
會把目錄下的全部檔案名稱列印在 console 上

當我們只想搜尋某個檔案時
就要使用到 pipe 了
ls -la | grep "Code"

想了解 grep, 請看 【Linux】Linux command - find, grep

會做完 ls -la 後,再找出含有 "Code" 字元的檔案

來張圖就更容易明白了!


這一句意思就是:
ls -la 裡含有 Code 字元的都給朕列印出來!


cat 指令

假如我們不是只想把檔案名字列印出來,而是想把檔案內容列印出來時
就會使用到 cat 指令

cat = 把file所有內容列印到console上

假如我們的 test.php 內容是..
<?
echo "I am test.php";
echo "hihi";
echo "hihi 1";
echo "hihi 2";
echo "hihi 3";
?>

使用 cat test.php 指令時
會把整個 test.php 的內容列入在 console 上

cat 配合 pipe, grep 使用的話
 cat test.php | grep "hihi"

結果是:
echo "hihi 1";
echo "hihi 2";
echo "hihi 3";


tail 指令

以上面 test.php 來做例子
如果我們只想列印最後一行的結果在 console 上

tail = 把file最尾的指定行數列印到console上

使用 tail -n 1 test.php | grep "hihi"
意思是把 test.php 最後一行有 hihi 字元的列印出來

結果是:
echo "hihi 3";