02.29 python面試1000題之1-3

1 利用切片操作,實現一個trim()函數,去除字符串首尾的空格,注意不要調用str的strip()方法.

正解1:

def trim(s):

while s[:1] == ' ':

s = s[1:]

while s[-1:] == ' ':

s = s[:-1]

return s

正解2:

def trim(s):

if s[:1] == ' ':

s = trim(s[1:])

if s[-1:] == ' ':

s = trim(s[:-1])

return s

容易寫錯的方法:

def trim(s):

while s[0] == ' ':

s = s[1:]

while s[-1] == ' ':

s = s[:-1]

return s

解釋:當s=''時,s[0]和s[-1]會報IndexError: string index out of range,但是s[:1])和s[-1:]不會。

2 請設計一個decorator,它可作用於任何函數上,並打印該函數的執行時間.

# -*- coding: utf-8 -*-

import time, functools

def metric(fn):

@functools.wraps(fn)

def wrapper(*args, **kw):

time0 = time.time()

ret = fn(*args, **kw)

time1 = time.time()

print('%s executed in %s ms' % (fn.__name__, time1-time0))

return ret

return wrapper

3 裝飾器的實質是什麼?或者說為什麼裝飾器要寫2層嵌套函數,裡層函數完全就已經實現了裝飾的功能為什麼不直接用裡層函數名作為裝飾器名稱?

答:裝飾器是要把原來的函數裝飾成新的函數,並且返回這個函數本身的高階函數


分享到:


相關文章: