zoukankan      html  css  js  c++  java
  • Day3-Python基础3--函数参数及调用

    一、return返回值

    return的两个作用:

    1)需要用一个变量来接受程序结束后返回的结果

    2)它是作为一个结束符,终止程序运行

     1 def test():
     2     print("我是return前的命令")
     3     return 0
     4     print("我是return后的命令") 
     5  
     6 x = test()
     7 print(x)
     8  
     9 #输出
    10 我是return前的命令 
    11 0 #结果返回值

    从上面的代码可以看出,return 0  后面的代码停止执行了,程序只打印了return前面的代码,而函数的返回值0复制给

    了变量x。

     二、函数参数与局部变量

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

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

    代码如下:

    1 def test(x,y): #x,y是形参
    2     print(x)
    3     print(y)
    4  
    5 test(1,2) #1和2是实参
    6 #输出
    7 1
    8 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)
     8  
     9 #输出
    10 --------互换前-----
    11 1
    12 2
    13 --------互换后-----
    14 2
    15 1

    在实参数>虚参数的时候,会因为参数不对应报错:

     1 def test(x,y):
     2     print(x)
     3     print(y)
     4 print("--------多一个参数----")
     5 test(1,2,3)
     6  
     7 #输出
     8 --------多一个参数----
     9 Traceback (most recent call last):
    10   File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>
    11     test(1,2,3)
    12 TypeError: test() takes 2 positional arguments but 3 were given  #test()函数需要传两个实参,你传了三个实参

    同理,当实参数<虚参数的时候,也会因为参数不对应报错:

     1 def test(x,y):
     2     print(x)
     3     print(y)
     4 print("--------少一个参数----")
     5 test(1)
     6  
     7 #输出
     8 --------少一个参数----
     9 Traceback (most recent call last):
    10   File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>
    11     test(1)
    12 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)
     9  
    10 #输出
    11 --------互换前------
    12 1
    13 2
    14 --------互换后------
    15 1
    16 2

    位置参数与关键字参数结合:

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

    1 def test(x,y):
    2     print(x)
    3     print(y)
    4  
    5 test(1,y=2)
    6  
    7 #输出
    8 1
    9 2

    2)但是下面这种情况是错误的。这时候形参由于赋值过多,不能多次

     1 def test(x,y):
     2     print(x)
     3     print(y)
     4  
     5 test(1,x=2)
     6  
     7 #输出
     8 Traceback (most recent call last):
     9   File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>
    10     test(1,x=2)
    11 TypeError: test() got multiple values for argument 'x' #给x形参传的值过多

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

     1 def test(x,y):
     2     print(x)
     3     print(y)
     4  
     5 test(y=2,1)
     6  
     7 #输出
     8 File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8
     9     test(y=2,1)
    10             ^
    11 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,z=2,y=3)
     7  
     8 #输出
     9 1
    10 3
    11 2

    总结:关键字参数是不能写在位置参数前面的

  • 相关阅读:
    react.js+axios跨域
    O2O项目之一 环境搭配
    跟scss相关的两个包
    [nodemon] app crashed
    解决node.js链接数据库时出现的报错 --- client does not support authentication
    在Xshell 运行angular 项目时,找不到node-sass模块,安装node-sass模块时,又出现权限问题
    ajax请求数据时,get和post的区别
    web前端如何性能优化提高加载速度
    js数组去重
    前端跨域
  • 原文地址:https://www.cnblogs.com/bldly1989/p/6548943.html
Copyright © 2011-2022 走看看