Python 函数及常用算法

这篇记录下函数和常用的算法,顺便把上一篇的知识总结 ,写一个案例。

  1.    函数

为了方便调用,通常都会按功能需求将一大串代码写在一个函数下,这和其他语言也一样。函数的定义如下:

def 函数名(参数1,参数2,*args,默认参数,**kwargs):
    '''注释:函数功能和参数说明'''

        函数体
        
        return 返回值

在不调用的情况下函数只读入内存不执行任何操作,若要调用时再一步一步进行

上一段冒泡排序的代码:

def bubble_sort(ary):
	n = len(ary)
	for i in range(n):
		flag = True    # 标记
		for j in range(1, n - i):
			if ary[j] < ary[j-1]:
				ary[j], ary[j-1] = ary[j-1], ary[j]
				flag = False
		# 某一趟遍历如果没有数据交换,则说明已经排好序了,因此不用再进行迭代了
		if flag:
			break
	return ary
l = [3,5,1,12,88,6,19,30,27]
newbubble = bubble_sort(l)
print(newbubble)

函数还可以嵌套

#闭包函数
def func():
    name='alex'
    def bar():
        print(name)
    return bar
b=func()#b就等于bar
b()#这个b()就是bar(),就是一个闭包函数

2.   装饰器

装饰器是起到不修改源代码的前提下,对其效果进行修改的作用。同样上一段代码:

def o1(func):
    def inner():
        print('wrapper1 ,before func')
        func()
        print('wrapper1 ,after func')
    return inner

def o2(func):
    def inner():
        print('wrapper2 ,before func')
        func()
        print('wrapper2 ,after func')
    return inner

@o1#装饰器装饰了被装饰过后的函数,所以对这个装饰器而言下面的都是一个函数,即打印时的顺序为最上面的装饰器先运行
@o2
def f():
    print('in f')
f()

这段代码的输出结果为:
wrapper1 ,before func
wrapper2 ,before func
in f
wrapper2 ,after func
wrapper1 ,after func

Python的内置函数也有许多,常用的在我么这两篇中如print()、input()等,百度了一张图,贴在下面,用到的时候可以在官网:https://docs.python.org/3/library/functions.html#object 查询

另外补充一个知识点:迭代器和生成器

l = [1,2,3,4]
l_iter = l.__iter__()#l_iter只是一个接受的变量
while True:
    try:
        item = l_iter.__next__()
        print(item)
    except StopIteration:
        break

生成器其实是开发者自己写的,使用yield语句而不是return语句返回结果。
yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行

import time
def func():
    a = 1
    print('现在定义了a变量')
    yield a
    b = 2
    print('现在又定义了b变量')
    yield b

g1 = func()
print(next(g1)) #等效于 g1.__next__()
time.sleep(1)   #sleep一秒看清执行过程
print(g1.__next__())#每print一次next才会出来一个yield的值,不然就挂在上一个yield上不继续执行

输出为:

现在定义了a变量
1
现在又定义了b变量
2

其中在1和现在有定义了b变量之间可以明显看到间隔。

留一个题目

def add(n,i):
    return n+i

def test():
    for i in range(4):
        yield i

g=test() #[0,1,2,3]
print(type(g))
for n in [1,10]:
    g=(add(n,i) for i in g) #for循环的一种写法 遍历i在g中,返回add(n,i)

print(list(g))#输出结果为:[20,21,22,23] 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值