day3-函数参数及调用

在此之前,我们演示的函数都是没有带参数的,下面我们就来说说带参数的函数。

  • 形参:指的是形式参数,是虚拟的,不占用内存空间,形参单元只有被调用的时才分配内存单元
  • 实参:指的是实际参数,是一个变量,占用内存空间,数据传递单向,实参传给形参,形参不能传给实参
1 def test(x,y): #x,y是形参
2     print(x)
3     print(y)
4
5 test(1,2) #1和2是实参

#输出

1

2

1、位置参数

从上面的例子可以看出,实际参数和形式参数是一一对应的,如果调换位置,x和y被调用的时,位置也会互换,代码如下:

1 def test(x,y):
2     print(x)
3     print(y)
4 print("--------互换前-----")
5 test(1,2)
6 print("--------互换后-----")
7 test(2,1)

#输出

--------互换前-----

1

2

--------互换后-----

2

1

1)多一个参数

1 def test(x,y):
2     print(x)
3     print(y)
4 print("--------多一个参数----")
5 test(1,2,3)

#输出

--------多一个参数----

Traceback (most recent call last):

File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>

test(1,2,3)

TypeError: test() takes 2 positional arguments but 3 were given  #test()函数需要传两个实参,你传了三个实参

2) 少一个参数

1 def test(x,y):
2     print(x)
3     print(y)
4 print("--------少一个参数----")
5 test(1)

#输出

--------少一个参数----

Traceback (most recent call last):

File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>

test(1)

TypeError: test() missing 1 required positional argument: ‘y‘  #没有给y参数传实参

事实证明:多传一个参数或者少传一个参数都是不行的。

2、关键字参数

关键字传参不需要一一对应,只需要你指定你的哪个形参调用哪一个实参即可,代码如下:

1 def test(x,y):
2     print(x)
3     print(y)
4
5 print("--------互换前------")
6 test(x=1,y=2)
7 print("--------互换后------")
8 test(y=2,x=1)

#输出

--------互换前------

1

2

--------互换后------

1

2

1) 位置参数在前,关键字参数在后

1 def test(x,y):
2     print(x)
3     print(y)
4
5 test(1,x=2)

#输出

Traceback (most recent call last):

File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>

test(1,x=2)

TypeError: test() got multiple values for argument ‘x‘ #给x形参传的值过多

报错的意思是:给形参x传的值过多。这种报错的原因是:实参1已经传给了形参x,后面的x=2又传了一次,所以报错

2) 关键字在前,位置参数在后

1 def test(x,y):
2     print(x)
3     print(y)
4
5 test(y=2,1)

#输出

File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8

test(y=2,1)

^

SyntaxError: positional argument follows keyword argument # 报错:关键字参数在位置参数的前面

3) 位置参数放前面,中间放关键字参数

1 def test(x,y,z):
2     print(x)
3     print(y)
4
5 test(1,y=2,3)

#输出

File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8

test(1,y=2,3)

^

SyntaxError: positional argument follows keyword argument

4) 关键字参数放最后

1 def test(x,y,z):
2     print(x)
3     print(y)
4     print(z)
5
6 test(1,2,z=3)

#输出

1

2

3

4) 最后两个用关键字参数

1 def test(x,y,z):
2     print(x)
3     print(y)
4     print(z)
5
6 test(1,z=2,y=3)

#输出

1

3

2

得出一个结论:关键字参数是不能写在位置参数前面的。

总结:

1、既有关键字,又有位置参数时,是按位置参数的顺序来

2、关键字参数是不能写在位置参数的前面的

时间: 2024-10-25 22:10:52

day3-函数参数及调用的相关文章

JavaScript函数参数与调用

函数调用: /*    1.    函数调用        */      var temp = distance(0,1,2,3);        /*    2.    方法调用        */      this.CName = "全局";      var o = {            CName:"o类",            m:function(){                  var self = this;             

Python学习之路:函数参数及调用

return:结束函数并返回值 没有return时:返回None 返回值数=1时:返回具体值 返回值是数字+字符串+列表等:返回一个元组 需要return是需要函数完整调用 def test1(): print('in the test1') def test2(): print('in the test2') return 0 #结束函数并返回0 def test3(): print('in the test3') return 1,'hello',['alex','wupeiqi'], {'

c++ 指针总结 函数参数指针调用和堆栈内存的分配原理

c++中的char指针 这个char指针很有意思,char指针通常有两种初始化形式.一个是使用char数组初始化,一个是使用char变量初始化. c++当中使用双引号括起来的字符串起始已经被编译器初始化为一个const char[]类型的字符串常量.也就是说"hedd"在赋值给其他变量或常量时实际上是将一个已经在内存中分配了地址的const char数组的头指针赋值给它.如果你使用's'这样的数字量是不能直接赋值给char指针的,因为's'是一个字符而不是拥有内存的字符变量或常量.这种

python下函数参数的传递(*和**)

1.F(arg1,arg2,...) 这 是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用的的时候也必须在函数名后的小括号里提供个数相等的 值(实际参数),而且顺序必须相同,也就是说在这种调用方式中,形参和实参的个数必须一致,而且必须一一对应,也就是说第一个形参对应这第一个实参.例 如: def a(x,y): print x,y 调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错. 2.F(arg

JS中的函数(二):函数参数(你可能不知道的参数传递)

前言: 函数分为有参有返回值,有参无返回值,无参无返回值,无参有返回值:那么对于无参数的函数你想使用函数的调用怎么办呢?如果你想封装一个代码,实现多种功能,但是形参大于实参或者实参大于形参又该如何?本文就发生函数调用过程中,值传递,参数的不对等处理原则等关于参数的一些相关操作进行阐述. 1.实参数大于形参数: function say(name,message){ console.log('Hello' + name + message); } say('World!','ByeBye!','W

转:python 函数参数的传递(参数带星号的说明)

python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要有四种方式:1.F(arg1,arg2,...)这 是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用的的时候也必须在函数名后的小括号里提供个数相等的 值(实际参数),而且顺序必须相同,也就是说在这种调用方式中,形参和实参的个数必须一致,而且必须一一对应

对象做函数参数和函数返回值时,调用复制构造函数,构造函数,析构函数的情况

// 对象做函数参数和返回值.cpp : 定义控制台应用程序的入口点.//exit(0)表示正常退出程序,exit(0)表示异常退出 //在调用input时,编译器用对象A去创建了形参对象temp,调用了复制构造函数,对象A中的数据复制给了对象temp// 在input函数中,执行temp.set(s),为对象temp中数据成员str申请了动态储存空间,并设置了输入的字符串//并没有改变实参A中的数据成员str的储存空间,故在执行语句A.show()后输出的字符串并没有改变.在函数调用结束后 /

(九)JavaScript之【JS函数(定义、参数、调用、【闭包】)】[较深,胆小勿进]

定义: 1 /** 2 * 函数表达式 3 * 4 * Function() 构造函数 5 * 6 * 函数提升(Hoisting) 7 * JavaScript默认将当前作用域提升到前面去 8 * Hoisting应用在变量的声明和函数的声明 9 * [使用表达式定义函数时无法提升] 10 * 11 * 自调用函数 12 * 13 * 函数是对象*/ 1 //函数表达式储存在变量中 2 var x = function () { return 'message'; }; 3 4 console

More Effective C++ 条款12 了解”抛出一个exception&quot;与“传递一个参数”或“调用一个虚函数”之间的差异

1. 函数return值与try块throw exception.函数接收参数与catch字句捕获异常相当类似(不仅声明形式相像,函数参数与exception传递方式都有三种:by value,by reference , ). 2. 尽管函数调用与异常抛出相当类似,“从抛出端传递一个exception到catch子句”和“从函数调用端传递一个实参到被调函数参数”仍然大有不同: 1)调用一个函数,控制权会最终回到调用端(除非函数失败以致无法返回),但是抛出一个exception,控制权不会再回到

(struct)结构体变量作为函数参数调用的方法小结

结构体变量.结构指针变量.结构数组作为函数的参数应用实例分析 struct stud { long int num; float score; }; /*结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数*/ void funvr(struct stud t) { t.num=2000101; t.score=71.0; } /*结构体数组作为函数的参数,修改后的元素的成员值能返回到主调函数*/ void funar(struct stud t[]) //void funar(stru