+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-03(1)

2019-04(2)

2019-06(1)

2019-07(5)

2019-08(95)

Python DAY 10 函数进阶

发布于2020-08-01 21:15     阅读(786)     评论(0)     点赞(12)     收藏(4)


Python DAY 10 函数进阶 知识点总结

一 装饰器 [掌握]

  1. 概述
    1. 如果一个函数需要增加功能 却不改变函数内部 我们可以使用装饰器
    2. 在代码运行期间 可以增加函数的功能的方式 我们成为装饰器
    3. 也就是说 在不修改原函数的基础上 给函数增加新功能
    4. 好处:在团队开发中 如果两个或者两个以上的程序员会用到相同的功能 但是功能又有细微的差别 采用装饰器:互不影响 代码简化
  2. 使用
    1. 简单的装饰器
def text():
print('123')

def outer(func):
	def inner():
		print('5678')
		fun()
	inner()

f = outer(text) #f = inner
f() #inner

注意 1. 增加的功能可以写在原函数的前面或者后面
2. outer函数就被称之为装饰器

  1. 有参数的装饰器
def getAge(age):
	print(age)
getAge(10) #10
getAge(-5) #-5

def wrapper(func):
	def inner(num):
		if num<0:
			num = 0
		func(num)
	return inner

f = wrapper(getAge)
f(10) #10
f(-5) #0

注意 当原函数有参数 装饰器的作用就是为了操作员函数中的参数 给inner当参数

  1. 系统的简写
    简化demo2 中的操作 :@装饰器名称 应用到原函数中
def wrapper(func):
    def inner(num):
        if num < 0:
            num = 0

        func(num)
    return inner


@wrapper
def getAge(age):
    print(age)


getAge(10)
getAge(-5)
print(getAge.__name__)

@wrapper
等价于
f = wrapper(getAge)
f(10) # 10

注意 当使用@的时候 在同一个文件里 装饰器必须出现在原函数的前面

  1. 不定长参数的装饰器
    应用场景 当同一个装饰器作用域不同的函数的时候 这个函数的参数的个数可以是不相等的
def wrapper(func):
	def inner(*args):
		print('hello')
		func(*args)
	return inner

@wrapper
def func1(a,b):
	print(a,b)
fun1(1,2)

@wrapper 
def fun2(a,b,c,d):
	print(a,b,c,d)
fun2(1,2,3,4)

结论 多个装饰器作用于同一个函数的时候 从第一个装饰器开始 从上向下依次执行 但是 原函数只会被执行一次

二 函数递归 [掌握]

  1. 概念
    1. 递归函数 一个会调用自身的函数[在函数的内部 自己调用自己]
    2. 递归调用 递归中包含了一种隐式的循环 他会重复指定某段代码[函数体] 但是这种循环不需要条件控制
    3. 使用递归解决问题的思路
      1. 找到一个临界条件[临界值]
      2. 找到相邻两次循环之间的关系
      3. 一般情况下 会找到一个规律[公式]
#案例一 : 斐波那契数列
# 1,1,2,3,5,8,13,21,34,55…………

#规律:1. 第一个位置和第二个位置上数是固定的 都是1
# 2.第n个位置上的数 等于 第n-1个数 + 第n-2个数
def func1(num):
	if num == 1 or num == 2:
		return 1
	else:
		result = func1(num-1) + func2(num-2)
		return result
print(func(10))

案例二 定义一个函数 打印出1-n的数字之和

def func1(num):
    if num == 1:
        return 1
    else:
        result = num + func1(num-1)
        return result

print(func1(10)) #55

三 栈和列表[了解]

用于存储数据的线性表
栈:在表的一端进行插入和删除
队列:在表的一段进行插入 在表的另一端进行数据删除

  1. Stack
    开口向上的容器 先进后出 后进先出
    代码展示:
myStack = []

#入栈
myStack.append(1)
print(myStack)
myStack.append(2)
print(myStack)
myStack.append(3)
print(myStack)
myStack.append(4)
print(myStack)
myStack.append(5)
print(myStack) #[1,2,3,4,5]

#出栈
myStack.pop()
print(myStack)
myStack.pop()
print(myStack)
myStack.pop()
print(myStack)
myStack.pop()
print(myStack)
myStack.pop()
print(myStack)

#
'''
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[1]
[]
'''
  1. 队列
    queue
import collections

queue = collections.deque([1,2,3,4,5])
print(queue) #deque([1, 2, 3, 4])

queue.append(5)
print(queue)
queue.append(6)
print(queue)

queue.popleft()
print(queue)
queue.popleft()
print(queue)
queue.popleft()
print(queue)

#
'''
deque([1, 2, 3, 4, 5])
deque([1, 2, 3, 4, 5, 6])
deque([2, 3, 4, 5, 6])
deque([3, 4, 5, 6])
deque([4, 5, 6])
'''


所属网站分类: 技术文章 > 博客

作者:加班是一种习惯

链接: https://www.pythonheidong.com/blog/article/468772/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

12 0
收藏该文
已收藏

评论内容:(最多支持255个字符)