一、返回值

之前在day3-函数介绍中提到了return关键字,但是那个只是提到,并没有详细的介绍的return关键字的用法,下面我们就来详细的阐述一下。

1、return作用

  return其实有两个作用:

  • 需要用一个变量来接受程序结束后返回的结果
  • 它是作为一个结束符,终止程序运行
def test():print("in the test_1")return 0print("the end") #结果中没有打印x = test()
print(x)#输出
in the test_1 #第一次打印
0 #结果返回值

注:从上面的代码可以看出,return 0后面的代码就不执行了,只执行return前面的代码;变量x接受了test()函数结束后的返回结果

2、返回多个值

  上面我们试了返回一个常量值,或者说一个对象值,下面我们来试试,不返回值,或者说返回多个值得情况

# __auther__ == zhangqigaodef test_1():print("in the test_1")def test_2():print("in the test_2")return 0def test_3():print("in the test_3")return 1,"hello",["qigao","shuaigao"],{"name":"qigao"}x = test_1()
y = test_2()
z =test_3()
print(x)
print(y)
print(z)#输出
in the test_1
in the test_2
in the test_3
None #x的值
0  #y的值
(1, 'hello', ['qigao', 'shuaigao'], {'name': 'qigao'}) #z的值

从上面的例子可以看出:

  • 没有定义,返回值数=0,返回:None
  • 只定义了1个返回值,返回值=1 ,返回:定义的那个值,或者说定义的那个object
  • 定义了2个以上,返回值 > 1,返回:1个元组(tuple)

提问:这边我们不经意的要问,为什么要有返回值?

因为我们想要想要这个函数的执行结果,这个执行结果会在后面的程序运行过程中需要用到。

二、有参数函数调用

 在此之前,我们演示的函数都是没有带参数的,下面我们就来说说带参数的函数。在讲之前,我们先来说一下,什么是形参,什么是实参吧!

  • 形参:指的是形式参数,是虚拟的,不占用内存空间,形参单元只有被调用的时才分配内存单元
  • 实参:指的是实际参数,是一个变量,占用内存空间,数据传递单向,实参传给形参,形参不能传给实参

代码如下:

def test(x,y): #x,y是形参print(x)print(y)test(1,2) #1和2是实参
#输出
1
2

1、位置参数

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

def test(x,y):print(x)print(y)
print("--------互换前-----")
test(1,2)
print("--------互换后-----")
test(2,1)#输出
--------互换前-----
1
2
--------互换后-----
2
1

那有些同学会说,那我多一个或者少一个参数,总归没事了吧!那我看看行不行呢?

①多一个参数

def test(x,y):print(x)print(y)
print("--------多一个参数----")
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()函数需要传两个实参,你传了三个实参

②少一个参数

def test(x,y):print(x)print(y)
print("--------少一个参数----")
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、关键字参数

 到这边有些小伙伴不经意的要说,像这种位置参数,有点死,我不想这么干,万一我传错了咋办,对吧!OK,没有问题,下面我们就来讲讲关键字传参。

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

def test(x,y):print(x)print(y)print("--------互换前------")
test(x=1,y=2)
print("--------互换后------")
test(y=2,x=1)#输出
--------互换前------
1
2
--------互换后------
1
2

但是,这是又有小伙伴要问了,那我可不可以位置参数和关键字参数结合起来用呐?接下来,我们就来探讨一下。

①位置参数在前,关键字参数在后

def test(x,y):print(x)print(y)test(1,y=2)#输出
1
2

我擦这样是可以的,那我试试这种情况,我把后面关键字不传给y,我传给x,代码如下:

def test(x,y):print(x)print(y)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又传了一次,所以报错。

②关键字在前,位置参数在后

def test(x,y):print(x)print(y)test(y=2,1)#输出
File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8test(y=2,1)^
SyntaxError: positional argument follows keyword argument # 关键字参数在位置参数的前面

我去,看来这样不行。那我位置参数放前面,中间放关键字参数总行了吧!代码如下:

def test(x,y,z):print(x)print(y)test(1,y=2,3)#输出File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8test(1,y=2,3)^
SyntaxError: positional argument follows keyword argument

还是一样的错误,我去,那我只能把关键字参数放最后试试!

def test(x,y,z):print(x)print(y)print(z)test(1,2,z=3)#输出
1
2
3

那我最后两个用关键字参数呐?

def test(x,y,z):print(x)print(y)print(z)test(1,z=2,y=3)#输出
1
3
2

这样也是可以的,所以,得出一个结论:关键字参数是不能写在位置参数前面的。

总结:

  1. 既有关键字,又有位置参数时,是按位置参数的顺序来
  2. 关键字参数是不能写在位置参数的前面的

转载于:https://www.cnblogs.com/zhangqigao/articles/6497316.html

day3-函数参数及调用相关推荐

  1. 用指针完成函数参数的调用

    #include<stdio.h>addUp(int a,int b,int c){ c=a+b;printf("%d\n",c); return c;}main(){ ...

  2. 函数和常用模块【day04】:函数参数及调用(二)

    本节内容 1.为什么要有参数 2.返回值 3.有参数函数调用 一.为什么要有参数? 无参数实现 def CPU报警邮件()#发送邮件提醒连接邮箱服务器发送邮件关闭连接def 硬盘报警邮件()#发送邮件 ...

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

    return:结束函数并返回值 没有return时:返回None 返回值数=1时:返回具体值 返回值是数字+字符串+列表等:返回一个元组 需要return是需要函数完整调用 def test1():p ...

  4. 二维数组作为函数参数的调用

    C语言编程的过程中,不可避免的会碰到二维或二维以上的数组作为函数的形参的情况,在以前的编程过程中,习惯了动态数组的应用,很是使用直接定义高维数组.最近在编程的过程中就碰到了这个问题:有如下的测试程序: ...

  5. python 函数参数的传递(参数带星号的说明) 元组传递 字典传递

    python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...

  6. 【 C 】函数参数通过传值调用还是传址调用?

    C 函数的所有参数均以 "传值调用" 方式进行传递,这意味着函数将获得参数值的一份拷贝.这样函数就可以放心修改这个拷贝值,而不必担心会修改调用程序实际传递给它的参数. 既然调用函数 ...

  7. 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )

    文章目录 一.Java 中函数参数是接口类型 二.函数参数是接口类型 可以 直接传递闭包 三.完整代码示例 一.Java 中函数参数是接口类型 在 Android 中经常使用如下形式的接口 : 定义一 ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )

    文章目录 一.准备 mmap 函数的参数 二.mmap 函数远程调用 一.准备 mmap 函数的参数 上一篇博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 远程调 ...

  9. Python的函数名作为参数传入调用以及map、reduce、filter

    零.python的lambda函数: 1 #lambda function 2 func = lambda x : x+1 3 #这里是一个匿名函数,x是参数,x+1是对参数的操作 4 func(1) ...

  10. shell调用python函数 参数 返回_Python之系统shell交互(subprocess)

    subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/output/error 管道,并获取它们的返回(状态)码.这个模块的目的在于替换几个旧的模 ...

最新文章

  1. jQuery学习笔记6:表单选择器
  2. 自己整理的shell笔记
  3. 线上慢查询?试试这几个优化思路!
  4. 敏捷团队如何进行绩效考核?
  5. system函数阻塞_CompletableFuture:让你的代码免受阻塞之苦
  6. c语言实现辗除法,辗除法什么东西哦?
  7. 那位标榜技术驱动的开发者去哪了?
  8. 如何提升大数据分析能力
  9. json解析与序列化
  10. JQuery语法,选择器和事件
  11. 中级软件测试笔试题100精讲_软件测试工程师笔试题目(含答案)
  12. 未知环境探索(二)基于边界点的自主环境探索
  13. python学习总结4 - 流程控制工具
  14. 逻辑强化(03)真假推理 知识练习
  15. php 加密算法+接口安全技术
  16. 微博营销中的 KOL 分析
  17. 支持win7的无损分区大小调整软件
  18. 新手小白进阶_枚举 enum
  19. 怎么破解电脑系统管理员密码?黑客用cmd批处理命令
  20. linux系统中的分区与挂载,以及使用LVM逻辑卷管理器管理物理卷,卷组,逻辑卷知识点总结

热门文章

  1. 阻塞io阻塞io_Redis:RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型
  2. 黑苹果闪屏解决方法_脖子黑可以用什么方法解决,专家讲解
  3. 使用睡袋_在户外一个关乎睡眠的重要因素——睡袋
  4. 虚拟机中的黑苹果系统经常卡死_程序员吐槽macOS 10.15系统:破坏SSH默认规则
  5. 电动双联电位器ZW1613
  6. APPLE:疑问驱动下的学习与实践
  7. 究竟使用什么样的万向轮?
  8. 教育的本质是人点亮人
  9. jquery.dataTables.min.js: Uncaught TypeError: Cannot read property 'style' of undefined
  10. centos oracle 服务自动启动,CentOS下配置Oracle 11gR2为系统服务自动启动