python第四天

python函数

基本上所有的高级语言都支持函数,Python也不例外。Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用。函数就是最基本的一种代码抽象的方式。

1、函数基础

概念: 在编写程序的过程中,有某一功能代码块出现多次, 但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数;

定义

# 定义函数
def printInfo():
    '''
    这个函数封装了小张的个人信息(备注信息)
    :return: 
    '''
    print('小张的身高是:{}'.format(1.73))
    print('小张的体重是:{}'.format(160))
    print('小张的爱好是:{}'.format('唱歌'))
    print('小张的专业是:{}'.format('信息管理与信息系统'))
    pass
# 调用函数
printInfo()
printInfo()

2、函数参数

定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了。

# 通过传入参数使得定义的函数不只是小张的信息,更加的灵活
# 定义函数
def printInfo(name, height, weight, hobby, pro):
    '''
    这个函数封装了个人信息
    :return:
    '''
    print('*************{}的个人信息*************'.format(name))
    print('{}的身高是:{}'.format(name, height))
    print('{}的体重是:{}'.format(name, weight))
    print('{}的爱好是:{}'.format(name, hobby))
    print('{}的专业是:{}'.format(name, pro))
    pass


# 调用带参函数
printInfo('小张', 1.73, 160, '唱歌', '信息管理与信息系统')
printInfo('小李', 1.75, 180, '搬砖', '计算机应用')

函数的参数

参数:函数为了实现某项特定的功能,进而为了得到实现功能所需要的数据。与外部数据相对应。

  • 必选参数
  • 默认参数(缺省参数)
  • 可选参数
  • 引用参数

1、必选参数:在调用的时候必须给实参的

def sum(a,b):  # a,b为形式参数(只是意义上的参数,在定义的时候是不占用内存地址)
    sum=a+b                                   
    print(sum)                                
    pass                                      
# 调用(在调用的时候,必须参数是必须要给值的)                      
sum(20,15)   # 20 和15 就是实参,实实在在的参数,实际占用内存地址  ,必选参数

2、默认参数(缺省参数)

缺省参数,在调用函数时如果没有传参数,那么会使用定义函数时给的缺省值。缺省参数必须在参数列表的最后面,否则会报错。

# 默认参数
def sum(a=20,b=30):   #a和b存在默认值又叫缺省值
    print("默认参数使用=%d"%(a+b))
    pass
sum()   # 默认的时候就会使用缺省参数的值
sum(10)  # 只赋值一个,默认给第一个,在调用的时候未赋值就用默认值
sum(10,50)

# 默认参数
def sum(a,b=30):
    print("默认参数使用=%d"%(a+b))
    pass
# sum()   # 默认的时候就会使用缺省参数的值,但是a并没有缺省值,所以报错
sum(10)  # 只赋值一个,默认给第一个
sum(10,50)
# def sum1(a=10,b):  # 下面不管怎么调用都会报错,因为缺省值必须在尾部,也就是说a赋值了,后面的参数必须都赋值
#     print("默认参数使用=%d"%(a+b))
#     pass
def sum1(a,b,c=1,d=3):  # c赋值了,后面的参数必须都赋值
    print("默认参数使用=%d"%(a+b+c+d))
    pass
sum1(1,2)
sum1(1,2,3)
sum1(1,2,3,4)

3、可选参数(不定长参数):参数个数不确定

一个*号的可参数(元组)
一个函数有时候会处理比当初声明的参数要多,这就是不定长参数,定义函数时不用声明参数名。加了星号(*)的变量args会存放所有未命名的变量参数,args为元组;

# 可变参数(不定长参数)
def getComputer(*args):
    '''
    计算累加
    :param args: 元组,可变长的参数类型
    :return:
    '''
    print(args)
    pass
getComputer((1,2,3,4,5,6))
getComputer(1)
getComputer('hubert')

# 可变参数(不定长参数)
def getComputer(*args):
    '''
    计算累加
    :param args: 元组,可变长的参数类型
    :return:
    '''
    # print(args)
    result=0
    for i in args:
        result+=i
        pass
    print('result={}'.format(result))
    pass
getComputer(1)
getComputer(1,2)

两个**号的可变参数(关键字参数):字典形式
而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典。

# 关键字参数
# 两个**来定义
# 在函数体内,参数关键字是一个字典类型,key是一个字符串
def keyFunc(**kwargs):
    print(kwargs)
    pass
# keyFunc(1,2,3)# 不可以传递
dictA={'name':'hubert','age':35}
keyFunc()
keyFunc(**dictA)  #当直接传递字典类型的参数的时候,必须前面加两个星号
keyFunc(name='pete',age=26)
keyFunc(name='pete',age=26,pro='信管')

混合使用:

def complexFunc(*args,**kwargs):
    print(args)
    print(kwargs)
    pass
complexFunc()   # 第一个是元组,第二个是字典
complexFunc(1,2) # 只符合第一个参数要求
complexFunc(1,2,'hubert',True) # 只符合第一个参数要求
complexFunc(1,2,'hubert',True,{}) # 只符合第一个参数要求
complexFunc(1,2,'hubert',True,**{}) # 最后一个是符合第二个参数的
complexFunc(name='刘德华') # 只符合第二个参数要求
# complexFunc(name='刘德华',1,2) # 可选参数必须放在关键字参数前面(无论在定义还是调用里面)

3、函数的返回值:程序中函数完成一件事情后,最后给调用者的结果

  • 如果在函数内部有return,就可以返回实际的值,没有则为空
  • 可以返回多种类型值,取决于return后面的类型
  • 给调用方返回数据
  • 在一个函数体内有多个return值,但是只能返回一个return
  • 一旦执行了return结果,意味着函数执行完毕退出,return后面的语句将不在继续执行
def Sum(a,b):
    sum=a+b
    return sum #将sum值返回到调用的地方
    pass
rs=Sum(10,30)
print(rs)

def calsum(num):
    result=0
    i=1
    while i<=num:
        result+=i
        i+=1
        pass
    return result
# 调用函数
value=calsum(10)
print(type(value))
print(value)

def calsum(num):
    li=[]
    result=0
    i=1
    while i<=num:
        result+=i
        i+=1
        pass
    li.append(result)
    return li
# 调用函数
value=calsum(10)
print(type(value))  #返回是什么类型就是什么类型
print(value)

4、函数的嵌套(一个函数内部可以调用另一个函数)

def Func1():
    print('我是第一个函数!')
    pass
def Func2():
    print('我是第二个函数!')
    Func1()
    print('第二个函数结束!')
    pass
Func2()

练习

1、对n个数字进行求和

def sum(*args):
    result=0
    for item in args:
        result+=item
        pass
    return result
print(sum(1,2,3,4))

2、找出传入的列表或元组的奇数位对应的元素,并返回一个新的列表

def oddnum(a,b):
    li=[]
    cou=1
    for item in a:
        if cou%2==1:
            li.append(item)
            pass
        cou+=1
        pass
    cou=1
    for item in b:
        if cou%2==1:
            li.append(item)
            pass
        cou+=1
        pass
    return li
lista=[1,2,4,5,8]
tuplea=(1,'zz',3.14)
listb=oddnum(lista,tuplea)
print(listb)

3、检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。PS:字典中的value只能是字符串或列表

def cut(**kwargs):
    dic={}
    for item in kwargs:
        if len(kwargs[item])>2:
            dic[item]=kwargs[item][0:2]
        pass
    return dic
dicta={'name':'peter','age':'35','pro':'计算机','address':'黑龙江省牡丹江市'}
print(cut(**dicta))
原文地址:https://www.cnblogs.com/giaogiaogiao/p/14468709.html