---
# System prepended metadata

title: Python 內建函式庫
tags: [python]

---

# Python 內建函式庫
###### tags: `python`
## re

這是一個非常萬用的字詞查找函式庫
基本上很多搜尋功能都是以re為基礎的
直接貼網址以備不時之需
https://www.runoob.com/python/python-reg-expressions.html


## importlib

可以直接import字串
配合getattr或是hasattr會有奇效


## pytz

時區表示的函式庫
通常是在上機器的時候使用，任何有用到時間格式的東西記得要給個時區
絕對不要自己 +8
會有誤差


## bson

一開始不知道long是啥
python沒有long的概念
利用 bson.int64.Int64(num) 就可以把存進資料庫的 int 轉成 long


## logging

比較自由的自己創造就用

```python=
log = logging.getLogger(log_name)
```

在debug跟report的時候很好用


## super

超類
涉及多重繼承的時候常用
可以指定上一層（依照繼承順序）的func來使用
有需要用到的話網址[在這](https://medium.com/@dboyliao/python-%E7%B9%BC%E6%89%BF-543-bc3d8ef51d6d)



## List特性

最近因為ETL一直OOM，所以來測試一下是哪裡出錯，中間測到list的部分，發現如果append東西進去的話其實是複製一份進list，而不是list的index指向值，切記！



## Singleton

如果需要自己實作singleton可用以下作為裝飾器
```python=
class Singleton(object):
    instances = {}
    def __new__(cls, clz=None):
        if clz is None:
            print("Creating object for", cls)
            if not cls.__name__ in Singleton.instances:
                    Singleton.instances[cls.__name__] = \
                        object.__new__(cls)
            return Singleton.instances[cls.__name__]
            print(cls.__name__, "creating", clz.__name__)
            Singleton.instances[clz.__name__] = clz()
            Singleton.first = clz
            return type(clz.__name__, (Singleton,), dict(clz.__dict__))
```