Python 中参数的传递非常灵活,不太容易记住理解,特整理如下备忘:

普通参数

即按照函数所需的参数,对应位置传递对应的值,可以对应 Java 中的普通参数

def max(a, b):
if a > b:
return a
else:
return b max(5, 13) # = 13
 

默认参数

可以对位置参数中的某个参数设置默认值,设置了默认值的参数在调用时可以不传递

此时需要注意,默认参数只能在必选参数后面

def max(a, b=0):
if a > b:
return a
else:
return b max(5, 13) # = 13
max(5) # = 5
max(-6) # = 0
 

当有多个默认参数时,调用参数传递的值会按照顺序赋值,也可以通过指定参数值为特定参数赋值

def position(x, y=1, z=0):
print('x:', x, 'y:', y, 'z:', z) position(5) # x=5, y=1, z=0
position(5, 6) # x=5, y=6, z=0
position(5, z=6) # x=5, y=1, z=6
 

可变参数

即传递的参数个数不确定,可以对应为 Java 中的可变参数,类似传递了一个 list 或 tuple

可变参数只能出现在必选参数和默认参数后面

def max(*numbers):
# 此处可以有更简单的写法
sum = 0
for number in numbers:
sum += number
return sum

sum(1,2,3,4,5) # = 15
# 对于 list 或 tuple, 如 nums = [1,2,3,4,5], 可以这样使用
sum(*nums) # = 15
 

命名关键字参数

命名关键字有些像普通参数和默认参数的结合,在一个 * 后面的参数为命名关键字参数

和普通参数、默认参数的区别就是需要在传递参数时指定赋值给的参数名字

命名关键字参数只能出现在必选参数、默认参数、可变参数后面

def person1(name, *, age, sex):
print('name:', name, 'age:', age, 'sex:', sex) def person1=2(name, *, age=15, sex='F'):
print('name:', name, 'age:', age, 'sex:', sex) person1('zhang', age=15, sex='F') # 如果命名关键字参数没有设置默认值,则必须显示给每个参数赋值
person2('zhang') # 函数中已经对参数设置默认值
 

如果命名关键字参数前面有可变参数,则可省略 * 号

# age 和 sex 均是命名关键字参数
def person(name, *args, age, sex):
pass
 

关键字参数

关键字参数必须出现在必选参数、默认参数、可变参数、命名关键字参数后面

在可变参数的基础上,即不仅仅可以传递任意个参数,同时还可以对传递的各个参数指定参数名,可以理解为传递了一个 dict

def person(name, **kw):
print('name:', name, 'other:', kw) person('zhang', age=15, sex='M') # name: zhang other: {'sex': 'M', 'age': 15}
# 对于 dict, 如 p={'age': 15, 'sex':'M'}, 可以这样使用
person('zhang', **p)
 

总结一下

  • 普通参数——必选参数

  • 可选参数——参数有默认值,调用函数时可以传递也可以不传递,如果不传递则使用默认值

  • 可变参数——传递数量不确定 (可以为0个) 的参数,类似传递一个 list

  • 命名关键字参数 ——如果设置默认值,则同可选参数,否则必须传递,且传递时指定值对应的参数名

  • 关键字参数——传递数量不确定 (可以为0) 的 键值对,类似传递一个 dict

在函数中出现的顺序必须和上面的保持一致

 

参考资料:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

Python 参数使用总结的更多相关文章

  1. Python参数笔记

    Python参数 1. 普通参数 必须要传入和定义时个数相同的参数 def miao(acfun, bilibili): print(acfun, bilibili) miao(11, 22) > ...

  2. Python参数基础

    Python参数基础 位置参数 ​ 通过位置进行匹配,把参数值传递给函数头部的参数名称,顺序从左到右 关键字参数 ​ 调用的时候使用参数的变量名,采用name=value的形式 默认参数 ​ 为没有传 ...

  3. Python参数类型以及实现isOdd函数,isNum函数,multi函数,isPrime函数

    Python参数类型以及实现isOdd函数,isNum函数,multi函数,isPrime函数 一.Python参数类型 形参:定义函数时的参数变量. 实参:调用函数时使用的参数变量. 参数传递的过程 ...

  4. python 参数定义库argparse

    python 参数定义库argparse 这一块的官方文档在这里 注意到这个库是因为argparse在IDE中和在ipython notebook中使用是有差异的,习惯了再IDE里面用,转到ipyth ...

  5. python 参数类型理解

    简介 大家都知道,在java中,函数或者方法的参数在调用时必须对其进行传参操作,也就是所谓的必选参数,也可以称为位置参数,除此之外,python还拥有其他语言不具有的一些参数类型,以下将进行一一介绍. ...

  6. python 参数

    摘自:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00137473844933 ...

  7. python 参数的组合

    现在我们知道python定义函数的参数类型有:必选参数 默认参数 可变参数 关键字参数 但是在我们日常中我们是可以组合使用这些参数的:但是使用的时候,参数定义是有顺序的 定义的顺序必须是:必选参数,默 ...

  8. <转>Python 参数知识(变量前加星号的意义)

    csdn上的牛人就是多,加油 —————————————————————————— 过量的参数 在运行时知道一个函数有什么参数,通常是不可能的.另一个情况是一个函数能操作很多对象.更有甚者,调用自身的 ...

  9. python参数

    1.形参变量和实参 形参变量:只有在被调用时才分配内存单元,在调用结束时,即释放所分配的内存单元,因此,形参只在函数内有效,函数调用结束返回主调用函数后则不能再使用该形参变量. 实参:可以是常量,变量 ...

  10. python参数传递方式

    原文地址:http://www.cnblogs.com/zhaopengcheng/p/5492183.html python中一切皆对象,函数中参数传递的是对象的引用. 1在函数中改变变量指向的对象 ...

随机推荐

  1. ubuntu1804自带的vim和vi都是用什么版本?

    之前搜索vim一些命令时,经常看到有人说ubuntu自带的vim是是vim.tiny的,功能不全. 什么需要先卸载,再重装,真的是这样吗? 我查了一下,vim的版本号 vim --version vi ...

  2. Mac上Burpsuite 拦截不到HTTPS流量怎么设置

    在百度了一堆以及修修改改下终于拦截到HTTPS流量了. 安装步骤就大致讲一下吧 网上下载burp的安装包,然后Mac上直接打开这个burpUnlimited.jar包就可以了 我直接选择的第一个   ...

  3. 用libvlc 播放指定缓冲区中的视频流

    有时候,我们需要播放别的模块传输过来的视频流,VLC提供了这样的机制,但一般很少这样用,下面的例子实现了这样的功能. 其中用到一个关键的模块 imem.  vlc提供多种创建媒体的方式,如要从指定缓存 ...

  4. 新手学黑客攻防-黑客攻击电脑方式和认识IP地址

    听说过黑客,没见过黑客,从最基础的开始学习,让我能在互联网中保护自己的隐私安全和信息安全. 黑客攻击电脑方式 黑客攻击的方式多种多样,但常见的只有以下几种,基本上每个黑客都会用到: 网络报文嗅探 网络 ...

  5. 前端基础面试题(js部分)

      前端基础面试题(JS部分)   1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined.Null.Boolean.Number.String值类 ...

  6. app之---豆果美食

    1.抓包 2.代码 抓取: #!/usr/bin/env python # -*- coding: utf-8 -*- #author tom import requests from multipr ...

  7. mysql的那些事之架构

    MySQL架构的那些事 此篇博客为原创,欢迎转载,转载时请注明出处,谢谢 最近深入学习了一下mysql的内容,想把自己的理解分享出来. mysql架构 逻辑架构 Connectors:连接器 Mana ...

  8. CSS样式命名

    CSS样式命名    说明网页公共命名#wrapper    页面外围控制整体布局宽度#container或#content    容器,用于最外层#layout    布局#head, #heade ...

  9. 关于LaTex的安装

    第一次写博客,有点生疏,但是想把具体安装的流程自我的汇总一下,毕竟我总是忘记,万一下一次要用的时候又要弄很久,就当经验吧. 其实是因为这个新型冠状病毒不能出门,也没开学,想找点事情做一做 这个博客不知 ...

  10. Chrome EC框架探索_0.0_引言

    0.0 引言 嵌入式硬件抽象框架常常面临着这样的尴尬:封装层次较高的(arduino,mbed)不能充分暴露必要的API并面临着性能问题,封装层次较低的(HAL,LL)接口复杂且开发困难.近日发现的一 ...