0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python-函数的进阶与递归

汽车电子技术 来源:程序猿知秋 作者: 程序猿知秋 2023-02-16 15:19 次阅读

函数的返回值

返回值

  • 在程序开发中,有时候,会希望一个函数执行结束后,告诉调用者 一个结果 ,以便调用者针对结果作后续的处理
  • **返回值 **是函数 完成工作后,最后给调用者的一个结果
  • 在函数中使用 **return **关键字可以返回结果
  • 调用者 可以使用变量 来接收函数的返回结果

**返回值示例

**

# 单返回值示例
def test1():
  name="zs"
  return name


n=test1()
print("名字是:%s" %n)




# 多返回值,返回元组
def test2():
  name="zs"
  age=12
  return name,age


n,a=test2()
print("名字是:%s,年龄是:%d" %(n,a))


#第二种返回值接收形式
result=test2()
print(result)
print("名字是:%s,年龄是:%d" %(result[0],result[1]))




# 多返回值,返回元组2,与上一个函数返回的结果是一样的
def test3():
  name="zs"
  age=12
  return (name,age)
n,a=test3()
print("名字是:%s,年龄是:%d" %(n,a))

输出结果

图片

交换变量的值

a=100
b=10


# 形式一
b,a=a,b
print(b,a)


# 形式二,注: 其实两种方式是一样的,只是看起来一个加了括号一个没加,但其实后面都是用的元组
b,a=(a,b)
print(b,a)

函数的参数

不可变与可变参数

  • 在函数内部,针对参数使用 赋值语句 ,不会影响调用函数时传递的 实参变量
  • 不管是可变还是不可变类型的参数,针对参数使用 ** 赋值语句** ,会在 函数内部修改局部变量的引用 ,不会影响 外部变量的引用
  • 当参数是** 可变类型**时,在函数内部,使用 方法 修改了数据的内容,会影响到外部的数据

示例

# 可变与不可变类型参数,使用赋值语句 不会影响外部调用时的 变量
def test1(num,num_list):
  num=10
  num_list=[4,5,6]
  print("函数内部num值:%d" %num)
  print("函数内部num_list值:",num_list)


gl_num=3
gl_num_list=[1,2,3]
test1(gl_num,gl_num_list)
print("函数外部num值:%d" %gl_num)
print("函数外部num_list值:",gl_num_list)




# 可变类型的参数,使用 方法赋值,会影响外部调用时的 变量
def test2(num_list):
  # 形式一
  num_list.append(9)
  # 形式二
  num_list.extend([2,2,2])
  # 形式三(默认使用的也是 extend)
  num_list+=[3,3,3]
  print("函数内部调用后的值是:",num_list)


gl_num_list2=[1,1,1]
test2(gl_num_list2)
print("函数外部调用后的值是:",gl_num_list2)

输出结果

图片

缺省参数

  • 定义函数时,可以给 **某个参数 **指定一个 默认值 ,具有默认值的参数就叫 缺省参数
  • 调用函数时,如果没有传入缺省参数的值,则在函数内部会使用 参数的默认值
  • 函数的缺省参数,将常见的值设置为参数的缺省值,从而 简化函数的调用
  • 缺省参数的定义位置,应该放在参数列表的末尾
  • 如果有 ** 多个缺省参数,调用时需要指定参数名,** 这样解释器才能知道参数的对应关系
def test1(name,work="工程师",gender="男"):
  print("名字是:%s,职位是:%s,性别是:%s" %(name,work,gender))


test1("张三",gender="女")
test1("李四",work="设计师")
test1("王五",work="设计师",gender="人妖")

输出结果

图片

多值参数

  • 参数名前增加一个** * 可以接收 元组**

  • 参数名前增加 两个** * 可以接收 字典**

  • 一般在给多值参数命名时,习惯使用以下两个名字

    • ***args 存放 元组 参数,前面有一个 ***
    • ****kwargs 存放 字典 参数,前面有两个 ***
  • args 是 arguments 的缩写,有变量的含义

  • **kw 是 keyword 的缩写,kwargs 可以记忆 键值对参数

    **

示例

# 测试普通参数,元组,字典传参
def test(num,*args,**kwargs):
  print(num)
  print(args)
  print(kwargs)




test(1,2,3,4,5,nmae="zs",age="12")

输出结果

图片

**元组和字典的拆包

**

  • 在调用带有多值参数的函数时,如果希望:
    • 将一个 元组变量,直接传递给 args
    • 将一个 字典变量,直接传递给 kwargs
  • 就可以使用 ** 拆包,** 简化参数的传递,拆包的方式是**:**
    • 在 元组变量前**,增加一个 ***

    • 在 字典变量前**,增加两个 *

      **

示例

def test(*args,**kwargs):
  print(args)
  print(kwargs)


# 不使用拆包
test(1,2,3,name="zs",age=12)


# 使用拆包
t_tuple=(1,2,3)
d_dict={"name":"zs","age":12}
test(*t_tuple,**d_dict)

**输出结果

**

图片

递归

  • 一个函数,内部自己调用自己
  • 当 参数满足一个条件时,函数不再执行,这个非常重要,通常被称为 递归的出口,否则 就会出现 死循环

示例

# 使用递归 计算累加  1+2+3....num
def sum_num(num):
  # 定义出口
  if num==1:
    return 1


  tmp=sum_num(num-1)
  return num+tmp


total=sum_num(10)
print("累加的值是:",total)

输出结果

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4274

    浏览量

    62303
  • 程序开发
    +关注

    关注

    0

    文章

    29

    浏览量

    10250
  • Return
    +关注

    关注

    0

    文章

    9

    浏览量

    7589
收藏 人收藏

    评论

    相关推荐

    快速掌握Python递归函数与匿名函数调用

    函数Python技术学习中重要的一个环节,深入掌握该阶段的知识内容,对于Python技术能力的提升非常有帮助,这里就针对递归函数与匿名
    发表于 07-19 16:22

    Labview递归函数的使用案例

    Labview递归函数的使用案例,简单的1+2+3...+100求和,简单易懂,充分理解递归函数的思想
    发表于 10-09 09:37

    请问python-树莓派如何通过按键控制步进电机正反转?

    步进电机驱动原理是什么?python-树莓派如何通过按键控制步进电机正反转?
    发表于 10-09 08:45

    C++教程之函数递归调用

    C++教程之函数递归调用 在执行函数 f 的过程中,又要调用 f 函数本身,称为函数递归
    发表于 05-15 18:00 35次下载

    python-控制khr3hv-master机器人

    python-控制khr3hv机器人,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-22 15:40 2次下载

    递归指的是在函数的定义中使用函数自身的方法

    C语言支持递归,即一个函数可以调用其自身。但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入死循环。递归
    的头像 发表于 11-12 15:06 7061次阅读

    C++的实验教程之函数递归算法资料免费下载

    函数递归算法 1.范例:求组合数, 一、实验目的1. 学会解决简单的递归算法。2. 掌握函数的嵌套调用。
    发表于 01-29 10:51 2次下载
    C++的实验教程之<b class='flag-5'>函数</b>的<b class='flag-5'>递归</b>算法资料免费下载

    进阶必备的68个Python 内置函数分析

    来源: pypypypy 内置函数就是Python给你提供的,拿来直接用的函数,比如print.,input等。 截止到python版本3.6.2 ,
    的头像 发表于 11-01 10:18 3980次阅读

    C语言-内联函数递归函数、指针函数

    这篇文章介绍C语言的内联函数递归函数函数指针、指针函数、局部地址、const关键字、extern关键字等知识点;这些知识点在实际项目开发
    的头像 发表于 08-14 10:03 1631次阅读

    Python-函数

    所谓函数,就是把 **具有独立功能的代码块** 组织为一个小模块,在需要的时候调用
    的头像 发表于 02-16 14:54 706次阅读

    Python-变量的引用与可变

    变量和数据都是保存在内存中的,在Python中,函数的参数传递和返回值都是靠引用传递的
    的头像 发表于 02-16 15:15 741次阅读
    <b class='flag-5'>Python-</b>变量的引用与可变

    Python支持递归函数

    Python支持递归函数——即直接或间接地调用自身以进行循环的函数递归是颇为高级的话题,并且它在Pyt
    的头像 发表于 02-21 14:28 609次阅读

    函数递归-3

    程序调用自身的编程技巧称为递归(recursion)。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个
    的头像 发表于 02-21 15:57 544次阅读

    什么是Python递归函数

    递归函数必须有终止条件。编程中,函数的调用要占用名叫栈(stack)的内存空间。调用函数时,程序会将相关的数据存储到计算机的栈里。
    的头像 发表于 02-23 10:25 1758次阅读

    Python递归的经典案例

    当我们碰到诸如需要求阶乘或斐波那契数列的问题时,使用普通的循环往往比较麻烦,但如果我们使用递归时,会简单许多,起到事半功倍的效果。这篇文章主要和大家分享一些和递归有关的经典案例,结合一些资料谈一下个人的理解,也借此加深自己对递归
    的头像 发表于 08-05 15:57 257次阅读