Python和C++不同,并没有指针,因此python中的*号作用和C++中不同。网上对于这方面的教程写的啰啰嗦嗦,一点不简明扼要。看的让人找不到重点。我这里快速的讲解一下。

1.最简单的不用细说,是一个乘法运算符号

a=1
b=2
c=a*b

输出c当然是1×2=2。相信这并非是大家关心的重点。

2.收集列表中多余的值

这样无需确保值与变量的个数相同。举例来说:

a,b,*c=[1,2,3,4]

c前面的*号主要是为了收集参数。这样输出a,是1;输出b,是2,输出c,是[3,4]。注意这里收集的是列表。

3.涉及到函数了,*号的作用在于收集参数或者分配参数。

具体用途,是看用*号的场合是在函数定义时还是函数调用时。(这句话至关重要!)

3.1 如果在定义函数时,*代表收集参数,**代表收集关键字参数。

3.1.1定义函数时,一个*的情况:

def myprint(*params):print(params)

这时候如果以如下方式调用myprint

>>> myprint(1,2,3)

则会输出:

(1,2,3)

因此作用是将调用时提供的所有值,放在一个元组里。

跟上面2里的有所区别,2里是收集列表中多余的参数,而这里是收集好参数,一起放进元组里面。

这种情况下,在函数定义时的形参里的*params后面,就最好不要再加入别的形参了,比如你定义成 def myprint(*params,x) ,调用的时候myprint(1,2,3),就会报错。因为这样python分不清哪个数据是给params的。如果你非要这么定义也行,不过在调用的时候,必须显示的指出哪个值是给x的。比如myprint(1,2,x=3),通过这种方式调用才不会出错。

3.1.2 定义函数时,两个**的情况:

对于之前参数是*params的情况,myprint并不能传入关键字参数。啥意思呢,就是仍然采取这种方式定义时:

def myprint1(*params):print(params)

这样是错误的:

>>> myprint1(x=1,y=2,z=3)  #会报错

因为*号并不会收集关键字参数。所以需要如下方式修改,采用两个星号:

def myprint2(**params):print(params)

这样调用myprint2就不会有问题:

>>> myprint2(x=1,y=2,z=3)

会输出如下结果:

{'z'=3,'x'=1,'y'=2}

得到一个字典。字典中元素的先后顺序取决于你的环境。

3.2 如果在调用函数时,*和**都是分配参数用的

3.2.1 调用函数时,一个*的情况:

例如,还是刚刚那个print函数

def myprint(x,y):print(x)print(y)

这下形参有两个了,但是我能不能只传入一个形参?

对,“调用函数时分配参数”“定义函数时收集参数”反过来了!

假设你还有一个元组:

params=(1,2)

可以通过如下方式调用myprint函数:

>>> myprint(*params)

就可以输出:

1
2

3.2.2 调用函数时,两个**的情况:

和上面3.1.2很像,是分配字典的。

这回params是一个字典了:

params={'x':1,'y':2}

可以通过如下方式调用myprint函数:

>>> myprint(**params)

就可以输出:

1
2

3.3 如果在定义和调用函数时,都使用*号呢?

这样将值传递元组或字典,没有实际意义,不发挥收集参数或者分配参数的意义,不如不用。

实例:

数据库查询过滤字段:

session.query(myClass).filter_by(id="111", info="test")

如果想把字段以参数传递进来

web_dict={id="111", info="test"}

session.query(myClass).filter_by(**web_dict)

这样就可以了

python 中的*(星号)和**(双星号)简介相关推荐

  1. python中一个星号(*)与两个星号(**)的作用

    python中一个星号(*)与两个星号(**)的作用 目录 python中一个星号(`*`)与两个星号(`**`)的作用 一.一般用法 概述: 1.`*`表示乘法,`**`表示幂 2.`*`表示打包解 ...

  2. python的星号(*)和双星号(**)运算符的使用

    在python中, 1,星号(*)运算符可以用在两个位置,函数定义和展开集合 def func1(*args): #用星号定义可变参数列表     for arg in args:         p ...

  3. python星号和双星号的区别

    星号变量是用在函数的参数传递上,单个星号代表这个位置接收任意多个非关键字参数,将其转化成元组,而双星号代表这个位置接收任意多个关键字参数,将其转化成字典

  4. python中的星号和乘号_Python 函数中参数前面一个和两个星号(**)的区别

    Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化 脚本( shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. 在 P ...

  5. Python中的星号本质及其使用方法详解

    翻译:Python 开发者 - 一汀, 英文:Trey Hunner http://blog.jobbole.com/114655/ Python开发者 在 Python 中有很多地方可以看到*和** ...

  6. python中的星号 *的特殊用法

    一般用法: 一个星号代表乘法运算,两个星号代表幂运算. 特殊用法: 星号变量,用在函数的参数传递上.其中, 单星号变量 * 代表这个位置接收任意多个非关键字(non-keyword)参数,在函数的单星 ...

  7. Python中的星号:用途及使用方法(下篇)

    Python中 *和**很常见.无论是对于编程萌新还是许多从其他编程语言(可能无与之完全等效的运算符)迁移过来的的人,这两个运算符有时可能有点儿神秘.在此,我想详述这些运算符的用途及其多种使用方式. ...

  8. python中带星号的参数,带有一个星号 2个星号

    https://blog.csdn.net/weixin_41896508/article/details/80771817 默认值函数参数.这种函数定义时,第一个有默认值的参数后的每一个参数都必须提 ...

  9. 在python中等号前面与后面分别是什么意思-python中is与双等于号“==”的区别示例详解...

    前言 在开始本文之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识).python type()(数据类型)和value(值).is和==都是对对象进行比较判断作用的,但对对 ...

  10. 第5.2节 Python中带星号的函数参数实现参数收集

    函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数. 一.参数收集的定义 Python的函数支持可变不定数量的参数 ...

最新文章

  1. docker安装mysql并实现远程访问
  2. 一个毕业生初入社会的历程 (四)一次简单的面试...
  3. mysql getinstance_php设计模式之单例模式使用示例
  4. 如何在FPGA设计环境中加时序约束 SDC (Z)
  5. Hadoop实战项目之网站数据点击流分析(转载分析)
  6. ftp 服务器 性能,FTP 服务器性能 测试点
  7. DreamFactory入门指南 - 第2章安装和配置DreamFactory
  8. 首批拟科创板IPO名单今日揭晓!
  9. 一起啃PRML - 1.2.1 Probability densities 概率密度
  10. assembly 输出ab中所有数_罗克韦尔(AB)PLC控制器选型(2)-CompactLogix 5370
  11. 计算机网络基础试题2,计算机网络基础试题库2
  12. Android笔记:多开/分身检测
  13. 双硬盘双win10互不干扰_win10系统安装双硬盘却无法显示另一个硬盘的技巧介绍...
  14. CVE-2017-11176: A step-by-step Linux Kernel exploitation (part 4/4)
  15. 计算机考试没有输入法怎么办,输入法没有了怎么办呢 解决方法有哪些
  16. [自习任我行]第二阶段任务跟踪1
  17. [ECE]模拟试题-6
  18. 美式期权定价python_蒙特卡洛模拟和美式期权定价
  19. 足球大数据分析大小球的技巧与实例附软件
  20. python 输出没有逗号的list_阿博Python之路数据类型(下)以及数据类型转换

热门文章

  1. 基于 Kubernetes 的边缘云原生
  2. Ubuntu 20.04 nfs搭建
  3. FAT32文件系统结构分析
  4. 如何用体验赢取用户信任?让 Waymo 来教教你
  5. web前端性能优化总结
  6. Confluence 6 找到在创建 XML 备份的时候出现的错误
  7. 并发编程2:认识并发编程的利与弊
  8. 自学Java-运算符
  9. DDD领域驱动设计基本理论知识总结
  10. C#字符串二进制互换