Python基礎筆記(四)
1. 返回函數與閉包
如果在一個內部函數里,對在外部作用域(但不是在全局作用域)的變量進行引用,那么內部函數就被認為是閉包(closure)
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標簽:
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.py
#!/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']。

浙公網安備 33010602011771號