可变对象

每个对象都保存了三个数据

  1. id(标识)
  2. type(类型)
  3. value(值)
    a=[4,5,6]
    a[0]=10,#此时a对象还是同一个
    a=[1,2,3]#重新赋值,变成了另一个对象

1.函数简介

  • 函数也是一个对象(function)
  • 函数用来保存一些可执行的代码,在有需求的时候对这些代码块多次调用
  • 函数中保存的代码不会立即执行,需要调用函数的时候代码才执行
def 函数名([形参1,形参2,形参3....]):代码块

注意:
函数名必须符合标识符的规范(可以包含字⺟、数字、下划线但是不能以数字开 头) 。

def fn():print('hello world')
fn()#hello world
print(fn)#<function fn at 0x00000210550F2BF8>
print(fn())
#hello world
#None   因为没有return或者return后没有返回值

#fn是函数对象 fn()调用函数

print是函数对象 print()是调⽤函数

2.函数的参数

2.1形参和实参

  • 形参(形式参数)定义形参就相当于在函数内部声明了变量,但是并不是赋值
  • 实参(实际参数)指定了形参,那么在调⽤函数时必须传递实参,实参将会赋值给对应的形参,简单来说有几个形参就要有几个实参
def fn(a,b):# a = None# b = None# print('a =',a)# print('b =',b)print(a,"+",b,'=',a+b)fn(1,2)
fn(88,666)
#1 + 2 = 3
#88 + 666 = 754
  • 实参可以传递任意类型的对象
def fn(a):print('a =',a)b = 88
b = [1,2]
b = True
b = 'lihua'
fn(b)
输出:
a=88
a=[1,2]
a=True
a=lihua
  • 在函数中对形参进行赋值,不会影响其他的变量
1.def f(a):print('a=',a)
c=10
f(c)
print('c=',c)
输出:a=10,c=102.def f(a):a=20#相当于默认参数传递print('a=',a)
c=10
f(c)
print('c=',c)
输出:a=20,c=10
  • 当我们通过形参去修改对象时(value),会影响到所指向该对象的变量
def f(a):a[0]=10print('a=',a)
c=[1,2,3]
f(c)
print('c=',c)
输出:a=[10,2,3],c=[10,2,3]#a,c指向同一个对象。

2.2函数的传递方式

  • 定义形参时,可以为形参指定默认值。指定了默认值以后,如果⽤户传递了参数则默认值不会生效。如果⽤户没有传递,则默认值就会生效
def fn(a,b,c = 20):print('a =',a)print('b =',b)print('c =',c)fn(1,2,3)#输出:a=1,b=2,c=3.有默认值,传递参数则不生效
fn(1,2)#输出:a=1,b=2,c=20,用户没有传递第三个参数,默认值生效
  • 位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参
  • 关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,⽽根据参数名进⾏传递
def fn(b = 1,c = 2,a = 20):print('a =',a)print('b =',b)print('c =',c)fn()
输出的是:a=20,b=1,c=2#按照参数名进行传递
  • 默认参数和关键字参数混合使用的时候必须将位置参数写到关键字参数前⾯去
    非默认参数不能放在默认参数后面
def fn(a,c=2):print('a =', a)print('c =', c)fn(1)#输出:a=1,c=2
fn(1,2)#输出:a=1,c=2
fn(1,3)#输出:a=1,b=3
def fn(c=2,a):print('a =', a)print('c =', c)fn(1)#SyntaxError: non-default argument follows default argument(非默认参数不能放在默认参数后面)

3.不定长参数(可变参数)

  • 在定义函数时,可以在形参前⾯加⼀个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到⼀个元组中
def f(*a):#*a接收所有位置的实参,并保存在元组中print('a=',a)
f(1,2,3,4)
输出:a=(1,2,3,4)
def s1(*a):# 定义一个变量保存结果r = 0# 遍历元组,将元组当中的数进行相加for n in a:r += nprint(r)
#求任意数的和
s1(1,2,3,4,5,6)
  • 带*号的形参只能有⼀个,可以和其他参数配合使⽤
1.def fn1(a,b,*c):print('a =',a)print('b =',b)print('c =',c)fn1(1,2,3,4,5,6)
#输出:
a = 1
b = 2
c = (3, 4, 5, 6)2.def fn2(a, *b, c):print('a =', a)print('b =', b)print('c =', c)fn2(1, 2, 3, 4, 5, 6)# TypeError: fn2() missing 1 required keyword-only argument: 'c',此时找不到传递给c的参数是因为,*a获取了2,3,4,5,6.fn2(1,2,3,4,5,c=6)#指定一个,但是不能把c=6放到其他位置,因为默认参数(关键字参数)必须放到非默认参数(位置)后面
#输出:
a = 1
b = (2, 3, 4, 5)
c = 6
  • *形参只能接受位置参数,不能接受关键字参数
def fn3(*a):print('a =', a)fn3(b = 1,d = 2,c = 3)
#输出:TypeError: fn3() got an unexpected keyword argument 'b'
  • **形参可以接收其他的关键字参数,它会将这些参数统⼀保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值
def fn3(**a):print('a =', a)fn3(b = 1,d = 2,c = 3)
#输出:
a = {'b': 1, 'd': 2, 'c': 3}
  • **形参只有⼀个,并且必须写在所有参数的后⾯

4.参数的解包

  • 传递实参时,也可以在序列类型的参数前添加*,这样它会⾃动的将序列中元素依次作为参数传递
def f(a,b,c):print('a =',a)print('b =',b)print('c =',c)t = (1,2,3)f(*t)#输出:a=1b=2c=3
def fn1(a,b,c):print('a =',a)print('b =',b)print('c =',c)
d = {'a':1,'b':2,'c':3}fn1(**d)
#输出:
a=1
b=2
c=3
  • 要求序列中的元素的个数必须和形参的个数⼀致

*args,**kwargs 可变参数

study-eighth-fun-1相关推荐

  1. Oracle Study之--Oracle等待事件(3)

    Oracle Study之--Oracle等待事件(3) Db file parallel read 这是一个很容易引起误导的等待事件,实际上这个等待事件和并行操作(比如并行查询,并行DML)没有关系 ...

  2. 读书笔记2013第10本:《学得少却考得好Learn More Study Less》

    <学得少却考得好Learn More Study Less>这本书最早是从褪墨网站上看到的,crowncheng翻译了全文.这本书介绍了不少学习方法,非常适合在校的学生,原文的作者Scot ...

  3. Case study:在数据库网页中设计数据排序工具

    一.目的 该笔记的目的是引导读者在已搭建的数据库网页的基础上,利用JS设计数据排序工具.其效果如图1所示."Order by"下拉列表框由一系列字段组成,如"Locati ...

  4. Case Study: 利用PHP获取关系型数据库中多张数据表的数据

    一.目标 该笔记的目的是引导读者借助WampServer平台和MySQL数据库,利用HTML/CSS/JS/PHP设计一个多数据表关联的网页.在上一个案例(Case Study: 利用JS实现数据库网 ...

  5. Case Study: 利用JS实现数据库网页的数据分页、数据选择、数据详细信息查看功能

    一.目标 该笔记的目的是引导读者借助WampServer平台和MySQL数据库,利用HTML/CSS/JS/PHP设计一个能够进行实现数据分页显示.数据选择.数据详细信息查看功能的数据库网页.该数据库 ...

  6. Case Study: 利用JS设计高级检索功能通过PHP获取MySQL数据

    一.目标 该笔记的目的是引导读者借助WampServer平台和MySQL数据库,利用HTML/CSS/JS/PHP设计一个含有高级检索功能的数据库网页.该功能效果如图1所示.用户在文本框中输入相应内容 ...

  7. QIIME 2用户文档. 5粪菌移植分析练习Fecal microbiota transplant (FMT) study

    文章目录 前情提要 QIIME 2用户文档. 5粪菌移植分析练习 启动QIIME2运行环境 实验数据下载 序列质控评估 生成特征表和代表性序列 查看去噪过程统计 合并不同批的代表序列和特征表 表1. ...

  8. 二值网络训练--A Empirical Study of Binary Neural Networks' Optimisation

    A Empirical Study of Binary Neural Networks' Optimisation ICLR2019 https://github.com/mi-lad/studyin ...

  9. oracle顺序读等待,Oracle Study之--Oracle等待事件(4)

    Oracle Study之--Oracle等待事件(4) Db file scattered read这个等待事件在实际生产库中经常可以看到,这是一个用户操作引起的等待事件,当用户发出每次I/O需要读 ...

  10. OS study plan

    From now on, I will study the Minix source code. There may be 6 months long. Plan: 1. Analysis Minix ...

最新文章

  1. 进入页面先刷新一次_转盘抽奖分享得积分,防止页面被恶意
  2. 使用librosa计算pcen
  3. IDEA上安装和使用checkstyle,findbugs,visualVM,PMD插件
  4. 近期知识图谱顶会论文推荐,你都读过哪几篇?
  5. C++有用的字符函数库
  6. server sql 将出生日期转为年龄_在sql server表中有一个出生日期字段我怎么才能在当前年份改变时自动更新年龄字段...
  7. CVPR2018 目标检测算法总览(最新的目标检测论文)
  8. 并查集 (Union-Find)算法
  9. (5)散列冲突处理:开放定址法
  10. web监听器监听mysql_JavaWEB开发15——ListenerListener
  11. 学习NSURLSession(1)
  12. python_thrift
  13. play另一个模板japid
  14. 除了iframe嵌套还有什么嵌套_嵌套了ROUND函数,为什么还会差1分钱,值得收藏
  15. android设置字体大小,Android中如何设置字体大小
  16. python因子分析法详细步骤_Python——因子分析
  17. JS 转换民族国标码(数字码和英文码)
  18. MATLAB 产生带宽信号
  19. C#,精巧实用的代码,图片生成裸眼3D立体图像的源代码
  20. 静态工作点稳定方法——原理;分压偏置共射放大电路静态分析、动态分析

热门文章

  1. JAX-RS 从傻逼到牛叉 2:开发一个简单的服务
  2. 全网最详细官网一键换肤教程
  3. 三亚适合几月份去玩 三亚必去的地方是哪里
  4. Alienware-17-R4-630-1060-MacOS 笔记本双显卡 外星人黑苹果hackintosh 10.15
  5. 火山引擎虚拟数字人技术与应用
  6. 手机如何将PDF文件拆分?分享两种手机拆分文件方法
  7. goodnote笔记同步 Android,goodnotes笔记
  8. 三种嵌入式操作系统的深入分析与比较
  9. VoIP技术的基本原理与应用
  10. Android中setPositiveButton和setNegativeButton