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. 题解 NOI1999【生日蛋糕】—— 洛谷

    自己想出这题的大佬蒟蒻在这儿%您了 我实在是太弱了,搜索这种辣鸡算法都不会(逃 这题真的是想了好久,每次都会T三个点,我以为我的剪枝已经堆了够多了,结果后来才知道是一个关键剪枝没想到OTZ 先贴代码 ...

  2. svn 追责神器 blame vscode - SVN Gutter

    svn 追责神器 blame vscode - SVN Gutter

  3. 《Python学习手册 第五版》 -第17章 作用域

    上一章的是函数的基础,因为函数在运用过程中,是可以嵌套的,函数中是会涉及到变量的,为了明确各自变量的使用范围,系统是有一套规则或者原则的,这就是作用域的概念 本章重点内容 1.作用域:作用域的概念 2 ...

  4. JDK dump

    1. 查看整个JVM内存状态 jmap -heap 1237(pid) 2.生成dump文件 jmap -dump:file=文件名.dump 1237(pid)

  5. IdentityServer4实现.Net Core API接口权限认证(快速入门)

    什么是IdentityServer4 官方解释:IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID Connect和OAuth 2.0协议的实现. 通俗 ...

  6. android studio 导入RecyclerView

  7. CORS 跨域中的 preflight 请求

    我们知道借助Access-Control-Allow-Origin响应头字段可以允许跨域 AJAX, 对于非简单请求,CORS 机制跨域会首先进行 preflight(一个 OPTIONS 请求), ...

  8. 在ASP.NET MVC中如何预防Cookie的窃取攻击(转载)

    Cookie Cookie is a small piece of data sent by a web server to a web browser. The browser stores thi ...

  9. thinkphp5.0.*命令执行批量脚本

    import requests import Queue import threading import time user_agent = "Mozilla/5.0 (Windows NT ...

  10. hdu6026 dijkstra

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/6026/ 题意大致是:给定一个图,要求删边使他变成树,使得每个点到0的距离就是原图中0到这个点的最短路径.其实就是 ...