美文网首页
计算和控制流(二)代码组织:函数的参数

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

作者: 无尽的结 | 来源:发表于2019-01-08 16:05 被阅读0次

一、参数

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

相关文章

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

    一、参数 1.什么是参数? 参数是传入到函数的值,当调用含参数的函数时,这些参数的值会被复制给函数中的对应参数。 ...

  • 计算和控制流(二)代码组织函数

    一、封装一个功能 1.容器是对数据的封装、函数是对语句的封装、类是对方法和属性的封装2.函数(function)程...

  • 【计算和控制流】29、代码组织:函数的参数

    目录一、形式参数与实际参数二、定义函数的参数三、固定参数/可变参数四、调用函数的参数五、位置参数/关键字参数 一、...

  • 【计算和控制流】28、代码组织:函数(def)

    目录一、封装一个功能二、定义与调用函数三、变量的作用域四、函数小技巧 一、封装一个功能 封装容器是对数据的封装函数...

  • 代码组织:函数的参数

    代码组织:函数的参数 形式参数与实际参数 参数:传入到函数的值 当调用含参数的函数时,这些参数的值会被复制给函数中...

  • C语言-计算数值积分(函数指针作为函数参数示例)

    问题描述:计算数值积分(函数指针作为函数参数示例) 源代码: 运行结果: 程序参数:

  • 2021-07-26

    fc代码框架搭建 熟悉验证的流程 1、代码框架 问题:forward函数里面的参数计算和kernel重排,还有些不...

  • Swift 语法基础

    Swift 基础## 目录 控制流的代码优化 字符串代码注意 swift 的数组 字典和集合 函数

  • 函数

    一、函数定义 1.定义函数 def funName: 。。。(函数的代码) 二、函数参数 1.位置参数 比如计...

  • Python函数详解

    函数是Python里组织代码的最小单元,Python函数包含以下几个部分: 定义函数 调用函数 参数 函数的返回值...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/yramrqtx.html