函数
基本上所有的高级语言都支持函数,函数就是一种代码抽象的方式。之前所使用的len、print等都是python的内置函数。
1.初识函数
在编写程序过程中,如果一段代码经常出现,为了提高编写效率,将这类实现某个功能的代码作为一个小模块,这就是函数。
1.1 函数定义
def 函数名(参数1,参数2...):
函数体即代码块
1.2 函数调用
函数名(值1,值2...)
即可调用
1.3 函数说明文档
一般在函数第一行加函数说明信息,在pycharm中打三个单引号后回车自动补充格式,其实也就是多行注释
#无参数函数定义:
def printInfo():
'''
这个函数是用来打印的,这就是函数说明文档
:return:
'''
print('第一个函数实现')
pass
#函数调用:
printInfo()
2.函数参数
如果不传参数,函数就没那么灵活,相对死板。
#有参数函数定义:
def printInfo(name,height,weight,age):
'''
这个函数是用来打印的,这就是函数说明文档
:return:
'''
print('%s的身高是%d'%(name,height),end=' ')
print('%s的体重是%d'%(name,weight),end=' ')
print('%s的年龄是%d'%(name,age))
pass
#函数调用:
printInfo('小明',1.73,45,12)
printInfo('小清',1.76,60,15)
printInfo('小红',1.88,70,28)
参数的分类:
1.缺省参数:默认参数
2.可选参数:
3.必选参数:如上面的height、weight、name、age,必须传参
4.关键字参数:
在使用过程中,我们往往是混合使用以上类型的
#1.必选参数:就是其他语言中的正常传参
def sum(a,b): #a,b是形式参数,形参。在定义的时候没有开辟内存地址
print(a+b)
pass
sum(2,3) #2,3是实参,占用内存地址
#sum() #如果不传参或者少传参都会报错
#2.缺省参数:在调用的时候如果没赋值就会使用默认的值。缺省参数始终存在于参数列表的最后一个
def sum1(a=20,b=30):
print(a+b)
pass
sum1()
sum1(10)
sum1(49,33)
# def sum2(a,b=20,c):
# print('这种就是不规范的,b已经是缺省参数了,c就不可以是必选参数')
# pass
#3.可选参数,就是可变长参数:当参数的个数不确定时使用
def getComputer(*args):
'''
表示可变长的参数
:param args:
:return:
'''
print(args)
pass
getComputer()
getComputer((1,2,3,4,5,6)) #输出来是以元组类型输出数据,调用的时候传几个参数都可以
print(getComputer((1,2,3,4,5,6)))
#4.关键字可变参数:在函数体内,关键字参数是一个字典类型,key是一个字符串
def keyFun(**kwargs):
print(kwargs)
pass
#keyFun(1,2,3) 这种是错的,应该按字典传参
dictA={'name':'sad','age':11}
keyFun(**dictA) #以字典传
keyFun(name='ss',age=11) #以命名方式传
#混合使用
def complexFun(*args,**kwargs):
print('第一个参数:',end=' ')
print(args,end=' ')
print('第二个参数:',end=' ')
print(kwargs)
pass
dictA={'name':'zhangxue','age':11}
complexFun(12,dictA) #如果采用字典传参会识别到第一个
complexFun(12,name='msj') #采用键值对传参就会识别到第二个
complexFun(name='hk',age=11)
complexFun(11,678,827)
#可选参数必须放到关键字可变参数之前,不然会报错
3.函数返回值
函数返回值就是指函数调用完成后传给调用者的结果。
函数返回值:
如果在函数的内部有return就有返回值,否则返回空值
可以返回任意类型的值,在一个函数体内可以出现多个return关键字,但是最终只能返回一个值
如果执行了return,则代表函数执行完成,后续将不再执行
def sum(a,b):
return a+b
c=sum(1,2)
print(c)
#如果要返回多组数,可以返回列表、元组
a=0
def add(num):
'''
返回列表类型
:param num:
:return:
'''
a=num
li=[]
i=0
while i<=10:
a+=i
li.append(a)
i+=1
pass
return li
print(add(19))
print(type(add(19)))
def tu():
'''
返回元组类型
:return:
'''
return 1,2,3
print(type(tu()))
print(tu())
def di():
'''
返回字典类型
:return:
'''
return {'name':'11','age':11}
print(di())
print(type(di()))
4.函数嵌套调用
#嵌套调用
def fun1():
print('-------------第一个函数开始--------------')
print('-------------第一个函数执行--------------')
print('-------------第一个函数结束--------------')
pass
def fun2():
print('-------------第二个函数开始,调用第一个函数')
fun1()
print('-------------第二个函数结束--------------')
pass
fun2()
函数的分类:
1.有返回值有参数
2.有返回值没参数
3.没返回值有参数
4.没返回值没参数
5.实践
5.1 函数练习1
i=0
def fun1(*args):
sum=0
for i in args:
sum+=i
pass
return sum
print('-----------第一个函数练习------------')
print(fun1(1,2,3,4,5,6,3,2,5,99))
5.2 函数练习2
def fun2(a):
li=[]
l=len(a)
i=1
while i<l:
if i%2!=0:
li.append(a[i])
pass
i+=1
return li
print('-----------第二个函数练习-----------')
print('传元组:',end=' ')
print(fun2((1,2,3,4,5)))
print('传列表:',end=' ')
print(fun2([1,2,3,4,5,6,7,8,9]))
5.3 函数练习3
print('-----------第三个函数练习:----------')
def fun3(**kwargs):
'''
处理字典类型的数据
:param kwargs: 字典类型
:return: 字典类型
'''
for key,value in kwargs.items():
if len(value)>2:
kwargs[key]=value[0:2]
pass
pass
return kwargs #这里也可以声明一个新的字典返回
print(fun3(name='sdxfd',age='eleven',sex='nv',height='1.98',li=[1,2,3]))
5.4 综合代码
i=0
def fun1(*args):
sum=0
for i in args:
sum+=i
pass
return sum
print('-----------第一个函数练习------------')
print(fun1(1,2,3,4,5,6,3,2,5,99))
#0,1,2,3,4,5,6,7,8,9
def fun2(a):
li=[]
l=len(a)
i=1
while i<l:
if i%2!=0:
li.append(a[i])
pass
i+=1
return li
print('-----------第二个函数练习-----------')
print('传元组:',end=' ')
print(fun2((1,2,3,4,5)))
print('传列表:',end=' ')
print(fun2([1,2,3,4,5,6,7,8,9]))
print('-----------第三个函数练习:----------')
def fun3(**kwargs):
'''
处理字典类型的数据
:param kwargs: 字典类型
:return: 字典类型
'''
for key,value in kwargs.items():
if len(value)>2:
kwargs[key]=value[0:2]
pass
pass
return kwargs #这里也可以声明一个新的字典返回
print(fun3(name='sdxfd',age='eleven',sex='nv',height='1.98',li=[1,2,3]))
答案并不唯一,条条大路通罗马,随着各位的思路能够得出正确答案的就是正确答案