python函数收集不确定数量的值
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函数收集不确定数量的值的更多相关文章
- 9 - Python函数定义-位置参数-返回值
目录 1 函数介绍 1.1 为什么要使用函数 1.2 Python中的函数 2 函数的基本使用 3 函数的参数 3.1 参数的默认值 3.2 可变参数 3.2.1 可变位置传参 3.2.2 可变关键字 ...
- Python 函数返回值
本章详细介绍 返回值: 0x 00 返回值简介 0x 01 指定返回值与隐含返回值 0x 02 return 语句位置与多条 return 语句 0x 03 返回值类型 0x 04 函数嵌套 0x 0 ...
- Python 函数返回多值
返回多值函数可以返回多个值吗?答案是肯定的.比如在游戏中经常需要从一个点移动到另一个点,给出坐标.位移和角度,就可以计算出新的坐标:# math包提供了sin()和 cos()函数,我们先用impor ...
- Python 函数返回值、作用域
函数返回值 多条return语句: def guess(x): if x > 3: return "> 3" else: return "<= 3&qu ...
- Python函数的返回值和作用域
函数的返回值和作用域 1.返回值 def guess(x): if x > 3: return "> 3" else: retu ...
- 一文搞懂Python函数(匿名函数、嵌套函数、闭包、装饰器)!
Python函数定义.匿名函数.嵌套函数.闭包.装饰器 目录 Python函数定义.匿名函数.嵌套函数.闭包.装饰器 函数核心理解 1. 函数定义 2. 嵌套函数 2.1 作用 2.2 函数变量作用域 ...
- Python函数返回不定数量的值
Python的函数是可以return多个值的,但其本质上还是返回单个值,只是利用了tuple的自动打包,将多个值打包成单个tuple返回. 使用代码验证: def func_a(): return 1 ...
- python函数进阶(函数参数、返回值、递归函数)
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...
- 初识python 函数(定义,传参,返回值)
python基础(二): 菜鸟教程基础知识讲解的非常全面,内容选择我认为的重点输出一遍 函数: 定义一个函数: 你可以定义一个由自己想要功能的函数,以下是简单的规则: def fun(arg): pa ...
随机推荐
- docker 中的mysql启动端口号总是被占用解决
解决: 1 查 netstat -lnp|grep 3306 2 杀 kill -9 3819 3 再查 netstat -lnp|grep 3306 4 发现还有,杀不尽 5 重启docker 6 ...
- C语言讲义——运算符(operator)
运算符(operator) 算数运算符 7种 关系运算符 6种 逻辑运算符 3种 位运算符 6种 赋值运算符 11种 共5类33种 算术运算符 加 + 减 - 乘 * 除 / 取余 % (仅限于整数类 ...
- idea2020安装破解教程
申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用 不花钱 的方式 IDEA 2020.2 激活到 2089 年 idea官网下载安装包:https:/ ...
- AA:白细胞计数
总时间限制: 1000ms 内存限制: 65536kB 描述 医院采样了某临床病例治疗期间的白细胞数量样本n份,用于分析某种新抗生素对该病例的治疗效果.为了降低分析误差,要先从这n份样本中去除一个 ...
- 从零做网站开发:基于Flask和JQuery,实现表格管理平台
摘要:本文将为大家带来基于Flask框架和JQuery实现管理平台网站的开发功能. [写在前面] 你要开发网站? 嗯.. 会Flask吗? 什么东西,没听过... 会JQuery吗? 是python的 ...
- 12_Sensor简单实例
列出Android手机所支持的Sensor. package com.example.sensorlist; import java.util.List; import android.app.Act ...
- 使用django的用户表进行登录管理
改写用户基本表 ... AUTH_USER_MODEL = 'appjwt.User' ... setting.py from django.db import models from django. ...
- mysql索引原理以及优化
一.常见查找算法: 1.顺序查找: 最基础的查找方法,对比每一个元素进行查找.在数据量很大的时候效率相当的慢. 数据结构:有序或者无需的队列 时间复杂度:O(n) 2.二分查找: 二分查找首先要求数组 ...
- 第7.20节 案例详解:Python抽象类之真实子类
第7.20节 案例详解:Python抽象类之真实子类 上节介绍了Python抽象基类相关概念,并介绍了抽象基类实现真实子类的步骤和语法,本节结合一个案例进一步详细介绍. 一. 案例说明 本节定义 ...
- 云服务器AWD平台搭建
开学后实验室来了几个新同学,在线上CTF方面大家一直在持续学习,但AWD模式的CTF我们练习并不多,所以准备搭建一个AWD平台用于实验室成员的线下赛攻防练习. 最开始的是防灾科技大学的线下AWD靶场: ...