第十三课_函数实参可以通过对序列或字典-程序员宅基地

技术标签: 笔记  


前面也来一张漂酿的图片嗷~ 在这里插入图片描述

函数设计与使用

一、函数定义与调用
1.1定义函数的语法:
def 函数名([参数列表]):
       '''注释'''
       函数体

在Python中使用def关键字来定义函数
在定义函数式需注意:

  • 函数形参不需要声明其类型,也不需要制定函数返回值类型;
  • 即使该函数不需要接收任何参数,也必须保留一对空的括号
  • 括号后面的冒号必不可少;
  • 函数体相对于def关键字必须保持一定的空格缩进
  • Python允许嵌套定义函数
1.2

Python中的函数和自定义对象的成员也是可以随时发生改变的,可以为函数和自定义对象动态增加新成员。

>>> def func():
    print(func.x)                 #查看函数func的成员x
>>> func.x = 3                        #动态为函数增加新成员
>>> func()
3
1.3递归函数

若在函数体中有调用该函数自身的代码,这成为递归函数,在编写递归函数式,应保证每次递归问题性质不变规模越来越小,并且规模小到一定程度时可以直接解决而不需要继续递归。

#用来计算斐波那契数列中小于n的所有值:
def fib(n):
       a,b=1,1
       while a<n:
             print(a,end=‘ ’)
             a,b=b,a+b
       print()
fib(1000)
二、形参与实参
2.1 参数
  • 函数定义时括弧内为形参,一个函数可以没有形参,但是括弧必须要有,表示该函数不接受参数。
  • 函数调用时向其传递实参,将实参引用传递给形参。
  • 在定义函数时,对参数个数并没有限制,如果有多个形参,需要使用逗号进行分隔。
2.2

对于绝大多数情况下,在函数内部直接修改形参的值不会影响实参,而是创建一个新变量

>>>def addOne(a):
       print(a)
       a+=1
       print(a)
>>>a=3
>>>addOne(a)    #(1)
>>>a       #(2)
3
4     #(1)
3     #(2)
2.3

若传递给函数的是Python可变序列,并且在函数内部使用下标序列自身原地操作的方法为可变序列增加、删除元素或修改元素时,修改后的结果是可以反映到函数之外的,实参也得到相应的修改。

>>> def modify(v):          # 使用下标修改列表元素值
    v[0] = v[0]+1
>>> a = [2]
>>> modify(a)
>>> a
[3] 
三、参数类型
  • 在Python中,函数参数有很多种:可以为普通参数、默认值参数、关键参数、可变长度参数等等。
  • 在定义函数时不需要指定形参的类型,完全由调用者传递的实参类型以及Python解释器的理解和推断来决定,
  • 在定义函数时也不需要指定函数的返回值类型,函数的返回值类型由return语句返回值的类型决定
3.1 位置参数
  • 没有任何特殊说明的参数为位置参数,调用函数时实参和形参的顺序必须严格一致,并且实参和形参的数量必须相同
>>> def demo(a, b, c):
    print(a, b, c)
>>> demo(3, 4, 5)                   #按位置传递参数(1)
>>>>demo(1, 2, 3, 4)                #实参与形参数量必须相同(2)
3 4 5    #(1)
TypeError: demo() takes 3 positional arguments but 4 were given   #(2)
3.2默认值参数
  • 在定义函数时,Python支持默认值参数,即在定义是为形参设置默认值
  • 语法:
 def 函数名(···,形参名=默认值):
     函数体
  • 调用带有默认值参数的函数时,可以不对默认值参数进行赋值,也可以为其赋值,具有很大的灵活性;
    注意:默认值参数必须出现在函数参数列表的最右端,任何一个默认值参数右边不能有非默认值参数。
>>> def func(a, b, c=5): 
    print(a, b, c)		
  • 默认值参数如果使用不当,会导致很难发现的逻辑错误,
  • 默认值参数的赋值只会在函数定义时被解释一次。
3.3 关键参数
  • 通过关键参数,实参顺序可以和形参顺序不一致,但不影响传递结果,避免了用户需要牢记位置参数顺序的麻烦。
>>> def demo(a,b,c=5):
    print(a,b,c)
>>> demo(3,7)
>>> demo(a=7,b=3,c=6)
3 7 5
7 3 6
3.4 可变长度参数

可变长度参数主要有两种形式:在参数名前加1个*或2个**

  • parameter用来接收多个位置实参并将其放在一个元组中
>>> def demo(*p):
    print(p)
>>>demo(1,2,3)
(1, 2, 3)
  • parameter接收多个关键参数并存放到字典中
>>> def demo(**p):
    for item in p.items():
        print(item)
>>> demo(x=1,y=2,z=3)
('y', 2)
('x', 1)
('z', 3)
  • 几种不同类型的参数可以混合使用,但是不建议这样做。
四、参数传递时的序列解包
  • 传递参数时,可以通过在实参序列前加一个星号将其解包,然后传递给多个单变量形参。
  • 如果函数实参是字典,可以在前面加两个星号进行解包,等价于关键参数。
>>> def demo(a, b, c):
    print(a+b+c)
>>> dic = {
    'a':1, 'b':2, 'c':3}
>>> demo(**dic)
6
  • 注意:调用函数时对实参序列使用一个星号*进行解包后的实参将会被当做普通位置参数对待,并且会在关键参数和使用两个星号**进行序列解包的参数之前进行处理。
    写完啦!开心,吼吼吼
![graph TD;
A-->B;
B-->C;](https://img-blog.csdnimg.cn/20210617103014494.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODY1MDkz,size_16,color_FFFFFF,t_70)
    • 习题和内容来自老师PPT哦,还有书上的内容嗷!* *
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_55865093/article/details/117980228

智能推荐

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?_成员内部类和局部内部类的区别-程序员宅基地

文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别

分布式系统_分布式系统运维工具-程序员宅基地

文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具

用Exce分析l数据极简入门_exce l趋势分析数据量-程序员宅基地

文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量

宁盾堡垒机双因素认证方案_horizon宁盾双因素配置-程序员宅基地

文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置

谷歌浏览器安装(Win、Linux、离线安装)_chrome linux debian离线安装依赖-程序员宅基地

文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖

烤仔TVの尚书房 | 逃离北上广?不如押宝越南“北上广”-程序员宅基地

文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...

随便推点

java spark的使用和配置_使用java调用spark注册进去的程序-程序员宅基地

文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序

汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用_uds协议栈 源代码-程序员宅基地

文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码

AUTOSAR基础篇之OS(下)_autosar 定义了 5 种多核支持类型-程序员宅基地

文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型

VS报错无法打开自己写的头文件_vs2013打不开自己定义的头文件-程序员宅基地

文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件

【Redis】Redis基础命令集详解_redis命令-程序员宅基地

文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令

URP渲染管线简介-程序员宅基地

文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线