python写函数的时候,有时候会不确定到底传入多少值。

首先是,*args,单星号参数收集参数:

 1 #!usr/bin/python
2 #-*-coding:utf-8-*-
3
4 #定义一个简单的参数收集的函数;
5 def functionx(x,*args):
6 print(x) #打印收集到的变量x
7
8 results = x #将变量x赋值给results
9 print(args) #打印收集到的不确定数量的变量args
10
11 #循环读取args,必须是可读取的嘛,因为args是可迭代的数据类型tuple
12 for i in args:
13 results += i #将代码results = x获得的值与循环得到的i相加再赋值给results
14 return results #函数的返回值
15
16 test = functionx(1,2,3,4,5,6,7,8,9) #将1-9之间所有的数作为参数传递给functionx
17 print(test) #打印是否符合预期.

上例可以看出,值1传递给了x,值2,3,4,5,6,7,8,9作为元组传递给了args。再来一个:

1 #定义函数并只让*args作为参数;
2 def foo(*args):
3 print(args) #在函数体内打印
4 print(type(args)) #在函数体内打印数据类型
5
6 foo(1,2,3) #调用函数传值1,2,3。输出:第一个print,(1, 2, 3);第二个print,<class 'tuple'>
7 foo('baidu','google','facebook') #再次调用函数传值。输出:第一个print,('baidu', 'google', 'facebook');第二个print,<class 'tuple'>

第三是*args只有一个值的情况,打印的时候还是以元组分解符()封闭,但是print出来的是(x,)这种形式,其中x是值,后面的逗号是元组在只有一个值的时候表示元组的方式(我的理解)。

1 def foo(x,*args):
2 print("x: ", x)
3 print("Args: ", args)
4
5 foo(1,2) #传入1,2,1会对应x,而2则会对应*args,那么输出是Args: (2,)

最后一种是空tuple的情况,也就是在传值的过程中,*args收集不到值。

1 def foo(x,*args):
2 print("x: ", x)
3 print("args: ", args)
4
5 foo(1); #调用函数,第一个print输出1,第二个print输出:args: ()

再有一种是**kargs,双星号参数收集:

1 def foo(**kargs):
2 print("Kargs: ", kargs);
3
4 foo(a=1,b=2,c=3); #调用函数,第一个print输出:Kargs: {'a': 1, 'b': 2, 'c': 3};第二个print输出:<class 'dict'>

一个综合例子:

1 def functionx(x,y,z,*args,**kargs):
2 print(x)
3 print(y)
4 print(z)
5
6 print(args)
7 print(kargs)
8
9 functionx(1,2,3,4,name='baidu');

输出结果如下:

1
2
3
(4,)
{'name': 'baidu'}

----------------------------------------------总结----------------------------------------------

1,*args收集到的参数是tuple类型,可以为空;

2,**kargs收集到的参数是dict类型,可以为空,但是传值的时候要注意一定是类似:a='a', b='b'这样子的形式。其他的方式会报错。

写在最后,另外一种函数的传值方式。有点类似逆向传值:

1 def add(x,y):
2 return x+y
3
4 print(add(2,3)) #输出5
5
6 bars = (2,3) #定义元组bars
7 print(type(bars)) #输出:<class 'tuple'>
8 print(add(*bars)); #输出5

先把要传入的值放到一个元组bars中,然后调用函数add并传入元组,add(*bars)这样子的方式,把值传入到函数内。这有点类似参数收集的逆过程,但是要求元组中的个数要求和函数的参数个数一致。要不然会报错。

再来一个例子加深印象:

1 def book(reader,bookname):
2 print("%s is reading book %s" %(reader,bookname))
3
4 book(reader='Eric',bookname='Easy for PHP') #正常函数调用方式
5
6 bars = {'reader':'Mary', 'bookname':'Easy for python'}
7 book(**bars) #逆向调用方式

python函数收集不确定数量的值的更多相关文章

  1. 9 - Python函数定义-位置参数-返回值

    目录 1 函数介绍 1.1 为什么要使用函数 1.2 Python中的函数 2 函数的基本使用 3 函数的参数 3.1 参数的默认值 3.2 可变参数 3.2.1 可变位置传参 3.2.2 可变关键字 ...

  2. Python 函数返回值

    本章详细介绍 返回值: 0x 00 返回值简介 0x 01 指定返回值与隐含返回值 0x 02 return 语句位置与多条 return 语句 0x 03 返回值类型 0x 04 函数嵌套 0x 0 ...

  3. Python 函数返回多值

    返回多值函数可以返回多个值吗?答案是肯定的.比如在游戏中经常需要从一个点移动到另一个点,给出坐标.位移和角度,就可以计算出新的坐标:# math包提供了sin()和 cos()函数,我们先用impor ...

  4. Python 函数返回值、作用域

    函数返回值 多条return语句: def guess(x): if x > 3: return "> 3" else: return "<= 3&qu ...

  5. Python函数的返回值和作用域

    函数的返回值和作用域 1.返回值 def guess(x):    if x > 3:        return "> 3"    else:        retu ...

  6. 一文搞懂Python函数(匿名函数、嵌套函数、闭包、装饰器)!

    Python函数定义.匿名函数.嵌套函数.闭包.装饰器 目录 Python函数定义.匿名函数.嵌套函数.闭包.装饰器 函数核心理解 1. 函数定义 2. 嵌套函数 2.1 作用 2.2 函数变量作用域 ...

  7. Python函数返回不定数量的值

    Python的函数是可以return多个值的,但其本质上还是返回单个值,只是利用了tuple的自动打包,将多个值打包成单个tuple返回. 使用代码验证: def func_a(): return 1 ...

  8. python函数进阶(函数参数、返回值、递归函数)

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...

  9. 初识python 函数(定义,传参,返回值)

    python基础(二): 菜鸟教程基础知识讲解的非常全面,内容选择我认为的重点输出一遍 函数: 定义一个函数: 你可以定义一个由自己想要功能的函数,以下是简单的规则: def fun(arg): pa ...

随机推荐

  1. CSS3 学习笔记(中)

    七.文档流 文档流(normal flow)--网页的基础(最底下的一层),我们所创建的元素默认都是在文档流中进行排列. 对于元素有两个状态:在文档流 或 脱离文档流. 元素在文档流的特点: 块元素: ...

  2. J - Sushi 题解(期望dp)

    题目链接 题目大意 给你n个盘子,每个盘子可能有1,2,3个披萨 你选到每个盘子的概率是一样的. 你如果选到空的盘子什么都不做 如果你选到有披萨的盘子则吃掉一个披萨 求吃完所有披萨的期望 题目思路 设 ...

  3. GitHub 上 1.3k Star 的 strman-java 项目有值得学习的地方吗?源码视角

    大家好,我是沉默王二. 很多初学编程的同学,经常给我吐槽,说:"二哥,你在敲代码的时候会不会有这样一种感觉,写着写着看不下去了,觉得自己写出来的代码就好像屎一样?" 这里我必须得说 ...

  4. 放进你的收藏夹吃灰!Linux 运维必备的 40 个命令总结

    1.删除0字节文件 find -type f -size 0 -exec rm -rf {} ; 2.查看进程 按内存从大到小排列 PS -e -o "%C : %p : %z : %a&q ...

  5. 《我想进大厂》之Spring夺命连环10问

    1.说说Spring 里用到了哪些设计模式? 单例模式:Spring 中的 Bean 默认情况下都是单例的.无需多说. 工厂模式:工厂模式主要是通过 BeanFactory 和 Application ...

  6. Elements-of-Python_02_DataType

    (内容包括数据类型,运算符) 1.数据类型Data Types 1.1 简介Brief Introduction Python3中的数据类型,类型关键字,赋值,见下表: 1.1数字Number Pyt ...

  7. sqli-labs-master less05 及 Burp Suite暴力破解示例

    一.首先测试显示内容 例:http://localhost/sqli-labs-master/Less-5/?id=1 http://localhost/sqli-labs-master/Less-5 ...

  8. 怎么用Iometer测试存储性能

    1.Disk Targets选项栏中选择要测试的磁盘,1 per target of Outstanding I/Os 保持默认即可. 2.在Access Specifications栏中新建测试条件 ...

  9. Qt实现客户端与服务器消息发送与文件传输

    Qt实现客户端与服务器消息发送与文件传输需要使用到 QTcpSocket:提供套接字QTcpServer:提供基于TCP的服务端,官方文档的解释如下: This class makes it poss ...

  10. GitHub上最火的、最值得前端学习的几个数据结构与算法项目!没有之一!

    Hello,大家好,我是你们的 前端章鱼猫. 简介 前端章鱼猫从 2016 年加入 GitHub,到现在的 2020 年,快整整 5 个年头了. 相信很多人都没有逛 GitHub 的习惯,因此总会有开 ...