网站主题制作,安徽建设工程信息网官网优秀中项网,公司建站费用,网站开发公司名单一、函数
1.为什么要使用函数#xff1f;
减少代码的冗余
2.函数先定义后使用#xff08;相当于变量一样先定义后使用#xff09;
3.函数的分类#xff1a;
内置函数#xff1a;python解释器自带的#xff0c;直接拿来用就行了
自定义函数#xff1a;根据自己的需求自己…一、函数
1.为什么要使用函数
减少代码的冗余
2.函数先定义后使用相当于变量一样先定义后使用
3.函数的分类
内置函数python解释器自带的直接拿来用就行了
自定义函数根据自己的需求自己定义的函数
def func(): #函数名打印出来的是内存地址
注释
函数体
4.函数定义都干了些什么事
只检测语法不执行代码
5.函数就是一段功能尽量把函数名定义的有意义
6.定义函数的三种方式
有参数的函数就是接受外部传进来的值进行一系列的运算最后吧结果返回出来
无参数的函数通常只是做一下操作而已
空函数什么事情都不做就是一个空函数即便是一个空函数他也会有如下属性
7.函数的返回值可返回任意类型的值
什么时候需要有返回值具体情况具体分析
什么时候没有返回值具体情况具体分析
8.yield和return的区别
yield 停在那呢挂起了
yield 能返回多次值;return 返回一次值
yield 保存函数状态
9.函数的调用函数名加()
10.函数参数
形参定义函数时括号内写的参数
形参在定义阶段是不占内存空间的在调用的时候才占用内存空间
实参:在调用函数时括号内传进来的值
函数参数的具体用法
1.位置参数
1.按照位置传参
按位置定义的形参必须要传值
按位置定义的实参按照位置与形参一一对应的传
2.按照关键字传数按照keyvalue的形式定义的实参传的时候与位置没有关系
def foo(x,y):
pass
foo(1,2) #与形参一一对应
foo(y2,x1) #关键字参数指名道姓的传
foo(1,y2) #混用位置实参和关键字实参
#混着用时注意1.不能给同一个形参重复赋值
2.位置实参必须在关键字实参的前面
2.默认参数在定义阶段就已经为形参赋值了意味着在调用阶段就可以不为默认参数传值
如果给默认参数传值了就把一开始设置的给替换了。
默认参数定义的场景大多数都是男性女性很少时就可以设置个默认当然还有其他场景
注意1.默认参数必须在位置形参后面
2.默认参数的值只在函数定义阶段生效一次定义之后的修改不会影响它的值
3.默认参数不要弄成可变类型的就像是列表就是一个坑
3.动态参数
可变长度的参数长度指的是参数的个数:参数*,**
1.*会把多出来的值传给z,并且以元组的形式返回
2.**会把多出来的值传给z,并且以字典的形式返回
3.在实参中只要碰到*()就是打散了
只要是可迭代的就可以用*
*就相当于for循环的操作遇到*先打散
*args,**kwargs可传任意值
可变长度的参数从实参的角度推算出形参对应的形式*和**
针对按照位置定义的实参多出来的那部分会被形参中的*处理并且保存成元组的形式复制给args
针对按照关键字定义的实参多出来的那部分会被形参中的**处理并且保存成字典的形式复制给kwargs1 # 1.举例一、
2 def foo(x,y,*args):
3 print(x,y)
4 print(args)#args相当于(3, 4, 5, 6, 7, 8, 9)那么*args相当于*(3, 4, 5, 6, 7, 8, 9)
5 print(args[0])
6 print(*args) # 加个*就是把上面的元组给打散了就还是和原来传实参的时候的形式一样了
7
8 foo(1,2,3,4,5,6,7,8,9)
9 foo(1,2,3,*(4,5,6,7,8,9)) #也可以这样传 就相当于foo(1,2,3,4,5,6,7,8,9)
10
11 # 2.举例二、
12 def bar(x,y,z):
13 print(x,y,z)
14 bar(1,2,3)
15 bar(*[b,a,c]) #bar(b,a,c)
16 bar(*hel) #bar(h,e,l)
17 bar(*{a:1,b:2,c:3}) #bar(b,a,c)
18 # 强调如果实参中出现了*和**第一时间打散了去看
19
20 # 3.举例三、
21 def foo(x,y,**kwargs):
22 print(x,y)
23 print(kwargs) #{c: 3, d: 4, f: 6} 吧多余的元素以字典的形式返回了
24 print(*kwargs) #输出c d f 就是把字典打散了
25 #
26 # foo(1,y2,c3,d4,f6)
27
28 # 4.举例四、
29 def index(x,y,z1):
30 print(x,y,z)
31 def wrapper(*args,**kwargs):
32 index(args,kwargs)
33 index(*args, **kwargs) #就是打散了
34 wrapper(1,2,3)
35 wrapper(1,2)
36 wrapper(x1,y2)
37 wrapper(1,y2)
38 可变长度的参数从实参的角度推算出形参对应的形式 * 和 **
39 针对按照位置定义的实参冗余的部分会被形参中的 * 保存成元组的形式赋值给args
40 针对按照关键定义的实参冗余的部分会被形参中的 ** 保存成字典的形式赋值给kwargs
41 强调
42 如果实参中出现了 * 和 **第一时间打散了去看。
43 强调
如果实参中出现了*和**第一时间打散了去看
11.命名关键字参数了解:在定义阶段在*之后定义的形参称为命名关键字参数
特点是在调用阶段该参数必须以关键字的形式被传值
def foo(x,y,*,a,b):
print(x)
print(y)
print(a)
print(b)
foo(1,2,b20,a10)
控制函数调用的时候必须以关键字传参的时候就用命名关键字传参