Python函数参数中的星号*(关键字参数与非关键字参数)
来源:互联网 发布:html中js用函数传值 编辑:程序博客网 时间:2024/04/30 23:40
转载自http://blog.csdn.net/syylx/article/details/44178377
一、首先了解python与C /C++的两点不同:
1、 python函数中的参数是可变的,而C/C++是不可变的(除却默认参数引起的省略);
2、 python没有指针的概念,也就没有了函数的按指针传递,因此python函数形参中的星号,并不是按引用传递。
那么它到底是什么作用呢?
二、其真实作用是收集参数,Python可以提供多于实际形参个数的实参,而且还可以分为普通参数、非关键字参数和关键字参数三种。
1、没星号是最常用的参数,可以是可变(mutable)类型变量,也可以是不可变(immutable)类型变量(可变数据结构类型和不可变数据结构类型在作为函数参数时存在不同,可变数据结构类型类似于C++按引用传递,在函数内部,尽管在局部作用域中,某些操作仍然会改变可变数据类型参数的值,而不可变数据结构类型不存在,如果需要函数内部的操作会改变函数外部的值,那么不可变数据结构类型又不同于C++按引用传递,我们只能通过return的形式返回,然后赋值语句或者序列解包的形式获取改变或者将不可变类型改变为可变类型)
具体看例子:
- #! /usr/bin/python
- n = [2]
- m = 2
- def func_mutable(n):
- n[0] += 1
- print n
- def func_imutable(m):
- m += 1
- print m
- if __name__ == '__main__':
- func_mutable(n)
- print n
- func_imutable(m)
- print m
- output:
- [3]
- [3]
- 3
- 2
2、一个星号是将非关键字参数收集起来,以tuple的形式保存
3、两个星号是将关键字参数收集起来,以dict的形式保存,如参数func(keywords = 5)则输出该参数形式为{keywords: 5 }。
。
三、关键字参数与默认参数的区别
关键字参数是在传递构成中不必按照顺序传递,必须要提供”传递参数名=传递参数值”形式的参数,而传递过程中也转变为dict的键值对map关系;默认参数(又称为位置参数,听名字就知道这个要一一对应)是可以在对应的位置可写可不写的参数。
默认参数是关键字参数的子集,如果在定义时候就给定参数值的是默认参数,调用时候可以提供关键字参数,可以提供在对应位置提供参数,也可以不提供,使用默认参数。
如果使用关键字参数,那一定要保证从右往左的顺序,防止存在形参实参个数不匹配问题。
Example:
- #! /usr/bin/python
- def Func(x, y, z = 2, w = 4):
- print x,y,z,w
- if __name__ == '__main__':
- Func(1,2) <span style="white-space:pre"> </span>#默认参数
- Func(1,2 ,z = 5, w = 3)<span style="white-space:pre"> </span>#关键字参数
- 1 2 2 4
- 1 2 5 3
- Python函数参数中的星号*(关键字参数与非关键字参数)
- Python函数参数中的星号*(关键字参数与非关键字参数)
- python关键字参数非关键字参数
- python关键字和非关键字参数(可变长参数)
- Python函数-关键字参数
- Python中的星号参数与双星参数
- 【Python-3.3】函数中的可变参数和关键字参数
- Python入门:函数可变参数与关键字参数
- python—函数的可变参数与关键字参数
- python 函数参数:必选参数、默认参数、可变参数、关键字参数 和 命名关键字参数
- Python函数参数总结(位置参数、默认参数、可变参数、关键字参数和命名关键字参数)
- python中的**kw关键字参数
- Python函数参数(默认参数、可变参数、关键字参数及参数组合)
- Python(8)函数之普通参数、参数默认值、可变参数、关键字参数、命名关键字参数及递归函数
- python函数星号参数
- python函数星号参数
- python参数中的星号*, **
- 【python】函数:函数文档、关键字参数、默认参数、收集参数
- eclipse启动不了
- leetcode-36 Valid Sudoku
- 推送、 数据统计、 代码版本管理工具
- shell if =判断
- 杭电ACM2061java做法(PE)
- Python函数参数中的星号*(关键字参数与非关键字参数)
- 要注意的基础知识!
- js 中将string转化为double,避免产生多位数和计算精度损失。
- hdu5239Doom 线段树+找规律
- VC++编译器调试(一)
- Android判断当前线程是否是主线程的方法
- 今后要注意的几点
- hdu5115Dire Wolf 区间dp
- 【codevs1425】最小的N个和,如何像煞笔一样地写堆