python的参数分类

python参数可以分为两类:1.定义时的参数——形参(形式参数)、2.调用时的参数——实参(实际参数,传参)

实参的规则

实参就是在函数调用的时候,通过函数后面的括号传递给函数,让函数处理的值,如下:

  1. def factorial(x, y): # 定义一个factorial函数,设置两个形参
  2. """
  3. This is a function that can calculate the product of the two parameter that you send.
  4. """ # 这称为函数的文档,对函数作说明的,可写可不写,可参考本人博客
  5. return x * y
  6. factorial(3, 5) # 调用传参,正确
  7. factorial(2, y=5) # 调用传参,正确
  8. factorial(x=7, y=5) # 调用传参,正确
  9. factorial(y=4, x=6) # 调用传参,正确
  10. factorial(x=1, 5) # 错误

仔细观察上面代码中的传参方式,这时候我们发现,传递的参数只有两种:

  1. factorial(3, 5),这里的3和5称为普通位置参数(positional),
  2. factorial(2, y=5),这里的2是普通位置参数,y=5称为关键字参数(keyword)

实参传参的参数类型只有这两种,但是有一些规则:

  1. 普通位置参数要在关键字参数之前,比如上面的factorial(2, y=5)是正确的;factorial(x=1, 6)是错误的
  2. 如果都是普通位置参数,只能按照顺序传参,如上面的factorial(3, 5),x对应着3,y对应着5 , 但是如果都是关键字传参,则顺序可以不同,如上面的factorial(y=4 , x=6)
形参的各种规则

形参(即函数在定义时用来占位置的参数)可以分为1、不带缺省值的参数、2、带缺省值的参数、3、可变位置参数、4、可变关键字参数、5、key-word only参数

1、不带缺省值的参数

在上面我们定义的factorial中的两个参数称为不带缺省值的参数,下面代码也是:

  1. def hello(x, y): # x和y都是不带缺省值的参数,调用时必须传参,不然报错
  2. print('这是', x y)

2、带缺省值的参数

  1. def ex(w=5): # 这是一个带缺省的参数w,如果传参了就是用传入的参数,如果没传参就使用缺省值5
  2. print("如果没传参就用缺省值噢", w)

3、可变位置参数

有缺省值的形参和没有缺省值的形参,我们都可以通过位置传参传入,也可以通过关键字传参传入(上面讲的两种传参方式都可以),如果通过位置传参传入的参数过多,多余的会被收集到args中,并且在args中生成一个元组tuple,*args可以接收0个或多个位置参数,可变位置参数的定义是前面加一个 *

在函数定义时,没有缺省值的形式参数一定要放在有缺省值的形参之前,不然会报错

  1. def f1(x, y=4, *args):#这里args就是一个可变位置参数
  2. print([x, y, args])
  3. f1(3, 5, 2, 7) # 3给x, 5给y,2、7都给args

4、可变关键字参数

有缺省值的形参和没有缺省值的形参,我们都可以通过位置传参传入,也可以通过关键字传参传入(上面讲的两种传参方式都可以),如果通过关键字传参传入的参数过多,多余的会被收集到kwargs中,并且在kwargs中生成一个元组字典,**kwargs可以接收0个或多个关键字参数,可变关键字参数的定义是前面加两个 *

**kwargs只能放在形式参数的最后

  1. def f2(x, y=3, *args, **kwargs): # 一般函数形参的格式
  2. print(x, y, args, kwargs)
  3. f2(4,3,2,5,z=6,g=3)# 4给了x 3给了y 25给了args z=6g=3给了kwargs

5、key-word only参数

从名字就可以看出,传参时只能接收keyword(关键字传参),放在*args和**kwargs中间:

在前面讲到说,没有缺省值的一定要放到有缺省值的后面,但是在key-word only参数中,则无所谓顺序,因为都必须通过关键字传参

  1. def test(x, y, *args, z=4, s, **kwargs):# z s key-word only形式参数
  2. print(x,y,args, z, s, kwargs)
  3. test(3, 2, 5, z=5, s=4, y=7) # 3给了x,2给了y, 5给了args,z=5和s=4给了z和s,y=7给了kwargs

因为key-word only参数只能放在*args后面,如果我们定义时,不想设置可变位置参数,但是需要key-word only参数,只需要在key-word only参数之前加一个 *

  1. def a(x, *, w): # w是key-word only参数
  2. print(x,w)
  3. a(6, w =3) # w只能使用keyword传参方式

总结:

  1. def func(x, y, *args, z=4, e, **kwargs):

我们把这个定义的形式记住即可,即函数定义时,形式参数有五种,传参时两种,多写代码测试就能记住灵活使用了。

python——函数的形参和实参、参数的更多相关文章

  1. 一道题带你搞定Python函数中形参和实参问题

    昨天在Python学习群里有位路人甲问了个Python函数中关于形参和实参一个很基础的问题,虽然很基础,但是对于很多小白来说不一定简单,反而会被搞得稀里糊涂.人生苦短,我用Python. 为了解答大家 ...

  2. 第5章函数进阶 第5.1节 Python函数的位置参数、关键字参数精讲

    前面第二章简单介绍了函数定义的语法,经过后面一系列的学习,函数有必要再次介绍一下相关内容. 一.    关于函数的语法 1.    语法 def 函数名([参数]): 函数文档字符串 函数体      ...

  3. JavaScript中函数的形参和实参的实现原理剖析

    我们都知道JS里面参数的传递是可以不一样的,比如我们有一个函数: <script type="text/javascript"> function one(a,b,c) ...

  4. day-11函数的形参与实参

    形参与实参 参数介绍: 函数为什么要有参数:因为内部的函数体需要外部的数据 怎么定义函数的参数:在定义函数阶段,函数名后面()中来定义函数的参数 怎么使用函数的参数:在函数体中用定义的参数名直接使用 ...

  5. js 函数中形参与实参的关系

    函数中形参与实参的关系 对于形参和实参的定义,在 权威指南中有着明确的定义.但是,我们更在意的是它们之间的关系,到底形参会不会影响到实参? 形参到底会不会影响到实参? 对于这个问题的答案,请先看以下两 ...

  6. Python入门之函数的形式参数与实参/参数的具体使用方法

    本篇目录: 一. 函数参数之形式参数与实参 二. 函数参数的具体使用 #1.位置参数:按照从左到右的顺序定义的参数 位置形参:必选参数 位置实参:按照位置给形参传值 #2.关键字参数:按照key=va ...

  7. Python 函数的一般形式及参数

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/01 21:46 # @Author : lijunjiang # @Fi ...

  8. 函数的形参和实参之arguments对象

    当函数调用函数时候传入的实参比函数声明时候制定的形参要少时候,剩余的形参就设置成了undefined.例如 function getPropertyNames(o,/*optional*/a){ va ...

  9. day_11函数的形参与实参

    昨天讲了函数的定义和简单分类 1:什么是函数:具体特定功能的代码快 --特定功能代码作为一个整体,并给该整体命名,就是函数. 函数的优点: 1:减少代码的冗余 2:结构清晰,可读性强 3:具有复用性, ...

随机推荐

  1. c++ exercises

    1.定义个数组并初始化,然后将数组倒置,并显示倒置前和倒置后的结果. #include <iostream> #include <stdio.h> using namespac ...

  2. 决策树算法系列之一 ID3

    1 什么是决策树 通俗来说,决策树分类的思想类似于找对象 一个女孩的母亲要给这个女孩介绍男朋友 (分类问题.见或不见) 女孩有自己的一套标准 长相 收入 职业 见面与否 丑 高 某箭队经理 不见 中等 ...

  3. Python小游戏——猜数字教程(random库教程)

    今天来开发一个简单的数字逻辑游戏,猜数字(数字炸弹) 首先开发游戏第一件事,了解需求. 猜数字游戏规则: 计算机随机生成一个指定范围的数字,由玩家来猜测, 之后计算机会根据玩家提供数字来与自己生成的数 ...

  4. JVM参数的配置及意义

    JVM参数设置.分析 因为在工作中遇到了JVM参数的配置,不明白,网上搜索发现一篇好文,转载至:https://www.cnblogs.com/redcreen/archive/2011/05/04/ ...

  5. 内网转发之reGeorg+proxifier

    先将reGeorg的对应脚本上传到服务器端,reGeorg提供了PHP.ASPX.JSP脚本,直接访问显示“Georg says, 'All seems fine'”,表示脚本运行正常. 运行 pyt ...

  6. PHP 调试脚本

    如果想要通过php.exe直接运行和调试脚本,可以在PHPStorm配置如下: 1.PHP安装XDebug的扩展. 2.在PHPStorm中,配置XDebug: 1) 打开菜单 "文件&qu ...

  7. Java Stream函数式编程案例图文详解

    导读 作者计划把Java Stream写成一个系列的文章,本文只是其中一节.更多内容期待您关注我的号! 一.什么是Java Stream? Java Stream函数式编程接口最初是在Java 8中引 ...

  8. maven子项目导出成jar包及运行

    第一步:选这idea右侧栏的maven projects 第二步:选中需要打包成jar包的项目下的lifecycle 第三步:选中package 第四步:点击开始导出 第五步:使用winRAR打开ja ...

  9. Python斐波那契数列

    今天偶然看到这个题目,闲着没事练一下手 if __name__ == '__main__': """ 斐波那契数列(Fibonacci sequence), 又称黄金分割 ...

  10. pytest中unicode编码问题(如test_fix.py::Test1::test_s1[\u6d4b\u8bd5-\u6d4b\u8bd5])

    现象: 采用如下方式可将其正确显示为中文 ss = r"test_fix.py::Test1::test_s1[\u6d4b\u8bd5-\u6d4b\u8bd5]" print( ...