Python基礎筆記(四)

1. 返回函數與閉包

若是在一個內部函數裏,對在外部做用域(但不是在全局做用域)的變量進行引用,那麼內部函數就被認爲是閉包(closure)python

def getSum(*args):
    def add():
        result = 0
        for i in args:
            result = result + i
        return result
    return add

myFun = getSum(1, 2, 3)

print(myFun())
# 6

2. 裝飾器(decorator)

裝飾器是對函數的一種包裝,它使函數的功能獲得擴展,但又不用修改函數內部的代碼;通常用於增長函數執行先後的行爲。
下面的例子演示了在一個函數執行前打印當前時間,執行後打印執行完成的提示:閉包

import time

def myDecorator(func):
    def myWrapper(*args, **kw):
        print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
        f = func(*args, **kw)
        print(func.__name__, "function is called.")
        return f
    return myWrapper

@myDecorator
def hello():
    print("hello world")

hello()
# 2019-04-09 11:38:29
# hello world
# hello function is called.

下面的例子演示了在一個函數返回字符串後,在該字符串先後加上HTML標籤:app

def setTag(tag):
    def myDecorator(func):
        def myWrapper(*args, **kw):
            beginTag = "<" + tag + ">"
            endTag = "</" + tag + ">"
            return beginTag + func(*args, **kw) + endTag
        return myWrapper
    return myDecorator

@setTag("div")
def hello(name):
    return "hello, " + name

print(hello("wayne"))
# <div>hello, wayne</div>

3. 偏函數(partial function)

偏函數是經過將一個函數的部分參數預先綁定爲特定值,從而獲得一個新的具備較少可變參數的函數。
下面的例子用偏函數實現了一個轉換二進制的函數int2函數

import functools

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

print("%d %d" % (int("1010101"), int2("1010101")))
# 1010101 85

partial接收三個參數,形式爲:partial(func, *args, **keywords),上面演示了只提供**keywords的狀況,下面的例子演示了只提供*args的狀況:命令行

import functools

max2 = functools.partial(max, 10)

print(max2(5, 6, 7))
# 等效於max(10, 5, 6, 7)
# 10

4. 模塊

編寫模塊的通常格式以下:
test1.pycode

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'my test1 module'

__author__ = "Wayne"

import sys

def init():
    print(sys.argv)

if __name__ == '__main__':
    init()

當經過命令行的方式運行該模塊文件時,Python解釋器把一個特殊變量__name__置爲__main__。
sys.argv返回的是一個list,執行python3 test1.py,那麼sys.argv獲得的list是['test1.py'];執行python3 test1.py A B,那麼sys.argv獲得的list是['test1.py', 'A', 'B']utf-8

相關文章
相關標籤/搜索