2017年7月30日 星期日

[Python] Partial function

在Python中有許多偏函數( Partial function)可以使用,常見的就是string的轉換
ex :

int('50') #50

這個例子就是把string type的50轉換成int的50,而且是10進制

那好,問題來了,能不能變成8/16等進制呢?可以,就是加上base的參數,沒有加上的話,默認會是10進制

ex :

int('50') #50
int('50',base=8)  #40
int('50',base=16) #80

在python中有一個工具叫做functools,理面整合許多Partial function,因此針對上面的例子可以改寫為

ex:

import  functools

int2=functools.partial(int,base=8)

int2('50') # 40

簡單方便的用法,但也不是說不能改喔
雖然定義了默認的轉換是8,但可以手動加上base參數轉成想要的

ex:

int2('50',base=16) #80

其實這樣的用法只是相當於固定原有函式的參數默認值,所以實際上是可以修改的,寫法只是方便調用罷了


2017年7月23日 星期日

[Pytrhon]Sorted_and_lambda

1. sorted用來排序,預設的情況下,如果要排序的List為數字,是從小到大排列
ex: L=[5,-12,13,9,100,0]

print(sorted(L)) # [-12,0,5,9,100]


[Python]Map_Reduce_Filter

1.Map : 接收一個函數以及一個list,將函數作用在list上的每一個元素後,產生新的list

2.Reduce : 接收一個函數以及一個list,講元素傳入函數進行處理,不同於Map,祂會產生一個結果而不是一個list

3.filter: 接收一個函數以及一個list,將函式作用在元素上,回傳True or Flase

這邊可以看到,同樣都是傳入函數跟list,但回傳的東西不同,回傳唯一結果的是Reduce跟filter,只有Map會回傳list


2017年7月9日 星期日

[Python]Map-and-reduce

1.
map的語法是 map(fn,var),作用為將 fn 作用在var上,一般來說var是list。map將var上的元素,這邊我們姑且認為var是一個list,將list上的元素一一丟入fn中進行運算,然後產生一個list


[Python]Higher-order-function

這邊先介紹一個Python的功能,『函數式編程』(functional programming),他的意思就是將函數當成參數包在另外一個參數裡面,例如有一個系統內建函數: abs,這是輸出一個絕對值的value,今天有一個使用者自訂函數: add2(x,y,abs)


2017年7月5日 星期三

[Python]Generator-and-iterator-or-iterable

1.
 Generator設計的目的是為了利用推導功能,一步步算出下一個元素是多少,著眼點是list如果一次產生多個元素,但卻只要前面幾個元素,就會很浪費空間。假定產生20個元素

2017年7月2日 星期日

[Python]the-python-iterator-and-list-generator

1.
python可以在給定一個list , tuple或者dict,使用"for"來遍歷所有的item,這叫做送代(iteration),類似C/C++/Jave等近代語言那樣
ex: dict={'a':1, 'b':2,'c':3}
這是字典,有key跟value,要遍歷他的item可用

for key in dict:
   print(key)  c

不過注意,字典形式並非按照list的方法排列,所以可以能輸出的順序不一樣
上述的方法只輸出key,要輸出value的話可以改寫為:

for value in dict.values():
     print(value)  # 2 1 3

當然要同時輸出key:value的形式,則是改為

for key,value in dict.items():
     print(key,value)
# b 2
   a 1
   c 3

[Python] Partial function

在Python中有許多偏函數( Partial function)可以使用,常見的就是string的轉換 ex : int('50') #50 這個例子就是把string type的50轉換成int的50,而且是10進制 那好,問題來了,能不能變成8...