Python中的函数2

1.装饰器

1.1 闭包

  1.  闭包三要素:
    1. 1. 外部函数嵌套内部函数
    2. def f1():
          def f2():
              pass

      2.外部函数将内部函数返回

    3. def f1():
          print("f1")
      
          def f2():
              print("f2")
          return f2
      
      
      r = f1()
      r()

      3.内部函数可以访问保存外部函数局部变

    4. def f1():
          print("f1")
          i = 0
      
          def f2():
              # nonlocal相当于global, 但是使用的是外部函数的局部变量
              nonlocal i
              i += 1
              print("f2", i)
      
          return f2
      
      # r 等于f2(r内部保存了变量i)
      r = f1()
      r()
      r()
      r()

      1.2 装饰器

        装饰器是Python中一种非常有用的语法特性,它可以在不修改原函数代码的情况下,通过在原函数的前后添加额外的功能或逻辑。装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。

编写代码演示装饰器语法的思路:

  1. 定义3个基本函数
  2. 编译闭包
  3. 使用闭包加工原始3个函数
  4. 给闭包添加权限校验
  5. 函数调用
  6. 使用@装饰器语法糖

1.3案例

1.时间统计:随机 0-1000以内的500个数字放入列表,使用冒泡排序与选择排序对列表进行升序,编写装饰器,统计两个方法的时间开销

import random
import time


l0 = []
for i in range(500):
    l0.append(random.randint(0,1000))

l1 = [i for i in l0]


def time_calc(f):
    def calc():
        start = time.time()
        f()
        print(time.time() - start)
    return calc


@time_calc
def sort1():
    for i in range(len(l0)-1):
        for j in range(i+1,len(l0)):
            if l0[i] > l0[j]:
                l0[i],l0[j] = l0[j],l0[i]


@time_calc
def sort2():
    for i in range(len(l0)-1):
        min_index = i
        for j in range(i+1,len(l0)):
            if l1[j] < l1[min_index]:
                min_index = j
        if min_index != i:
            l1[i], l1[min_index] = l1[min_index], l1[i]


sort1()
sort2()

2.用户校验:用户输入用户名进入首页,输入正确进入购物车和个人中心

def login_required(f):
    def check():
        username = input("输入用户名")
        if username == "admin":
            f()
        else:
            print("校验失败")
    return check


def index():
    print("首页")


@login_required
def cart():
    print("购物车")


@login_required
def mine():
    print("我的")


index()
cart()
mine()

2.内置函数

1.len 长度

print(len("hello"))

2.数学部分

import math
# 绝对值
print(abs(-20))
# 求整除和余,第一个为整除,第二个为求余
print(divmod(50,6))
#次方
print(pow(10,2))
# 向上取整,向下取整
print(math.ceil(3.14))
print(math.floor(3.14))
# 四舍五入
print(round(3.5))
#求和
print(sum([i for i in range(10)]))

3.all

# 所有元素为真,结果为真;一个元素未假,结果为假
print(all([10,2,1]), all([]))

4.any

# 所有元素为假,结果为假,内容为空,返回假
print(any([False,0,None]),any([]))

5.进制

# 十进制转二
print(bin(10))
# 十进制转八进制
print(oct(21))
# 十进制转十六进制
print(hex(20))

6.callable 可调用函数和类名

# 可调用,函数.类名
print(callable(10),callable(lambda x:x))

7.ASCII

# ASCII  字符转码,码转字符
print(chr(98),chr(67),ord("A"),ord("Z"))

8.局部与全部字典

num = 100
s0 = "hello"
def f():
    i = 99
# 返回所有局部变量,在函数内部使用
    result2 = locals()
    print(result2)
f()
# 返回全局变量
result = globals()
print(result)

9.输入输出

input 输入       print输出

10.最大与最小

print(max([{"age":20"},{"age":15,},{age":30}],key = lambda x:x["age"]))
print(min([{"age": 15}, {"age": 5}, {"age": 25}], key=lambda x: x["age"]))

11. Id :返回对象唯一标识

12.未来学习

  1. delattr:删除属性
  2. getattr:获取属性
  3. hasattr:是否有属性
  4. setattr:设置属性
  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值