python函数封装图解_函数的封装解构

函数的定义:

数学定义函数: y=f(x),y是x的函数,x是自变量

函数的作用:

为了复用,简单易懂

函数分类:

内建函数,如max(),reversed()

库函数,如math.ceil()等

利用def语句定义函数:

def 函数名(型参列表):

函数体(代码块)

[return 返回值]

函数名是标识符,命名要求一样,要求【见名知义】 ;

语句块必须缩进4个空格;

若在定义函数中,没有return语句,会隐式返回一个none值

定义中的参数列表成为形式参数,只是一种符号表达,简称为形参

调用:

函数定义,只声明一个函数,不会被执行,需要调用

在定义的函数后加上()即可调用

调用时()括号里的值时实际参数,是实实在在传入的值,简称为实参

定义函数举例:

def add(x,y):

result(x+y)

return result

定义完后调用add函数:

add(4,5)

因为有return,所有会返回4+5的值

上述函数定义中,有一个函数叫做add,可接收两个参数;

计算的结果,通过return返回;

调用通过函数add加2个参数,返回值可使用变量接收;

定义需要在调用前,也就是说调用是,已经被定义了,则会抛nameerror

查询一个函数是否存在,可用callable()

函数参数:

参数调用是传入的参数要和定义的个数匹配(*可变参数例外)

位置参数:

def f(x,y,z)调用使用 f(1,3,5)

按照参数定义顺序传送实参

关键字参数:

def f(x,y,z)调用可使用关键字f(x=1,y=2,z=3)

使用形参的名字来传送实参,如果使用看形参名字,则传参顺序就可以随意)

传参:

要求位置参数必须在关键字参数之前传入,位置参数是按位置对应的

函数参数的默认值:

定义参数时,位置参数在前,关键字在后

定义时,可在形参后跟上一个值:

def add(x=4,y=5):

return(x+y)

作用:

参数的默认值可在未传入足够的实参时,对没有给定的参数赋值为默认值

参数较多时,不需要用户每次都输入所有的参数,简化函数调用

可变参数:

一个形参可匹配任意个参数,包括0个

在形参前使用 *号,表示该参数时可变参数,可以接收多个实参

收集多个实参为一个tuple

关键字参数的可变参数:

举例:

def showconfig(**kwargs):

for k,v in kwargs.items():

print('{}={}'.format(k,v))

形参前使用**符号,表示可接收多个关键字参数

收集的实参名称和值组成一个字典(利用items调用)

参数总结:

有位置可变参数和关键字可变参数;

使用位置可变参数,在形参前添加一个*即可表示

关键字可变参数在形参前添加两个**即可表示

位置可变参数和关键字可变参数都可以添加 0到若干 个实参,位置可变参数会收集成为一个元组,而关键字可变参数会收集为一个字典

混合使用参数时,普通位置参数在前,关键字参数其次,可变位置参数跟上,可变关键字参数收尾

用代码表示为 def fn( x , y=2 , *args , **kwargs )

keyword-only参数:

如果在一个*号参数后,或者一个位置可变参数后,出现的普通参数,实际上已经时keyword-only参数

举例:

def fn(*args,x):

print(x)

print(args)

fn(3,5,x=7)

args可以已经截获了所有的位置参数,x不使用关键字参数就拿不到实参

keyword-only不能在可变关键字后使用

def fn(**kwargs,x):

print(x)

print(kwargs)

因为※号后是keyword-only参数,所以只能用关键字传参,而关键字传参,会被可变关键字获取,所以x没有获取到参数会报错

keyword-only的另一种形式:

def fn(*,x,y):

print(x,y)

※号 只允许两个keyword-only参数,本身毫无意义

函数参数规则:

参数列表一般顺序为:普通参数,默认值参数,可变位置参数,keyword-only参数(可带缺省值),可变关键字参数

代码实现为(x , x=5,*args,y,y=5,**kwargs)

写函数时,应写的 易读易懂,按照书写习惯定义函数

7675462.html

参数解构和可变参数:

给元素提供实参时,可在集合类型前使用 * or ** ,把集合类型解开,提取所有元素作为函数的实参

举例:

def add(*iterable)

result=0

for x in iterable:

result+=x

return result

非字典类型使用 * 解构为 位置参数

字典类型使用 ** 解构为关键字参数

提取出来的元素数目要和参数的要求匹配,也要和参数的类型匹配

利用函数写一个程序,判断随机数的极值

import random

def nums(*args):

print(*args)

return max(args),min(args)

print(*nums([*randrom.randint(10,1000)for _ in range(10)]))

直接插入排序:

在未排序的序列中,构建一个以排序序列,直到排序完成

将待排序的数,插入进以排序的序列中合适的位置

增加一个哨兵,放入待比较值,让他和后面以排好的序列比较,找到合适的插入点

总结:

最好情况,正好时升序排序,比较迭代n-1次

最差情况,正好是降序排列,比较迭代1,2.....n-1即 n(n-1)/2

使用两层嵌套,时间复杂度为O(n^2)

使用小规模数据比较

优化:

如果比较操作耗时较大,可以采用二分查找来提高效率,即二分查找排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值