Python学习Day4-函数基础(上)

一、python函数简介

其实函数就类似于是一个工具,我们把他编写为一个整体,想使用时,直接调用即可

二、函数基础

  • 什么是函数:一系列python语句的组合,可以在程序中运行一次或者多次,一般是完成具体的独立功能

  • 为什么要使用函数:代码的复用最大化以及最小化冗余代码,使得整体代码结构清晰,问题局部化

  • 函数的使用: def 函数名(参数列表):参数个数是0-n个

函数体【一系列的Python语句,表示独立的功能】

  • 函数的调用:本质就是执行函数定义的代码块,要先定义才能使用函数

#函数的定义
def printInfo():
    '''
    这个函数是用来打印林然的个人信息,这样便于理解模块功能属性
    :return: 
    '''
    print('林然的年龄是%d'%18)
    print('林然的学校是%s'%'湖南工商大学')
    print('林然的专业是%s'%'计算机科学与技术')
    pass
printInfo()#调用就直接函数名字+(),如果有参数就需要放置参数,这个知识点提早了

三、函数参数

    • 参数简介

参数:其实就是函数为了实现某项功能,进而为了得到实现功能的得到的数据,【参数就是得到外部数据】

在上述代码中就只是输出了林然的信息,我们可以通过参数传递,让用户调用时,自己传递参数,从而1输出不同的信息

#函数的定义
def printInfo(name,age,school,major):
    '''
    这个函数是用来打印不同的个人信息
    :return:
    '''
    print('%s的年龄是%d'%(name,age))
    print('%s的学校是%s'%(name,school))
    print('%s的专业是%s'%(name,major))
    pass
printInfo('辉桶',18,'湖南中医药大学','中医药')
#调用就直接函数名字+(),如果有参数就需要放置参数

我们调用函数时,可以挪动下鼠标,就可以看到函数的参数信息,以及功能介绍

2.参数分类

必选参数、默认参数【缺省参数】、可选参数、关键字参数

    • 必选参数:

在相应位置必须放置对应的值,否则会报错

def sum(a,b):#形式参数:只是意义上的一种参数,在定义的时候是不占内存地址的
    sum=a+b
    print(sum)
    pass
sum(20,15)#20和15就是实际参数:实参是实实在在的参数,是占内存地址的
sum()
    • 默认参数【缺省参数】

def sum(a=10,b=20):#默认参数,当不传递参数时,a默认为10,b默认为20,
    sum=a+b
    print(sum)
    pass
sum(20,15)#20和15就是实际参数:实参是实实在在的参数,是占内存地址的
sum()#并不会报错,在调用时如果未赋值,就好用定义函数给的的默认值10和20

默认参数【缺省参数】始终存在于参数列表的尾部

'''def sum(a=10,b):#这种是错误的
    sum=a+b
    print(sum)
    pass'''
def sum(a,b=20):#这种是正确的的
    sum=a+b
    print(sum)
    pass
    • 可选参数:

当参数的个数不确定时使用,比较灵活

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

def getcomputer(*args):
    '''
    :param args:可变长参数类型
    :return:
    '''
    print(args)
    print(type(args))
    pass
getcomputer((1,5.6,8,9,44))
getcomputer(1)
getcomputer(2,3)

结果:我们可以看到不定长参数是一个元组类型

eg.计算累加和

def getcomputer(*args):
    '''
    计算累加和
    :param args:可变长参数类型
    :return:
    '''
    result=0
    for item in args:
        result+=item
    print(result)
    pass
    • 关键字可变参数

采用**来定义,在函数体内,关键字参数是一个字典类型,Key是一个字符串

def keyFun(**kwargs):
    '''
    **来定义
    在函数体内,关键字参数是一个字典类型,key是一个字符串
    :param kwargs: 关键字可变参数
    :return:
    '''
    print(kwargs)
    pass
#调用
dictA={'name':'林然','age':35}
#当我们传递字典对象时,需要加上**
keyFun(**dictA)
#或者直接通过键值对来传递
keyFun(name='peter',age=20)
#不传,也就是空字典
keyFun()
    • 可选参数与关键字可选参数混合使用

def complexFun(*args,**kwargs):
    '''
    可选参数必须放到关键字可选参数之前
    可选参数是一个元组类型,
    关键字可选参数是一个字典类型
    :param args:
    :param kwargs:
    :return:
    '''
    print(args)
    print(kwargs)
    pass
complexFun()
complexFun(1,3,4,name='Linran',age=18)
complexFun(name='Linran',age=18)
#他会自动识别是否是字典类型,遇到字典类型时,他会将内容放置kwargs

结果:

四、函数返回值

概念:函数执行完以后会返回一个对象,如果在内部有return 关键字,就可以返回实际的值【可以是任何类型,】,否则会返回一个空值,

返回类型:返回值类型取决于return后面的类型

用途:给调用方返回数据

在一个函数体可以出现多个return关键字,但是肯定只能返回一个return

r如果在函数体执行了return,那么就代表函数执行结束

def sum(a,b):
    sum=a+b
    return sum#将计算结果返回
print(sum(10,20))#返回值返回到调用的地方
rs=sum(4,5)#将返回值赋值给其他变量
print(rs)
def calcomputer(num):
    '''
    计算累加和
    :param num:
    :return:
    '''
    result=0
    i=1
    while i<=num:
        result+=i
        i+=1
        pass
    return result
value=calcomputer(10)
print(value)
print(type(value))
  • 返回元组类型:返回多个值

def returnTuple():
    return 1,2,3,4
res=returnTuple()
print(res)
print(type(res))

结果:

五、函数嵌套调用

def fun1():
    print("第一个函数")
    pass
def fun2():
    fun1()
    print("第二个函数")
    pass
fun2()#函数2会调用函数1,然后再执行2之间的代码块

六、总结

七、课后作业

写函数,接收n个数字,求这些参数数字的和

写函数,找出传入的列表或元组的下标奇数位对应的元素,并返回一个新的列表

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

八、作业答案

eg1:

def sum(*args):
    '''
    #写函数,接收n个数字,求这些参数数字的和
    思路:个人思路采用可选参数,也就是不定长参数进行实现
    代码千千万,适合最重要
    :param args:
    :return: 返回用户传递过来的参数之和
    '''
    result=0
    for i in args:
        result+=i
        pass
    return result
print(sum(1,2,3,4,5))

eg2

def list_fun(li_or_tup):
    '''
    #写函数,找出传入的列表或元组的下标奇数位对应的元素,并返回一个新的列表
    个人思路:传递列表或者元组后,利用列表或元组【序列】的Index函数去判断是否是奇数位
    :param li:
    :return:
    '''
    new_li=[]
    for i in li_or_tup:
        if(li_or_tup.index(i)%2==1):
            new_li.append(i)
    return new_li
li=list(range(20))
new_list=list_fun(li)
print(new_list)
tupleA=tuple(range(40))
new_list=list_fun(tupleA)
print(new_list)

结果:

eg3


def check_dict(**dictA):
    '''
    写函数,检查传入字典的每一个value的长度,如果大于2,
    那么仅保留前两个长度的内容,并将新内容返回给调用者。
    PS:字典中的value只能是字符串或列表
    个人思路:利用关键字可选参数,传入字典,然后通过循环遍历,判断
    value长度大于2,是则利用切片处理,因为字符串和列表都是序列
    :param dictA: 
    :return: 
    '''
    for key,value in dictA.items():
        if(len(value)>2):
            new_value=value[0:2]
            dictA[key]=new_value
    return dictA
dictA={'name':'linran','age':[1,2,3,4]}
dictB=check_dict(**dictA)
print(dictB)

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜菜小林然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值