Python基础第三篇:函数
一、Python函数介绍
1.函数的作用
- 规范代码使代码变得逻辑性更强
- 提高可读性,方便管理,降低维护成本,以及降低代码冗余
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
2.函数定义
- 以 def 关键词开头,后接函数标识符名称和圆括号(),def df()
- 函数参数必须写在括号中,可以定义多个参数def df(参数1,参数2,参数3.....)
- 函数内部第一行建议放函数说明
- 一般带参数的会有return,不带参数的没有,不带return相当于返回 None
3.函数分类
Python中函数分为内置函数(sum、len、min.....),和自定义函数。
a = len(‘hhhh’)#使用内置函数计算字符长度 b=max([1,2,3])#使用内置函数比较大小写 print(b) def print_star():#自定义函数 print('#'*6)
二、函数参数
1.从大的角度去看,函数的参数分两种:形参(变量名),实参(值),定义阶段的是形式参数,调用赋值时的是实参
#定义阶段定义形参数 # def foo(x,y): #x=1,y=2 # print(x) # print(y) #调用阶段传入实参 # foo(1,2)
2.详细的区分函数的参数分为五种
位置参数
调用时参数必须以正确的顺序传入函数,数量必须和声明时的一样
#位置参数 def foo(x,y,z):#位置形参:必须被传值的参数 print(x,y,z) foo(1,2,3) foo(1,2,3) #位置实参数:与形参一一对应
关键字参数
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
关键字参数需要注意的问题:
1:关键字实参必须在位置实参后面
2: 不能重复对一个形参数传值
#关键字参数:key=value def foo(x,y,z): print(x,y,z) foo(z=3,x=1,y=2) # foo(1,z=3,y=2) #正确 # foo(x=1,2,z=3) #错误 # foo(1,x=1,y=2,z=3)
默认参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值
默认参数需要注意的问题:
1.默认参数必须跟在非默认参数后
2.默认参数在定义阶段就已经赋值了,而且只在定义阶段赋值一次
3.默认参数的值通常定义成不可变类型
#定义一个默认参数函数 def register(name,age,sex='male'): #形参:默认参数 print(name,age,sex) #默认参数必须跟在非默认参数后 register('喊喊',210,'female') register('喊喊',sex='female',age=19) a=100000000 def foo(x,y=a): print(x,y) a=0 a = 不会影响到函数 foo(1)
可变长参数
1.*后多出来的以元组形式赋值
加了星号(*)的变量名把按位传参多出来的参数都接收,以元组的形式赋值给"*变量"实例如下:
def foo(x,y,*args): #*会把溢出的按位置定义的实参都接收,以元组的形式赋值给args print(x,y) print(args)
#!/usr/bin/Python # -*- coding:utf-8 -*- add函数相当于接收了一个元组(1,2,3,4,5) def add(*args): res=0 for i in args: res+=i return res print(add(1,2,3,4,5)) print(add(1,2))
2.以字典形式赋值
def foo(x, y, **kwargs): # **会把溢出的按关键字定义的实参都接收,以字典的形式赋值给kwargs print(x, y) print(kwargs) foo(1,2,a=1,name='egon',age=18)
判断是否输入了指定内容的参数 def foo(name,age,**kwargs): print(name,age) if 'sex' in kwargs: print(kwargs['sex']) if 'height' in kwargs: print(kwargs['height']) foo('egon',18,sex='male',height='185') foo('egon',18,sex='male')
命名关键字参数
*前可以按照位置和关键字赋值,*后出默认其他必须以关键字形式传值
# def foo(name,age,*,sex='male',height): # print(name,age) # print(sex) # print(height) # #*后定义的参数为命名关键字参数,这类参数,必须被传值,而且必须以关键字实参的形式去传值 # foo('egon',17,height='185')
四、函数返回值
1.什么情况下返回值为None没有返回值
函数没有return:
def fa(): print("hhah")
return none:
def fa(): print("hhah") return None
return 没有结果:
def fa(): a = "" return a
2.return返回值
return可以返回一个值也可以返回多个值,可以返回元组列表元素等。。。。
return 值1,值2,值3,... 返回结果:(值1,值2,值3,...)
def foo(): print('from foo') x=1 return x res=foo() print(res)
def foo():
print('from foo')
x=1
return 1,[2,3],(4,5),{}
# res=foo()
# print(res) #打印结果:(1,[2,3],(4,5),{})
# a,b,c,d=foo()
# print(d)
五、自定义函数
1.为什么要定义函数
函数相当于工具,就像修车:需要扳手、电笔、油壶等,每一个工具就相当于一个函数,在修车之前先把工具准备好
用到个些拿哪个,先定义后使用,如果没有定义而直接使用,就相当于引用了一个不存在的变量名。
2.函数语法
函数的使用包含两个阶段:定义阶段和使用阶段
语法
定义函数: def 函数名(参数1,参数2,...): """文档注释""" 函数体 return 值
调用:
x=len('hello')
print(x)
3.定义函数形式
1.无参函数
无参数函数:如果函数的功能仅仅只是执行一些操作而已,就定义成无参函数,无参函数通常都有返回值
def print_star(): print('#'*6)
2.有参函数
定义有参函数:函数的功能的执行依赖于外部传入的参数,有参函数通常都有返回值
def my_max(x,y): res=x if x >y else y return res
三元表达式
if x > y: print(x) else: print(y) 同上将True结果放在左边False结果放到右边 res=x if x > y else y print(res)
3.空函数
def insert(): """插入功能""" pass def select(): """查询功能""" pass def delete(): """删除功能""" pass def update(): """更新功能""" pass
六、函数调用
1.有参函数调用
bar('egon') #定义时有参,调用时也必须有参数
2.无参函数调用
foo() #定义时无参,调用时也无需传入参数
3.使用形式
直接调用
foo()直接调用
作为变量形式 def my_max(x,y): res=x if x >y else y return res res=my_max(1,2)*10000000 #调用函数的表达式形式 print(res)
res=my_max(my_max(10,20),30) #把函数调用当中另外一个函数的参数
print(res)