计算和控制流(二)代码组织:函数的参数

一、参数

1.什么是参数?

参数是传入到函数的值,当调用含参数的函数时,这些参数的值会被复制给函数中的对应参数。

1.1什么是形式参数(formal parameter)?

函数创建和定义过程中,函数名后面括号里面的参数。

1.2什么是实际参数?

函数在调用过程中传入的参数。

1.3形式参数只是代表一个位置,一个变量名,实际参数是一个具体内容,赋值到变量的值如下图所示:
def add(a,b): #a,b为形参所以是定义的时候用的只是占了一个位置用了一个名称,在函数里面可以直接用
    return a+b
print(add(1,2)) #在调用的时候1,2参数为实参,1赋值给a,2赋值给b

输出

F:\j\venv\Scripts\python.exe F:/j/demo9.py
3

Process finished with exit code 0
2.函数中定义参数的方式
2.1固定参数

固定参数是在参数表中写明参数名key的参数,固定了顺序和 数量的固定参数,这是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用的的时候也必须在函数名后的小括号里提供个数相等的值(实际参数),而且顺序必须相同,也就是说在这种调用方式中,形参和实参的个数必须一致,而且必须一一对应,也就是说第一个形参对应这第一个实参。
2.1.1例如def a(key1,key2,key3....)如下图所示:

def a(x,y):
    print(x,y)
a(1,2)#调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错。
a(1,2,3)
a(1)

输出

F:\j\venv\Scripts\python.exe F:/j/demo9.py
1 2
Traceback (most recent call last):
  File "F:/j/demo9.py", line 4, in <module>
    a(1,2,3)
TypeError: a() takes 2 positional arguments but 3 were given

Process finished with exit code 1

2.1.2例如def a(key1,key2=value2...)这种方式就是第一种的改进版,提供了默认值如下图所示:

def a(x,y=3):
    print(x,y)
a(1,2)
a(1)
a(y=4,x=3)
#调用该函数,a(1,2)同样还是x取1,y取2,但是如果a(1),则不会报错了,这个时候x还是1,y则为默认的3。
# 上面这俩种方式,还可以更换参数位置,比如a(y=4,x=3)用这种形式也是可以的。

输出

F:\j\venv\Scripts\python.exe F:/j/demo9.py
1 2
1 3
3 4

Process finished with exit code 0
2.2可变参数

可变参数是指在定义函数时还不知道会有多少参数传入的可变参数,它以一个*号加上不带名称只有顺序之分的形参的方式来表示这个函数的实参个数不定,可能为0个也可能为n个。注意一点是,不管有多少个,在函数内部都被存放在以形参名为标识符的元组中。语法如下图所示:

def a(*args): #不带key的多个参数

2.2.1不带名字可变参数的实例如下图所示:

def a(*args): #不带key的多个参数
    print(args)
a(123,666,"abcd",True) #当调用函数时可以往里面传入无限个参数

输出

F:\j\venv\Scripts\python.exe F:/j/demo9.py
(123, 666, 'abcd', True)

Process finished with exit code 0

2.2.2带名字的可变参数是在形参名前加两个*号表示语法如下图所示:

def a(**kwargs): #带key=value形式的多个参数   

2.2.3带名字可变参数的实例如下图所示:

def a(**kwargs): #带key=value形式的多个参数
    print(kwargs)
#此时在调用函数时不能在以这种方式a(123,666,"abcd",True) 传入参数了不然会报错,因为参数在函数内部将被存放在以形式名为标识符的字典中
a(name='sgy',age=30,sep='comma')#以字典元素的方式传入参数

输出

F:\j\venv\Scripts\python.exe F:/j/demo9.py
{'name': 'sgy', 'age': 30, 'sep': 'comma'}

Process finished with exit code 0
3.调用函数的参数

调用函数的时候,可以传进两种参数一种是没有名字的位置参数,另一种是带key的关键字参数,如果混用,所有位置的参数必须在前,关键字参数必须在后。
3.1没有名字的参数语法如下图所示:

def func(*args):
func(args1,args2...)#会按照前后顺序对应到函数参数传入

3.2带有Key关键字参数语法如下图所示:

def a(age,name,sep): 
    print(age,name,sep)
a(name='sgy',age=30,sep='comma')#由于指定了key所以不用按照顺序对应

输出

F:\j\venv\Scripts\python.exe F:/j/demo9.py
30 sgy comma

Process finished with exit code 0

3.3混用参数的语法如下图所示:

def a(age,name,sep):
    print(age,name,sep)
a('sgy',30,sep='comma')#位置参数要放在关键字参数前面不然会报错

输出

F:\j\venv\Scripts\python.exe F:/j/demo9.py
sgy 30 comma

Process finished with exit code 0

3.3.1调用函数时把关键字参数放在位置参数前面时会报错如下图所示:

def a(age,name,sep):
    print(age,name,sep)
a(sep='comma',30,'sgy')#把关键字参数放在位置参数前面会报错

输出

F:\j\venv\Scripts\python.exe F:/j/demo9.py
  File "F:/j/demo9.py", line 3
    a(sep='comma',30,'sgy')
                 ^
SyntaxError: positional argument follows keyword argument

Process finished with exit code 1
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 3,057评论 2 9
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,505评论 17 410
  • 第5章 函数和函数式编程 5.1 引言函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数...
    VIVAFT阅读 1,055评论 0 5
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,865评论 0 5
  • 还有两天就要前往藏功房了,吴平为了保险,去大街上买了不少丹药。此时,他身上的金疮药,已经足够他使用了。 他...
    玠炎阅读 375评论 0 2

友情链接更多精彩内容