装饰器和推导式
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 2.請為 func 函數編寫一個裝飾器,添加上裝飾器后可以實現:執行func時,先輸入"before",然后再執行func函數內部代碼。
"""
def di(arg):
def inner():
print('before')
v = arg()
return v
return inner
@di
def func():
return 100 + 200
val = func()
print(val)
"""
# 3.請為 func 函數編寫一個裝飾器,添加上裝飾器后可以實現:執行func時,先執行func函數內部代碼,再輸出 "after"
"""
def di(arg):
def inner():
print(arg())
print('after')
return inner
@di
def func():
return 100 + 200
val = func()
"""
# 4.請為以下所有函數編寫一個裝飾器,添加上裝飾器后可以實現:執行func時,先執行func函數內部代碼,再輸出 "after"
"""
def di(arg):
def inner(*args, **kwargs):
print(arg(*args, **kwargs))
print('after')
return inner
@di
def func(a1):
return a1 + "傻叉"
@di
def base(a1, a2):
return a1 + a2 + '傻缺'
@di
def base2(a1, a2, a3, a4):
return a1 + a2 + a3 + a4 + '傻蛋'
base('a', 'b')
func("a")
base2('a','b','c','d')
"""
# 5.請為以下所有函數編寫一個裝飾器,添加上裝飾器后可以實現:將被裝飾的函數執行5次,講每次執行函數的結果按照順序放到列表
# 中,最終返回列表。
"""
import random
lst = []
def decorate(arg):
def inner():
for i in range(5):
lst.append(arg())
return inner
@decorate
def func():
return random.randint(1, 4)
result = func() # 執行5次,并將每次執行的結果追加到列表最終返回給result
print(result)
print(lst)
"""
# 6.請為以下函數編寫一個裝飾器,添加上裝飾器后可以實現:執行 read_userinfo 函時,先檢查文件路徑是否存在,如果存在則執行
# 后,如果不存在則 輸入文件路徑不存在,并且不再執行read_userinfo函數體中的內容,再講 content 變量賦值給None。
'''
import os
def decorate(arg):
def inner(*args):
if os.path.exists:
v = arg(*args)
print(v)
return v
else:
print('文件路徑不存在')
return inner
@decorate
def read_userinfo(path):
file_obj = open(path, mode='r', encoding='utf-8')
data = file_obj.read()
file_obj.close()
return data
content = read_userinfo('a.txt')
"""
溫馨提示:如何查看一個路徑是否存在?
import os
result = os.path.exists('路徑地址')
# result為True,則表示路徑存在。
# result為False,則表示路徑不存在。
"""
'''
# 7.請為以下 user_list函數編寫一個裝飾器,校驗用戶是否已經登錄,登錄后可以訪問,未登錄則提示:請登錄后再進行查看,然后
# 再給用戶提示:系統管理平臺【1.查看用戶列表】【2.登錄】并選擇序號。此變量用于標記,用戶是否經登錄。
# True,已登錄。
# False,未登錄(默認)
'''
CURRENT_USER_STATUS = False
def decorate(arg):
def inner():
if CURRENT_USER_STATUS:
return arg()
else:
print('請登錄后查看!')
return
return inner
@decorate
def user_list():
"""查看用戶列表"""
for i in range(1, 100):
temp = "ID:%s 用戶名:老男孩-%s" % (i, i,)
print(temp)
def login():
"""登錄"""
print('歡迎登錄')
while True:
username = input('請輸入用戶名(輸入N退出):')
if username == 'N':
print('退出登錄')
return
password = input('請輸入密碼:')
if username == 'alex' and password == '123':
global CURRENT_USER_STATUS
CURRENT_USER_STATUS = True
print('登錄成功')
return
print('用戶名或密碼錯誤,請重新登錄。')
def run():
func_list= [user_list,login]
while True:
print("""系統管理平臺
1.查看用戶列表;
2.登錄""")
index = int(input('請選擇:'))
if index >=0 and index < len(func_list)+1:
func_list[index-1]()
else:
print('序號不存在,請重新選擇。')
run()
'''
# 8.看代碼寫結果
'''
v = [lambda:x for x in range(10)]
print(v) # [十個不同的lambda地址]
print(v[0]) # 一個內存地址
print(v[0]()) # 9
'''
# 9.看代碼寫結果
'''
v = [i for i in range(10,0,-1) if i > 5]
print(v) # [10,9,8,7,6]
'''
# 10.看代碼寫結果
'''
data = [lambda x:x*i for i in range(10)] # 新浪微博面試題
print(data) # [十個不同的lambda地址]
print(data[0](2)) # 18
print(data[0](2) == data[8](2)) # True
'''
# 11.請用列表推導式實現,踢出列表中的字符串,然后再將每個數字加100,最終生成一個新的列表保存。
'''
data_list = [11, 22, 33, "alex", 455, 'eirc']
new_data_list = [i+100 for i in data_list if type(i)!=str] # 請在[]中補充代碼實現。
print(new_data_list)
'''
# 12.請使用字典推導式實現,將如果列表構造成指定格式字典.
'''
data_list = [
(1, 'alex', 19),
(2, '老男', 84),
(3, '老女', 73)
]
"""請使用推導式將data_list構造生如下格式:
info_list = {
1: ('alex', 19),
2: ('老男', 84),
3: ('老女', 73)
}
"""
info_list = { i[0]:(i[1],i[2]) for i in data_list}
print(info_list)
'''
# -*- coding:utf-8 -*-
# 2.請為 func 函數編寫一個裝飾器,添加上裝飾器后可以實現:執行func時,先輸入"before",然后再執行func函數內部代碼。
"""
def di(arg):
def inner():
print('before')
v = arg()
return v
return inner
@di
def func():
return 100 + 200
val = func()
print(val)
"""
# 3.請為 func 函數編寫一個裝飾器,添加上裝飾器后可以實現:執行func時,先執行func函數內部代碼,再輸出 "after"
"""
def di(arg):
def inner():
print(arg())
print('after')
return inner
@di
def func():
return 100 + 200
val = func()
"""
# 4.請為以下所有函數編寫一個裝飾器,添加上裝飾器后可以實現:執行func時,先執行func函數內部代碼,再輸出 "after"
"""
def di(arg):
def inner(*args, **kwargs):
print(arg(*args, **kwargs))
print('after')
return inner
@di
def func(a1):
return a1 + "傻叉"
@di
def base(a1, a2):
return a1 + a2 + '傻缺'
@di
def base2(a1, a2, a3, a4):
return a1 + a2 + a3 + a4 + '傻蛋'
base('a', 'b')
func("a")
base2('a','b','c','d')
"""
# 5.請為以下所有函數編寫一個裝飾器,添加上裝飾器后可以實現:將被裝飾的函數執行5次,講每次執行函數的結果按照順序放到列表
# 中,最終返回列表。
"""
import random
lst = []
def decorate(arg):
def inner():
for i in range(5):
lst.append(arg())
return inner
@decorate
def func():
return random.randint(1, 4)
result = func() # 執行5次,并將每次執行的結果追加到列表最終返回給result
print(result)
print(lst)
"""
# 6.請為以下函數編寫一個裝飾器,添加上裝飾器后可以實現:執行 read_userinfo 函時,先檢查文件路徑是否存在,如果存在則執行
# 后,如果不存在則 輸入文件路徑不存在,并且不再執行read_userinfo函數體中的內容,再講 content 變量賦值給None。
'''
import os
def decorate(arg):
def inner(*args):
if os.path.exists:
v = arg(*args)
print(v)
return v
else:
print('文件路徑不存在')
return inner
@decorate
def read_userinfo(path):
file_obj = open(path, mode='r', encoding='utf-8')
data = file_obj.read()
file_obj.close()
return data
content = read_userinfo('a.txt')
"""
溫馨提示:如何查看一個路徑是否存在?
import os
result = os.path.exists('路徑地址')
# result為True,則表示路徑存在。
# result為False,則表示路徑不存在。
"""
'''
# 7.請為以下 user_list函數編寫一個裝飾器,校驗用戶是否已經登錄,登錄后可以訪問,未登錄則提示:請登錄后再進行查看,然后
# 再給用戶提示:系統管理平臺【1.查看用戶列表】【2.登錄】并選擇序號。此變量用于標記,用戶是否經登錄。
# True,已登錄。
# False,未登錄(默認)
'''
CURRENT_USER_STATUS = False
def decorate(arg):
def inner():
if CURRENT_USER_STATUS:
return arg()
else:
print('請登錄后查看!')
return
return inner
@decorate
def user_list():
"""查看用戶列表"""
for i in range(1, 100):
temp = "ID:%s 用戶名:老男孩-%s" % (i, i,)
print(temp)
def login():
"""登錄"""
print('歡迎登錄')
while True:
username = input('請輸入用戶名(輸入N退出):')
if username == 'N':
print('退出登錄')
return
password = input('請輸入密碼:')
if username == 'alex' and password == '123':
global CURRENT_USER_STATUS
CURRENT_USER_STATUS = True
print('登錄成功')
return
print('用戶名或密碼錯誤,請重新登錄。')
def run():
func_list= [user_list,login]
while True:
print("""系統管理平臺
1.查看用戶列表;
2.登錄""")
index = int(input('請選擇:'))
if index >=0 and index < len(func_list)+1:
func_list[index-1]()
else:
print('序號不存在,請重新選擇。')
run()
'''
# 8.看代碼寫結果
'''
v = [lambda:x for x in range(10)]
print(v) # [十個不同的lambda地址]
print(v[0]) # 一個內存地址
print(v[0]()) # 9
'''
# 9.看代碼寫結果
'''
v = [i for i in range(10,0,-1) if i > 5]
print(v) # [10,9,8,7,6]
'''
# 10.看代碼寫結果
'''
data = [lambda x:x*i for i in range(10)] # 新浪微博面試題
print(data) # [十個不同的lambda地址]
print(data[0](2)) # 18
print(data[0](2) == data[8](2)) # True
'''
# 11.請用列表推導式實現,踢出列表中的字符串,然后再將每個數字加100,最終生成一個新的列表保存。
'''
data_list = [11, 22, 33, "alex", 455, 'eirc']
new_data_list = [i+100 for i in data_list if type(i)!=str] # 請在[]中補充代碼實現。
print(new_data_list)
'''
# 12.請使用字典推導式實現,將如果列表構造成指定格式字典.
'''
data_list = [
(1, 'alex', 19),
(2, '老男', 84),
(3, '老女', 73)
]
"""請使用推導式將data_list構造生如下格式:
info_list = {
1: ('alex', 19),
2: ('老男', 84),
3: ('老女', 73)
}
"""
info_list = { i[0]:(i[1],i[2]) for i in data_list}
print(info_list)
'''
轉載于:https://www.cnblogs.com/zjx1/p/10712572.html
總結
- 上一篇: 正则只能输入数字,一个小数点,第一位不能
- 下一篇: leecode第一百四十八题(排序链表)