必须参数

最常见的传参

def say(arg):
print(arg)
say("Hello world")

输出:

Hello world

默认参数

def say(arg, arg2="world"):
print(arg + arg2)
say("Hello")

输出:

Helloworld

默认参数的要求:
1.默认参数在函数定义的时候传入默认值
2.默认参数要在必须参数后面,不能默认参数在必须参数之前

我们一般调用函数的时候一般就是采用,必须参数正常传递,然后默认参数采用关键字传参的办法例如:

requests.get(url,allow_redirects=False)

这个例子是requests禁止重定向需要传递的一个参数
因为默认参数一般都是特别多,而且不需要每次调用的时候都自己传递,只有遇到特殊需求的时候进行更改

关于*args和*kwargs的使用方法

例子:

def test(a,*args,**kwargs):
print(a,args,kwargs)
test(1,2,3,4,c=5,d=6)

输出:

1 (2, 3, 4) {'c': 5, 'd': 6}

我相信很多文章都说了,形参的顺序不能变化,必须是 test(a,*args,**kwargs) 这样一个顺序
形参a是必须参数,必须参数必须有相应的实参对应,其余的赋给 *args并形成一个元祖 ,剩余采用关键字传参的都付给 **kwargs并形成一个字典

说几个其余文章没有提到的:

  1. *args, **kwargs不是固定的变量名,哪怕形参叫 fuck 也是可以运行的,带几个*才是区分这几个参数的关键

  2. 这三种类型的参数只有必须参数必须传递,其余的参数都可以不传递
    例如:不传递 *args

    def test(a,*args,**kwargs):
    print(a,args,kwargs)
    test(1,c=5,d=6)

    输出:

    1 () {'c': 5, 'd': 6}

    不传递 **kwargs参数

    def test(a,*args,**kwargs):
    print(a,args,kwargs)
    test(1,2,3,4)

    输出:

    1 (2, 3, 4) {}
  3. 这几种类型的参数不只是在函数定义中可以使用,函数调用的时候也可以使用

    def a(b,c):
    print(b,c) dict_ = dict(
    b = 1,
    c=2
    ) a(**dict_)

    输出:

    1 2

    不过需要注意,字典的键必须对应形参的名字

    def a(b,c):
    print(b,c) tuple_ = (1,2)
    a(*tuple_)

    输出:

    1 2

其实归根结底这些都是拆包

关于python函数传参的更多相关文章

  1. python函数传参

    之前一直没有注意过该问题,在leetcode144中写递归发现该问题,不知道递归函数传参是指针还是引用. 参考:http://c.biancheng.net/view/2258.html 如果是不可变 ...

  2. python -- 函数传参

    一.参数传入规则 可变参数允许传入0个或任意个参数,在函数调用时自动组装成一个tuple: 关键字参数允许传入0个或任意个参数,在函数调用时自动组装成一个dict: 1. 传入可变参数: def ca ...

  3. 【JS学习笔记】函数传参

    比如仅仅改变背景的颜色 函数传参:参数就是占位符. 那么在什么时候用传参呢?函数里定不下来的东西. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

  4. c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参

    c# 通用类型系统 及变量在 深拷贝 浅拷贝 函数传参 中的深层次的表现 在编程中遇到了一些想不到的异常,跟踪发现,自己对于c#变量在内存上的表现理解有偏差,系统的学习并通过代码实验梳理了各种情况下, ...

  5. 函数传参,改变Div任意属性的值&&图片列表:鼠标移入/移出改变图片透明度

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. x64汇编第三讲,64位调用约定与函数传参.

    目录 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 二丶x64汇编 2.1汇编详解 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 在x86下我们汇编的传参如下: ...

  7. Python类三种方法,函数传参,类与实例变量(一)

    1 Python的函数传递: 首先所有的变量都可以理解为内存中一个对象的'引用' a = 1 def func(a): a = 2 func(a) print(a) # 1 a = 1 def fun ...

  8. js函数传参

    函数传参:重用代码,首先保持html代码相对一致,把核心主程序用函数包起来,把每组不同的值找出来,通过传参的方式减少代码的使用 下面代码是我早期练习的,大家随便看看就好 <!DOCTYPE ht ...

  9. 【又长见识了】函数传参,params参数,ref和out参数详解

    一.原来函数这样传参 先看一个函数和函数调用. static void Main(string[] args) { ; Test(num);//局部变量在使用之前赋值 //Test(10); //直接 ...

  10. JS中的函数传参

    前言: 函数分为有参有返回值,有参无返回值,无参无返回值,无参有返回值:那么对于无参数的函数你想使用函数的调用怎么办呢?如果你想封装一个代码,实现多种功能,但是形参大于实参或者实参大于形参又该如何?本 ...

随机推荐

  1. Python数据科学手册-Numpy数组的计算:广播

    广播可以简单理解为用于不同大小数组的二元通用函数(加减乘等)的一组规则 二元运算符是对相应元素逐个计算 广播允许这些二元运算符可以用于不同大小的数组 更高维度的数组 更复杂的情况,对俩个数组的同时广播 ...

  2. Rust-语句和表达式

    语句和表达式 Rust 的函数体是由一系列语句组成,最后由一个表达式来返回值,例如: fn add_with_extra(x: i32, y: i32) -> i32 { let x = x + ...

  3. 我眼中的大数据(三)——MapReduce

    ​ 这次来聊聊Hadoop中使用广泛的分布式计算方案--MapReduce.MapReduce是一种编程模型,还是一个分布式计算框架. MapReduce作为一种编程模型功能强大,使用简单.运算内容不 ...

  4. kubernetes1.20 部署 traefik2.3

    一.概述 Traefik 是一个开源的可以使服务发布变得轻松有趣的边缘路由器.它负责接收你系统的请求,然后使用合适的组件来对这些请求进行处理. 除了众多的功能之外,Traefik 的与众不同之处还在于 ...

  5. 实用脚本:检查高 CPU / 内存消耗进程

    1 检查高 CPU 消耗进程在 Linux 上运行了多长时间的 Bash 脚本 该脚本将帮助你确定高 CPU 消耗进程在 Linux 上运行了多长时间. # vi /opt/scripts/long- ...

  6. Java后端开发——美团(牛客)

    Java后端开发--美团(牛客) Java的基本数据类型,各自的字节数 ​ 老生常谈,不多说了. 类型 字节数 byte 1字节 short 2字节 int 4字节 long 8字节 float 4字 ...

  7. java常用注解校验参数

    validation中内置的constraints 注解 描述 @AssertFalse 所注解的元素必须是Boolean类型,且值为false @AssertTrue 所注解的元素必须是Boolea ...

  8. 实例分析Scheduled Thread Pool Executor与Timer的区别

    摘要:JDK 1.5开始提供Scheduled Thread PoolExecutor类,Scheduled Thread Pool Executor类继承Thread Pool Executor类重 ...

  9. A-卷积网络压缩方法总结

    卷积网络的压缩方法 一,低秩近似 二,剪枝与稀疏约束 三,参数量化 四,二值化网络 五,知识蒸馏 六,浅层网络 我们知道,在一定程度上,网络越深,参数越多,模型越复杂,其最终效果越好.神经网络的压缩算 ...

  10. 基于tauri打造的HTTP API客户端工具-CyberAPI

    国庆长假和朋友聚会的时候,和朋友谈起最近这段时间捣鼓tauri,写了一个HTTP API客户端工具.『你写了这么多东西,其实有想过是为了啥不?』为了啥这是一个很大的命题,当初每个项目的时候都想过它应该 ...