python之路_函数实例及装饰器介绍

一、习题讲解

1、写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组。例如:[(‘红心’,2), (‘草花’,2), …(‘黑桃,‘A’)]

def cards():
    num=[]
    for v in range(2,11):
        num.append(v)
    num.extend([‘J‘,‘Q‘,‘K‘,‘A‘])
    type=[‘红心‘,‘草花‘,‘方块‘,‘黑桃‘]
    result=[]
    for i in num:
        for j in type:
            result.append((j,i))
    return result

print(cards())

2、写函数,传入n个数,返回字典:{‘max’:最大值,’min’:最小值}。例如: min_max(2, 5, 7, 8, 4),返回: {‘max’:8,’min’:2}

def max_min(*args):
    the_max=args[0]
    the_min=args[0]
    for i in args:
        if i>the_max:
            the_max=i
        if i<the_min:
            the_min=i
    return {‘max‘:the_max,‘min‘:the_min}
print(max_min(2,4,1,55,-3))

3、写函数,专门计算图形的面积。其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积

   调用函数area(‘圆形’, 圆半径)  返回圆的面积  调用函数area(‘正方形’, 边长)  返回正方形的面积  调用函数area(‘长方形’, 长,宽)  返回长方形的面积

#方法一:import math
def area(name,*args):
    def areas_rectangle(x,y):
        return x*y

    def area_square(x):
        return x**2

    def area_round(r):
        return math.pi*r*r

    if name=="圆形":
        return  area_round(*args)
    elif name=="正方形":
        return area_square(*args)
    elif name=="长方形":
        return areas_rectangle(*args)

print(area(‘长方形‘, 3, 4))
print(area(‘圆形‘, 3))
print(area(‘正方形‘, 3))

#方法二(eval)
import math
def area(name,*args):
    def rectangle(x,y):
        return x*y

    def square(x):
        return x**2

    def round(r):
        return math.pi*r*r
    if name in locals():
        return eval(name)(*args)
print(area(‘rectangle‘,13,2))

4、写函数,传入一个参数n,返回n的阶乘。例如: cal(7) 计算7 * 6 * 5 * 4 * 3 * 2 * 1

ef cal(n):
    result=1
    for i in range(n,0,-1):
        result=result*i
    return result

print(cal(7))

5、斐波那契数列:[1,1,2,3,5,8,13,...],每个元素为前两个元素之和

  (1)当要求长度小于某个值的时候:

l = [1,1]
while len(l)<20:
    l.append(l[-1]+l[-2])
print(l)

  (2)当要求小于某个数的时候:

l = [1,1]
while l[-1]<4000000:
    l.append(l[-1]+l[-2])
del l[-1]
print(l)

二、函数装饰器

  在不修改原函数的内容及调用方式的前提下,对原函数进行功能扩展

1、计算函数执行时间实例

import time
def timmer(func):                                                #装饰器
    def innner(*args,**kwargs):
        start=time.time()
        ret=func(*args,**kwargs)
        end=time.time()
        print(start-end)
        return ret
    return innner

@timmer                                                          #语法糖,等价name=timmer(name)

def name(a,b):                                                   #被装饰函数
    print(‘老板万岁‘)
    return a+b

name(4,6)

2、打印当前正在调用函数名的实例

def wrapper(func):
    def inner(*args,**kwargs):
        print(‘你当前调用的函数是:%s‘ %func.__name__)
        ret=func(*args,**kwargs)
        return ret
    return inner
@wrapper
def welcome(name):
    print(‘welcome,%s‘ %name)
welcome(‘zhangli‘)
@wrapper
def home():
    print(‘欢迎来到home页‘)
home()

作业题:

1、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码

flag=False
def login(func):
    def inner(*args,**kwargs):
        global flag
        while not flag:
            name=input(‘请输入用户名:‘)
            pwd=input(‘请输入密码:‘)
            with open(‘file‘,‘r‘,encoding=‘utf-8‘) as f:
                for line in f:
                    lst=line.strip().split(‘|‘)
                    if name==lst[0] and pwd==lst[1]:
                         print(‘登陆成功’)
                          flag=True
         whlie flag:
            ret=func(*args,**kwargs)
            return ret
    return inner
@login
def name1():
    print(‘你好吗?‘)
@login
def name2():
    print(‘我还好’)
name1()
name2()

原文:https://www.cnblogs.com/seven-007/p/7460241.html

原文地址:https://www.cnblogs.com/fmgao-technology/p/9072258.html

时间: 2024-10-13 00:53:45

python之路_函数实例及装饰器介绍的相关文章

NO.4:自学python之路------内置方法、装饰器、迭代器

引言 是时候开始新的Python学习了,最近要靠英语,可能不会周更,但是尽量吧. 正文 内置方法 Python提供给了使用者很多内置方法,可以便于编程使用.这里就来挑选其中大部分的内置方法进行解释其用途. abs() #求取绝对值,例子. a = -5 abs(a)#求绝对值 all() #迭代对象全为真,则返回Ture,否则返回False,例子. all([1,5,6])#True all([5,0,6])#False any() #与all类似,但是有真则返回Ture,全假返回False,例

Python学习笔记6-python函数补充、装饰器、模块

本文主要学习内容有 函数知识的补充 装饰器(无参.有参.非固定参数.有返回值) 函数知识的补充 稍后待续...

Python不归路_字符编码操作

文件操作补充 上篇随笔中写了文件操作的几个方法,其中truncate()方法遗漏,truncate()方法作用是截取内容,f.truncate()不带参数会清空文件内容,带参数表示截取从零到参数的位置 字符编码 在<Python不归路_零基础学习二>中我们已经学习了一些编码的知识,比如ASCII一共有255个符号,Unicode中,中文字符占两个字节,英文占一个字节,utf-8是unicode的优化方案,中文字节占三个字符.不同字符编码之间需要相互转化才能正常读取.encode和decode,

python笔记--3--函数、生成器、装饰器、函数嵌套定义、函数柯里化

函数 函数定义语法: def 函数名([参数列表]): '''注释''' 函数体 函数形参不需要声明其类型,也不需要指定函数返回值类型 即使该函数不需要接收任何参数,也必须保留一对空的圆括号 括号后面的冒号必不可少 函数体相对于def关键字必须保持一定的空格缩进 Python允许嵌套定义函数 在定义函数时,开头部分的注释并不是必需的,但是如果为函数的定义加上这段注释的话,可以为用户提供友好的提示和使用帮助. Python是一种高级动态编程语言,变量类型是随时可以改变的.Python中的函数和自定

【Python基础】高阶函数+函数嵌套+闭包 ==装饰器

高阶函数+函数嵌套+闭包 == 装饰器 一 什么是装饰器 二 装饰器需要遵循的原则 三 实现装饰器知识储备 四 高阶函数 五 函数嵌套 六 闭包 七 无参装饰器 八 装饰器应用示例 九 超时装饰器 参考: https://www.cnblogs.com/linhaifeng/articles/6140395.html https://www.cnblogs.com/haiyan123/p/8387769.html 原文地址:https://www.cnblogs.com/XJT2018/p/11

第四天 内置函数2 随机码 装饰器 迭代器、生成器 递归 冒泡算法 JSON

关于函数的return li = [11,22,33,44] def f1(arg): arg.append(55) li = f1(li) print(li) 因为li = f1(li) 实际赋值的是f1的return,那么在这种情况下函数f1并未定义return,所以默认返回None 因此li的值应该是none 如果是 li = [11,22,33,44] def f1(arg): arg.append(55) f1(li) print(li) 因为函数传递的参数实际是参数的引用,因此在函数

Python全栈开发之8、装饰器详解

一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大,但是理解起来有些困难,因此我尽量用最简单的例子一步步的说明这个原理. 1.不带参数的装饰器 假设我定义了一个函数f,想要在不改变原来函数定义的情况下,在函数运行前打印出start,函数运行后打印出end,要实现这样一个功能该怎么实现?看下面如何用一个简单的装饰器来实现

流畅的python学习笔记第七章:装饰器

装饰器就如名字一样,对某样事物进行装饰过后然后返回一个新的事物.就好比一个毛坯房,经过装修后,变成了精装房,但是房子还是同样的房子,但是模样变了. 我们首先来看一个函数.加入我要求出函数的运行时间.一般来说代码写成如下.但是我有很多个函数都要计算运行时间.每个函数里面都要写一个计时的过程是一件很麻烦的事. def target():     start=time.time()     print 'running target()'     end=time.time()     print e

Python 基础 - Day 4 Learning Note - Decorator 装饰器

装饰器的知识准备 函数,函数参数 作用域: 全局变量,局部变量 变量解析规则:LEGB法则 - 假设嵌套函数(第二层函数),解析器查找内部函数的变量的顺序如下. 在任何一层先找到了符合要求的变量,则不再向外查找.如果没有,则抛出N Local - 本地函数内部,通过任何方式赋值的,而且没有被global关键字声明为全局变量的变量 Enclosing - 直接该内部函数的外围空间(即它的上层函数)的本地作用域.多层嵌套,则有内而外逐层查找,直至最外层的函数 Global - 全局空间(模块encl