Python函数的参数与返回值

本文介绍了Python函数的基础概念,包括函数初识、参数分类(必选参数、默认参数、可选参数和关键字参数)、返回值的使用以及实战案例。通过实例演示了如何定义和调用函数,以及如何处理不同类型的参数和返回数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python函数

4.1、函数初识
  • 在编写程序的过程中,有某一功能代码块出现多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数
  • 就是一系列Python语句的组合,可以在程序中运行一次或者多次,
  • 一般具有独立的功能
  • 代码的复用最大化以及最小化冗余代码,整体代码结构清晰,问题局部化
  • 语法结构
def 函数名(参数1,参数2,参数3):
    """文档说明"""
    函数体
    return
  • 函数定义
def pritInfo():
    '''
    这个函数用来打印小张信息
    '''
    #函数代码块
    print('小张的身高是%f'%1.73)
    print('小张的体重是%f'%130)
    print('小张的爱好是%s'%'周杰伦')
    print('小张的专业是%s'%'信息安全')

定义函数发生的事情:

1. 申请内存空间保存函数体代码
2. 将上述代码地址绑定给函数名
3. 定义函数不会执行函数体代码,但是会检测函数体语法

  • 函数 调用
print(pritInfo())#打印的是内存地址
pritInfo()

调用函数发生的事情:

1. 通过函数名找到函数的内存地址
2. 然后加括号就是在触发函数体代码的执行

def foo():
    bar()
    print('from foo')
def bar():
    print('from bar')
    
foo()
"""执行过程"""
函数的使用分两个 阶段,
第一个阶段:定义
第二个阶段:调用
定义的时候只检测语法,不执行代码
在定义foo时咩有语法错误
然后再去定义bar,
最后再去调用foo()时,bar早就丢到内存中了,所以就不会报错,

def foo():
    bar()
    print('from foo')
    
foo()

def bar():
    print('from bar')
    
"""会报错"""
	
  • 进一步去输出不同人的信息, 通过传入参数来解决
def pritInfo(name,height,weight,hobby,pro):

    #函数代码块
    print('%s的身高是%f'%(name,height))
    print('%s的体重是%f'%(name,weight))
    print('%s的爱好是%s'%(name,hobby))
    print('%s的专业是%s'%(name,pro))
  • 调用带参数的信息
pritInfo('peter',175,130,'听音乐','甜品师')
pritInfo('小李',189,140,'打游戏','软件工程师')

4.2、函数参数
  • 参数分类:

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

  • 参数:其实就是函数为了实现某项特定功能,进而为了得到实现功能所需要的数据
def sum(a,b):#形式参数:只是意义上的一种参数,在定义的时候是不占内存地址的

sum=a+b
print(sum)
  • 必选参数 (位置参数)

函数调用的时候,必选参数是必须要赋值的
sum(20,15)#20,15就是实际参数 实参, 实实在在的参数,是实际占用内存地址的
sum()不能这样写,需要传参

位置实参:在函数嗲用阶段,按照从左往右的顺序依次传入值

位置实参必须放在关键字实参前,否则报语法错误

在调用阶段,实参(变量值)会绑定给形参(变量名)

实参与形参的绑定关系:在函数调用时生效,调用结束后解除绑定关系

  • 默认参数【缺省参数】(默认形参)

在定义函数阶段,就已经被赋值的形参,称之为默认形参

特点**:在定义阶段就已经被赋值,**意味着在调用阶段可以不用为其赋值

位置形参必须在默认形参的左边

def sum(a=1,b=11):
     print(a+b)

sum()#在调用的时候,如果未赋值,就用定义函数时给定的默认值
sum(10)#10赋给了a,b还是11,结果为21
  • 关键字参数

关键字实参:在函数调用阶段,按照key=value的形式传入值

位置实参必须放在关键字实参前,否则报语法错误

指名道姓的给某个形参传值,

def a(a,b):
    res=a+b
    return res
print(a(b=2,a=1))
  • 可变参数(当参数的个数不确定时,比较灵活)

*形参名:用来接受溢出的位置实参,溢出的位置实参会被*保存成元组形式

def getComputer(a,b*args):
    '''
    计算累加和
    '''
    # print(args)
    result=0
    for item in args:
        result+=item
    print(result)

getComputer(1,2,3,4)

"""结果如下"""
1 2 (3,4)
  • *可用在实参中,实参中带*,把*后的值打散成位置实参
def func(x,u,z):
    print(x,u,z)
func(*[11,22,33])#相当于func(11,22,33)

def func2(x,y,*args):
    print(x,y,args)
func2(*'hello')
"""结果如下"""
11 22 33
h e ('l','l','o')
  • 形参实参都带*
def func(x,y,*args):#args=(3,4,5,6)
    print(x,y,args)
func(1,2*[3,4,5,6])#相当于func(1,2,3,4,5,6)

"""结果如下"""
1 2 (3,4,5,6)
  • 关键字可变参数
  1. **来定义
  2. 在函数体内 参数关键字是一个字典类型,key是一个字符串
  3. 可变参数指的是在调用函数的时候,传入的值(实参)的个数不固定
def Func(a,b**kwargs):
    print(a,b,kwargs)
Func(1,b=2,x=3,b=5)

def Infofunc(*args,**kwargs): #可选参数必须在关键字可选参数之前
     print(args)
     print(kwargs)
 Infofunc(1,2)
# Infofunc(12,13,46,age=18)
  • **可用在实参中,实参中带**,把**后的值打散成关键字实参
def func(x,y,c):
    print(x,y,c)
#func(*{'x':1,'y':2,'c':3})#func('x','y','c')
func(**{'x':1,'y':2,'c':3})#func(x=1,y=2,c=3)


"""结果如下"""
1 2 3
  • 形参与实参都带**
def func(x,y,**kwargs):
    print(x,y,kwargs)
func(**{'y':111,'x':211,'z':456,'d':789})#打散后相当于func(y=222,x=211,z=456,d=789)

"""结果如下"""
211 111 {'z':456,'d':789}
  • 混用*与**:*args必须在**kwargs前面
def fun(*args,**kwargs):
    print(args)
    print(kwargs)
fun(1,2,3,4,5,6,8,x=1,y=2,z=3)

"""结果如下"""
(1,2,3,4,5,6,8)
{'x':1,'y':2,'z':3}
  • 命名关键字参数(了解)
def func(x,y,*,a,b):#a和b为命名关键字参数
    print(x,y)
    print(a,b)

案例实现

  • 接收N 个数字,求这些参数数字的和
def num(*args):
    '''
    #写函数,接收N 个数字,求这些参数数字的和
    '''
    result=0
    for  i in args:
        result+=i

    return result
a=num(1,2,2,2,2)
print(a)


  • 找出传入的列表或元组的奇数位对应的元素,并返回一个新的列表
def Func1(con):
    '''
    找出传入的列表或元组的奇数位对应的元素,并返回一个新的列表
    '''
    listA=[]
    index=1
    for i in con:
        if index%2==1:#判断奇数位
            listA.append(i)
        index+=1
    return listA
# e=Func1([1,2,45,1,1,'as',{1,25,',hs'}])
e=Func1(list(range(1,11)))
print(e)
  • 检查传入字典的每一个value的长度,如果大于2,那么仅仅保留前两个长度的内容,并将新的内容返回给调用者,PS:字典中的数据只能是字符串或者是列表
def Func2(dic):
    '''
    检查传入字典的每一个value的长度,如果大于2,那么仅仅保留前两个长度的内容,
    并将新的内容返回给调用者,PS:字典中的数据只能是字符串或者是列表
    '''
    result={}
    for key,value in dic.items():
        if len(value)>2:
            result[key]=value[:2]#向字典添加新的数据
        else:
            result[key]=value

    return result
#调用
dicObj={'name':'张三','hobby':['唱歌','跳舞','编程'],'major':'信息安全'}
print(Func2(dicObj))

4.3、函数返回值
  • 概念:函数执行完以后会返回一个对象,如果在函数的内部有return,就可以返回实际的值,否则返回None
  • 类型:可以返回任意 类型,返回值类型应该取决于return 后面的类型
  • 用途:给调用方返回数据
  • 在一个函数体内可以出现多个return ,但是肯定只有一个return
  • 如果在一个函数体内,执行了return,意味着就执行完成推出了,return后面的代码将不会执行
#返回值

def Sum(a,b):
    sum=a+b
    return sum #将计算结果返回
result=Sum(12,15)#将返回的值赋给其他变量
print(result)

def calComputer(num):
    '''
    累加和
    '''
    listA=[]
    result=0
    i=1
    while i<=num:
        result+=i
        i+=1
        # listA.append(result)
    listA.append(result)
    return listA
message=calComputer(10)
print(type(message))

print(message)


def returnType():
    '''
    返回元组类型数据
    '''
    return 1,2,3
a =returnType()
print(type(a))
print(a)

def returnType1():
    '''
    返回字典类型
    '''
    return {"name":"成龙"}
b=returnType1()
print(type(b))
print(b)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

过期的秋刀鱼-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值