以前自学没注意过参数的传导中*和**的用法,这次趁着上课了解了一下,顺便写个随笔记一下。

1.打包用法

在参数传导中*args是不定长参数,传入的参数是不限制个数的,比如

def bdc(*args):
print(type(args))
print(args)
bdc(1,2,3,4,5,6,7,[1,2,3,4,5,6])

打印出来的结果是

<class 'tuple'>
(1, 2, 3, 4, 5, 6, 7, [1, 2, 3, 4, 5, 6])

也就是说args中保存的是传入的所有参数,保存方式为元组

再看看**的用法,也就是**kwargs这个关键字参数,比如

def bdc(**kwargs):
print(type(kwargs))
print(kwargs)
bdc(a=1,b=[1,2,3,4,5],c={1,23,4})

打印出来的结果是

<class 'dict'>
{'a': 1, 'b': [1, 2, 3, 4, 5], 'c': {1, 4, 23}}

也就是说kwargs虽然同样是打包用法,但是保存的格式却不相同,kwargs保存格式为字典

2.解包用法

先来看*的解包用法

def bdc(a,b,c,d):
print(a,b,c,d,)
i = (1,2,3,4)
bdc(*i)

结果如下

1 2 3 4

再来看看**的解包

def bdc(a,b,c,d):
print(a,b,c,d,)
i = {'a':1,'b':2,'c':3,'d':4}
bdc(**i)

结果如下

1 2 3 4

需要注意的是在定义的时候*和**表示的是打包,但是在调用的时候*和**表示的却是解包,这点不能搞混淆。之前练习不小心混淆了导致一直报错,还有一点是*和**的类型问题,*使用和元祖类型挂钩而**则是和字典,以后要多注意

Python中*和**的作用(课堂小结)的更多相关文章

  1. 关于Python中迭代器的作用

    迭代器的定义:含有__iter__()方法和__next__()方法的就是迭代器,即(iterate) 含有__iter__()方法就可以使用for循环,即iterable(可迭代的) Iterabl ...

  2. Python中__new__的作用

    __new__ 的作用 依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径.还 ...

  3. python中的 * 和 ** 作用含义

    python中的 * 和 ** ,能够让函数支持任意数量的参数,它们在函数定义和调用中,有着不同的目的 一. 打包参数 * 的作用:在函数定义中,收集所有位置参数到一个新的元组,并将整个元组赋值给变量 ...

  4. [问与答]Python 中 __all__ 的作用 ?

    你要是看Python的源码或者相关框架的源码,总是在 __init__.py 或者是源文件的开头看到一个 __all__ 变量的定义,今天就说说它的作用. orangleliu 问题出处 Can so ...

  5. Python 中 __all__ 的作用(转)

    之前看代码每次遇到import *时就会特别蒙,看到这篇文章一下子就弄明白了,原文地址:https://www.cnblogs.com/alamZ/p/6943869.html 1.测试文件foo.p ...

  6. Python中assert的作用?

    1. assert 的作用是什么? assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常. 什么情况下我们会需要这样的代码呢 ...

  7. 简述python中的@staticmethod作用及用法

    关于@staticmethod,这里抛开修饰器的概念不谈,只简单谈它的作用和用法. staticmethod用于修饰类中的方法,使其可以在不创建类实例的情况下调用方法,这样做的好处是执行效率比较高.当 ...

  8. python中reload(sys)作用

    python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报错UnicodeDecodeError: 'ascii' codec can't decode ...

  9. Python中进程线程协程小结

    进程与线程的概念 进程 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程.需要强调的是:同一个程序执行两次,那也是两个进程. 进程:资源管理单位(容器). 线程:最小执行单位,管理线程的是进程. ...

随机推荐

  1. 两个1/x类的广义函数

    [转载请注明出处]http://www.cnblogs.com/mashiqi 2017/04/15 1.$\text{p.v.}\,\frac{1}{x}$ 因为$(x \ln x - x)' = ...

  2. 深入理解synchronized方法同步的是方法还是对象?

    一.运用synchronized关键字 首先我们来看看一个多线程中线程不安全的列子 代码如下: 共享数据类: public class NotSynchronizated extends Thread ...

  3. jupyter notebook中使用mpld3进行交互

    用pycharm进行远程服务器debug可以说是非常的爽了,但是设置远程的图片在本地显示会非常的麻烦 jupyter可以用%matplotlib inline 来远程plt.show图片,但是有一个问 ...

  4. mysql数据库-定义函数-存储过程写法

    ------------- mysql  定义自定义函数写法 DELIMITER $$ USE `iwmsdb`$$ DROP FUNCTION IF EXISTS `F_WM_DBNAME`$$ C ...

  5. linux基础命令一

    linux基础命令一 1.date命令 date命令介绍:显示或者设置系统日期 date命令的语法: 显示日期:date  [options...]  [+FORMAT] FORMAT:为显示日期的格 ...

  6. 实现两个矩阵相乘的C语言程序

    程序功能:实现两个矩阵相乘的C语言程序,并将其输出 代码如下: #include "stdafx.h" #include "windows.h" void Mu ...

  7. 《DSP using MATLAB》Problem 7.10

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  8. python------Socket网略编程

    上节课程回顾: 静态变量:与类无关,不能访问类里的任何属性和方法. 类方法:只能访问类变量. 属性:把一个方法变成静态属性, 反射: __new__:先于__init__执行: __call__: c ...

  9. javascript将浮点数转换成整数

    Summary 临时我就想到3个方法而已.假设读者想到其它好用方法,也能够交流一下 parseInt 位运算符 Math.floor Math.ceil Description 一.parseInt ...

  10. 【python】如何将ipdb的python解释器路径切换至虚拟环境中

    背景: 利用virtualenv构建一个python3.5的虚拟环境,在该虚拟环境中使用ipdb调试程序,结果报错找不到某一个模块. 程序的所有依赖模块都已经成功安装在虚拟环境中. 在虚拟环境中,te ...