基于Python 中函数的 收集参数 机制

定义函数的时候,在参数前加了一个 * 号,函数可以接收零个或多个值作为参数。返回结果是一个元组。

传递零个参数时函数并不报错,而是返回一个空元组。但以上这种方法也有局限性,它不能收集关键字参数。

对关键字参数进行收集的另一种 收集参数 机制:使用两个星号 ( ** ) ,用法同上。最后返回一个以参数名为键、参数值为键值的字典。

* 和 ** 是可以一起使用的,返回特定的结果。

参数收集的用处之一是使我们编写函数时不用头疼将 N 多个参数都塞在一个括号里,既美观又省事。用处之二便是:

* :可以将一系列值存放进一个元组变量里,可用该元组变量名加一个 * 号作为参数传递给一个正被调用的函数,而后该函数就可以自由地对这些值进行一系列合法的操作。

** :同理,只不过变量存放的方式是字典。

def foo(*param):
 print(param)

def foo_1(**param):
 print(param)
def foo_2(*param1, **param2):
 print(param1)
 print(param2)

if __name__ == '__main__':
 foo(1,2,3,4) # (1, 2, 3, 4)

 foo_1(a = 1, b=2, c=3, d=4) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

 foo_2(6,7,8, m = 9, n = 10) # (6, 7, 8) {'m': 9, 'n': 10}

Python的4种传值的方式,必选传参 func(param)、默认传参func(param=value)、可选传参func(*param)、关键字传参func(**param)

# 必选参数 func(param): # 1、定义函数时的参数个数,顺序已定义好,在调用函数调时的参数个数、顺序必须一致,不能多,也不能少,也不能乱(和之前的顺序一致),因此叫必选参数,这是最常用的传参方式

def test(param1,param2,param3):

  print param1,param2,param3

test(1,"hello",True)

test(True,1,"hello")

执行结果:

1 hello True

True 1 hello

# 默认参数func(param=value): #

1、定义函数时,已为参数设定一个默认值,假如调用函数时不传参,在函数内部使用参数时的值则为默认值,传参时则和必选参数一样使用

# 2、如果必选参数和默认参数同时存在,则默认参数必须跟在必选参数后面

# 3、如果有多个默认参数,调用时顺序可以不一致,但是必须要显式表明是哪个默认参数,例如 param2=100,但是建议统一按照函数定义的顺序进行使用

def test(param1,param2=100,param3=True):

  print param1,param2,param3 test(1)

# 默认参数可以不传 test(1,"hello",False)

# 多个默认参数时,调用顺序一致 test(1,param3=False,param2="hello")

# 调用顺序也可以不一致

执行结果:

1 100 True

1 hello False

1 hello False

以上这篇基于Python 中函数的 收集参数 机制就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python定义函数时参数有默认值问题解决

    这篇文章主要介绍了Python定义函数时参数有默认值问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在定义函数的时候,如果函数的参数有默认值,有两种类型的参数,一种是整数,字符串这种不可变类型,另一种是列表这种可变类型,对于第一种情况没有什么特殊的地方,但是对于可变类型,有一个微妙的小陷阱. 可变类型以及小陷阱: def append_item(item, list1=[]): list1.append(item) return lis

  • Python函数参数类型及排序原理总结

    这篇文章主要介绍了Python函数参数类型及排序原理总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Python中函数的参数问题有点复杂,主要是因为参数类型问题导致的情况比较多,下面来分析一下. 参数类型:缺省参数,关键字参数,不定长位置参数,不定长关键字参数. 其实总共可以分为 位置参数和关键字参数,因为位置参数被放在list里面,关键字参数放在dict里面,Python在解读的时候首先处理list,没有遇到关键字就append到list

  • Python定义函数功能与用法实例详解

    本文实例讲述了Python定义函数功能与用法.分享给大家供大家参考,具体如下: 1.函数的意义 一般数学上的函数是,一个或者几个自变量,通过某种计算方式,得出一个因变量. y = f(x) 在Python中,为了使操作更加简洁,就引入了函数这个概念. Python中的函数,可以把一大串要反复使用的代码"定义"(封装)成一个函数,给予这个函数一个标识符作为函数名,设置自变量和因变量.然后要使用这一大串代码的时候,就调用这个我们自己创造的函数,输入自变量,然后会返回给我们因变量. 2.函数

  • Python函数的默认参数设计示例详解

    在Python教程里,针对默认参数,给了一个"重要警告"的例子: def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3)) 默认值只会执行一次,也没说原因.会打印出结果: [1] [1, 2] [1, 2, 3] 因为学的第一门语言是Ruby,所以感觉有些奇怪. 但肯定的是方法f一定储存了变量L. 准备知识:指针 p指向不可变对象,比如数字.则相当于p指针指向了不同的内存地址. p指向的是可变对象,

  • 基于Python 中函数的 收集参数 机制

    定义函数的时候,在参数前加了一个 * 号,函数可以接收零个或多个值作为参数.返回结果是一个元组. 传递零个参数时函数并不报错,而是返回一个空元组.但以上这种方法也有局限性,它不能收集关键字参数. 对关键字参数进行收集的另一种 收集参数 机制:使用两个星号 ( ** ) ,用法同上.最后返回一个以参数名为键.参数值为键值的字典. * 和 ** 是可以一起使用的,返回特定的结果. 参数收集的用处之一是使我们编写函数时不用头疼将 N 多个参数都塞在一个括号里,既美观又省事.用处之二便是: * :可以将

  • Python中函数及默认参数的定义与调用操作实例分析

    本文实例讲述了Python中函数及默认参数的定义与调用操作.分享给大家供大家参考,具体如下: #coding=utf8 ''''' Python中的函数使用小括号调用.函数在调用之前必须先定义. 如果函数中没有return语句,就会自动返回None对象. Python是通过引用调用的.如果函数内对参数的改变会影响到原始对象. 只有可变对象会受此影响,对不可变对象,它的行为类似按值调用. ''' ''''' 定义函数: def function_name([arguments]): "option

  • 简单谈谈Python中函数的可变参数

    前言 在Python中定义函数,可以用必选参数.默认参数.可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数和关键字参数. 可变参数( * ) 可变参数,顾名思义,它的参数是可变的,比如列表.字典等.如果我们需要函数处理可变数量参数的时候,就可以使用可变参数. 我们在查看很多Python源码时,经常会看到 某函数(*参数1, **参数2)这样的函数定义,这个*参数和**参数就是可变参数,一时会让人有点费解.其实只要把函

  • Python中函数的参数定义和可变参数用法实例分析

    本文实例讲述了Python中函数的参数定义和可变参数用法.分享给大家供大家参考.具体如下: 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解.其实只要把函数参数定义搞清楚了,就不难理解了. 先说说函数定义,我们都知道,下面的代码定义了一个函数funcA def funcA(): pass 显然,函数funcA没有参数(同时啥也不干:D). 下面这个函数funcB就有两个参数了, def funcB(a,

  • Python中函数参数匹配模型详解

    当我们的函数接收参数为任意个,或者不能确定参数个数时,我们,可以利用 * 来定义任意数目的参数,这个函数调用时,其所有不匹配的位置参数会被赋值为元组,我们可以在函数利用循环或索引进行使用 def f(*args): # 直接打印元组参数 print(args) print('-'*20) # 循环打印元组参数 [print(i) for i in args] ... # 传递一个参数 f(1) print('='*20) # 传递5个参数 f(1, 2, 3, 4, 5) 示例结果: (1,)

  • 基于Python中求和函数sum的用法详解

    基于Python中求和函数sum的用法详解 今天在看<集体编程智慧>这本书的时候,看到一段Python代码,当时是百思不得其解,总觉得是书中排版出错了,后来去了解了一下sum的用法,看了一些Python大神写的代码后才发现是自己浅薄了!特在此记录一下.书中代码段摘录如下: from math import sqrt def sim_distance(prefs, person1, person2): # 得到shared_items的列表 si = {} for item in prefs[p

  • 基于python中__add__函数的用法

    运算符重载 _add ##定义:让自定义的类生成的对象(实例)能够使用运算符进行操作 class Vector01: '''定义一个一维向量''' def init(self,x): self.x = x def str(self): '''定义新生成的返回值是什么,如果没有这个之间返回的是类的特点''' return ('一维向量的分量是:%d' % (self.x)) def add(self, other): #表示print内的+ # print('参数是:',other) return

  • 基于Python中isfile函数和isdir函数使用详解

    Python编程语言判断是否是目录 在Python编程语言中可以使用os.path.isdir()函数判断某一路径是否为目录.其函数原型如下所示. os.path.isdir(path) 参数含义如下. path:要进行判断的路径.以下实例判断E:\MJlife\test是否为目录. >>>import os >>>os.path.isdir('E:\\MJlife\\test') 判断是否为目录的输出结果 True 表示H:\MJlife\test是目录. Pytho

  • 深入理解python中函数传递参数是值传递还是引用传递

    目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用"的方式.实际上,这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典 或者列表)的引用,就能修改对象的原始值--相当于通过"传引用"来传递对象.如果函数收到的是一个不可变对象(比如数字.字符或者元组)的引用,就不能 直接修改原始对象--相当于通过"传值"来传递对象. 你可以在很多讨论该问题

  • Python中函数参数调用方式分析

    本文实例讲述了Python中函数参数调用方式.分享给大家供大家参考,具体如下: Python中函数的参数是很灵活的,下面分四种情况进行说明. (1) fun(arg1, arg2, ...) 这是最常见的方式,也是和其它语言类似的方式 下面是一个实例: >>> def fun(x, y): return x - y >>> fun(12, -2) 14 (2) fun(arg1, arg2=value2, ...) 这种就是所谓的带默认参数的函数,调用的时候我们可以指定

随机推荐