小练习函数

#2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
# def func(l):
#     return l[1::2]  #切片
# print(func([1,2,3,4,5]))

# 3、写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5。
# def func(x):
#     return len(x)>5
# if func('abcd'):
#     print('长度确实大于5')

# 4、写函数,检查传入列表的长度,如果大于2,
# 那么仅保留前两个长度的内容,并将新内容返回给调用者。
# def func(l):
#     return l[:2]
#
# print(func([1,2,3,4]))

# 5、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。
# def func(s):   #'skghfoiw8qpeuqkd'
#     dic = {'num':0,'alpha':0,'space':0,'other':0}
#     for i in s:
#         if i.isdigit():
#             dic['num']+=1
#         elif i.isalpha():
#             dic['alpha'] += 1
#         elif i.isspace():
#             dic['space'] += 1
#         else:
#             dic['other'] += 1
#     return dic
# print(func('+0-0skahe817jashf wet1'))

# 6、写函数,检查用户传入的对象(字符串、列表、元组)
# 的每一个元素是否含有空内容,并返回结果。
# def func(x):
#     if type(x) is str and x:  #参数是字符串
#         for i in x:
#             if i == ' ':
#                 return True
#     elif x and type(x) is list or type(x) is tuple: #参数是列表或者元组
#         for i in x:
#             if not i:
#                 return True
#     elif not x:
#         return True
#
# print(func([]))

#7、写函数,检查传入字典的每一个value的长度,如果大于2,
# 那么仅保留前两个长度的内容,并将新内容返回给调用者。
#    dic = {"k1": "v1v1", "k2": [11,22,33,44]}
#    PS:字典中的value只能是字符串或列表
# def func(dic):
#     for k in dic:
#         if len(dic[k]) > 2:
#             dic[k] = dic[k][:2]
#     return dic
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# print(func(dic))

# 8、写函数,接收两个数字参数,返回比较大的那个数字。
# def func(a,b):
#     if a>b:
#         return a
#     else:
#         return b
# print(func(1,5))

# def func(a,b):
#     return a if a > b else b
# print(func(5,1))

# 三元运算
# a = 1
# b = 5
# c = a if a>b else b   #三元运算
# print(c)

# 变量 = 条件返回True的结果 if 条件 else 条件返回False的结果
#必须要有结果
#必须要有if和else
#只能是简单的情况

# 9、写函数,用户传入修改的文件名,与要修改的内容,
# 执行函数,完成整个文件的批量修改操作(进阶)。
# def func(filename,old,new):
#     with open(filename, encoding='utf-8') as f, open('%s.bak'%filename, 'w', encoding='utf-8') as f2:
#         for line in f:
#             if old in line:  # 班主任:星儿
#                 line = line.replace(old,new)
#             # 写文件
#             f2.write(line)  # 小护士:金老板
#
#     import os
#     os.remove(filename)  # 删除文件
#     os.rename('%s.bak'%filename, filename)  # 重命名文件




# 2、写函数,接收n个数字,求这些参数数字的和。
def sum_func(*args):
    total = 0
    for i in args:
        total += i
    return total
print(sum_func(1,2,3,8,23,6))

# 3、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
#     a=10
#     b=20
#     def test5(a,b):
#          print(a,b)
#     c = test5(b,a)
#     print(c)



# 4、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
#     a=10
#     b=20
#     def test5(a,b):
#         a=3
#         b=5
#          print(a,b)
#     c = test5(b,a)
#     print(c)


# 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),
# 要求登录成功一次,后续的函数都无需再输入用户名和密码
# FLAG = False
# def login(func):
#     def inner(*args,**kwargs):
#         global FLAG
#         '''登录程序'''
#         if FLAG:
#             ret = func(*args, **kwargs)  # func是被装饰的函数
#             return ret
#         else:
#             username = input('username : ')
#             password = input('password : ')
#             if username == 'boss_gold' and password == '22222':
#                 FLAG = True
#                 ret = func(*args,**kwargs)      #func是被装饰的函数
#                 return ret
#             else:
#                 print('登录失败')
#     return inner
#
# @login
# def shoplist_add():
#     print('增加一件物品')
#
# @login
# def shoplist_del():
#     print('删除一件物品')
#
# shoplist_add()
# shoplist_del()

# 2.编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件
# def log(func):
#     def inner(*args,**kwargs):
#         with open('log','a',encoding='utf-8') as f:
#             f.write(func.__name__+'\n')
#         ret = func(*args,**kwargs)
#         return ret
#     return inner
#
# @log
# def shoplist_add():
#     print('增加一件物品')
#
# @log
# def shoplist_del():
#     print('删除一件物品')

# shoplist_add()
# shoplist_del()
# shoplist_del()
# shoplist_del()
# shoplist_del()
# shoplist_del()

# 进阶作业(选做):
# 1.编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果
# 2.为题目1编写装饰器,实现缓存网页内容的功能:
# 具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,否则,就去下载,然后存到文件中
import os
from urllib.request import urlopen
def cache(func):
    def inner(*args,**kwargs):
        if os.path.getsize('web_cache'):
            with open('web_cache','rb') as f:
                return f.read()
        ret = func(*args,**kwargs)  #get()
        with open('web_cache','wb') as f:
            f.write(b'*********'+ret)
        return ret
    return inner

@cache
def get(url):
    code = urlopen(url).read()
    return code


# {'网址':"文件名"}
ret = get('http://www.baidu.com')
print(ret)
ret = get('http://www.baidu.com')
print(ret)
ret = get('http://www.baidu.com')
print(ret)
View Code

posted @ 2019-03-29 21:57  暴走的路人  阅读(184)  评论(0编辑  收藏  举报