Python中函数的参数-arguments
归纳起来,Python中函数的定义形式和调用形式主要有如下几种形式:
# 函数的定义形式
def func(name) # 匹配positional参数或者keyword参数
def func(name=value) # 如果不传,有默认参数
def func(*name) # 将额外的positional参数转换成一个tuple,然后赋给name
def func(**name) # 将额外的keyword参数转换成一个dictionary,然后赋给name
def func(*other, name) # Python 3.X中定义keyword-only参数的形式,Python 2.X中不支持,此时,name一定要以keyword的形式传递
def func(*, name) # Python 3.X中定义keyword-only参数的形式, Python 2.X中不支持,此时, name一定要以keyword的形式传递 # 函数的调用
func(name) # 以positional参数调用
func(name=value) # 以keyword参数调用
func(*iterable) # 将iterable对象转换成一连串单个positional参数进行调用
func(**dictionary) # 将dictionary转换成keywrod参数进行调用
这里需要注意3点:
1 在Python 2.X中(在Python 3.X中,这种形式已经不允许了),还有一种定义函数的方式,就是将函数的参数定义成一个tuple,那么,当调用函数的时候,传递一个结构一样的tuple参数,这个tuple参数就会被unpack:
# 定义
def func((a, (b, c)) # 调用
func((1, (2, 3)) # a=1, b=2, c=3
func((1, [2, 3])) # a=1, b=2, c=3,这样调用也是可以的
func((1, 'mn')) # a=1, b='m', c='n', 这样也可以,也就是说调用的时候只要是序列都可以 # 但是定义的时候只能是tuple,不能出现其他序列,比如数组,下面的情形是不对的
def func((a, [b, c]))
2 对于调用形式func(*name)和func(**name),也可以使用apply函数达到同样的效果,但是apply函数只能在Python 2.X中使用,在Python 3.X中被移除了,使用形式为:
def func(*a, **b) a=(1, 2)
b={'c':3, 'd':4} func(*a, **b) # Python 2.X和Python 3.X均支持 apply(func, a, b) # 仅Python 2.X支持,效果一样
3 对于默认参数,尤其要注意可变对象,每一次以默认形式象调用函数,这个默认的参数会被重用,而不会重置:
def func(a=[]):
a += [1]
print(a) >>>func()
[1] >>>func() # 此时a的值是[1]
[1, 1] >>>func() # 此时a的值是[1, 1]
[1, 1, 1]
函数定义时参数的顺序以及函数调用时参数的顺序
Python中,定义函数和调用函数时,参数的顺序有一定的规则,如果不符合规则,Python会报错:
1 在定义函数时,参数的顺序为:positional参数(name),默认参数(name=value),*name形式(或者只有一个*,但是只在Python 3.X中支持),name或者name=value形式(都只在Python 3.X中支持,叫keyword-only参数,后面name=value是赋默认值),**name形式;
2 在调用函数时,参数的顺序为:positional参数(name),keyword参数(name=value)或者*name形式,**name形式
总之,**name无论在定义函数时,还是在调用函数时,都只应出现在最后。
函数参数的匹配步骤
Python内部,对于函数参数的匹配大致分为5步:
1 首先匹配positional参数(name)
2 匹配keywrod参数(name=value)
3 将额外的非keyword参数匹配给*name形式
4 将额外的keyword参数匹配给**name形式
5 如果有默认值,给未传递的参数赋默认值
经过上述步骤之后,Python还需要确保,每一个参数,只匹配了一个值,否则,就会报错。
Python中函数的参数-arguments的更多相关文章
- 深入理解python中函数传递参数是值传递还是引用传递
深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...
- Python中函数传递参数有四种形式
Python中函数传递参数有四种形式 fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) 四种中最常见是前两种,基本上一般点的教程都会涉及, ...
- 讲讲python中函数的参数
python中函数的参数 形参:定义函数时代表函数的形式参数 实参:调用函数时传入的实际参数 列如: def f(x,y): # x,y形参 print(x, y) f(1, 2) # 1, 2 实参 ...
- python 中函数的参数
一.python中的函数参数形式 python中函数一般有四种表现形式: 1.def function(arg1, arg2, arg3...) 这种是python中最常见的一中函数参数定义形式,函数 ...
- python中函数的参数解析
python中函数的各种参数梳理: 1.形参:函数定义时传入的参数 2.实参:函数调用时传入的参数 (有形参必传实参,形参里自身特点可不传的,可传可不传) 3.缺省参数:不传为默认值,传了会覆盖(下面 ...
- python中函数的参数
函数参数(一) 思考一个问题,如下: 现在需要定义一个函数,这个函数能够完成2个数的加法运算,并且把结果打印出来,该怎样设计?下面的代码可以吗?有什么缺陷吗? def add2num(): a = 1 ...
- python中函数的参数和返回值
目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...
- Python中函数的参数带星号是什么意思?
参数带星号表示支持可变不定数量的参数,这种方法叫参数收集. 星号又可以带1个或2个,带1个表示按位置来收集参数,带2个星号表示按关键字来收集参数. 1.带一个星号的参数收集模式: 这种模式是在函数定义 ...
- python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参
1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...
随机推荐
- 集合Gk表示这样一堆数字,该集合内的数字有k个1
问题描述 集合Gk表示这样一堆数字,该集合内的数字有k个1.比如,G1 = { 1, 10, 100, 1000, ...} G2 = {11, 110, 1110 }, ... , Gk { ... ...
- ubuntu查找端口和kill
查看 : netstat -anp | grep 8080 结束: kill -9 进程号
- Linux进程地址空间 && 进程内存布局[转]
一 进程空间分布概述 对于一个进程,其空间分布如下图所示: 程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码. 初始化过的数据(Data):在程序运行初已经对变量进行初始 ...
- Mybatis根据数据库中的表自动生成Bean对象与Mapper文件 (小白式教程)
示例IDE采用 IDEA //**********************华丽的分割线****************// 1.新建一个java项目-->在Src目录下创建3个包(Package ...
- java实现验证码功能主要代码
package com.baojuan.servlet; import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;i ...
- React组件的使用
一.index.js 文件[基本配置] //react语法塘 import React from 'react'; //reactDom用来操作虚拟DOM import ReactDom from ...
- [翻译]Hystrix wiki–How it Works
注:本文并非是精确的文档翻译,而是根据自己理解的整理,有些内容可能由于理解偏差翻译有误,有些内容由于是显而易见的,并没有翻译,而是略去了.本文更多是学习过程的产出,请尽量参考原官方文档. 流程图 下图 ...
- php源码建博客2--实现单入口MVC结构
主要: MVC目录结构 数据库工具类制作 创建公共模型类和公共控制器类 --------------文件结构:-------------------------------------- blog├─ ...
- Facade(外观模式或门面模式)
常用的模式之一. 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 完美地体现了依赖倒转原则和迪米特法则的思想. Facade模式应用场景: 首先 ...
- 大数据学习--day09(this、static)
this.static this 关键字 类不可以定义 this 属性 , 但是每个类都有一个 隐藏起来的 this 属性 . 每个对象被创建了 , 都会给其属性分配空间 , 也会给 this ...