形参:定义函数时代表函数的形式参数

实参:调用函数时传入的实际参数

列如:

def f(x,y): # x,y形参

print(x, y)

f(1, 2) # 1, 2 实参

定义函数时,形参分为普通参数,默认参数,和动态参数

例如:

def f(x, y): # 普通参数

pass

def f(x, y=1): # y=1是默认参数

pass

def(x,y=1,*args): # *args普通动态参数

pass

def(x,y=1,**kwargs): # **kwargs关键字动态参数

pass

调用函数时,根据调用时的写法,可以分为位置参数和关键字参数

def f(x,y):

print('x=',x,'y'=,y)

f(1,2) #我们这样调用的时候1,2叫位置参数,会根据传入的实参

#位置去对于形参的位置

输出结果为:

x= 1 y= 2

f(x=1, y=2)

f(y=2, x=1) #我们这样调用的时候,y=2,x=1叫做关键字参数

#可以不用按照位置写

那调用的时候同时写位置参数和关键字参数呢

还是以上面的f函数为例

f(x=1, 2) # 当我们吧关键字参数放前面

执行结果如下:

File "F:/python/tt.py", line 9

f(x=1, 2)

SyntaxError: non-keyword arg after keyword arg

得出结论:关键字参数不能放在位置参数前面,这个是语法规定

f(1, x=2)

执行结果:

Traceback (most recent call last):

File "F:/python/tt.py", line 9, in

f(1, x=2)

TypeError: f() got multiple values for keyword argument 'x'

得出结论:如果位置参数和关键字参数需要同时匹配

那么根据这两条,我们还可以总结出定义函数时的规范:

1.默认参数要写在普通参数的后面

2.普通动态参数*args要写在默认参数后面

3.关键字动态参数**kwargs要写在最后面

我们再来看看动态参数是怎么运行的:

普通动态参数:

def f(x, *args):

print(args)

f(1, 2, '3', [1, 2, 3])

f(3, 2, [1, 2, 3])

运行结果:

(2, '3', [1, 2, 3])

(2, [1, 2, 3])

普通动态参数会将传入的所有多余的位置参数组合成一个元祖

关键字动态参数:

def f(x, y=1, **kwargs):

print(kwargs)

f(1, 2, z=2, a=3, d=4)

f(3, 2, xx=2, name='xinlan', age=18)

运行结果:

{'a': 3, 'z': 2, 'd': 4}

{'age': 18, 'xx': 2, 'name': 'xinlan'}

复制代码

关键字动态参数会将传入的多余的关键字参数组合成一个字典

案例:

d = {

'name': 'xinlan',

'age': 18

}

def f(**kwargs):

print(kwargs)

f(**d)

f(name='xinlan', age=18)

运行结果:

{'name': 'xinlan', 'age': 18}

{'name': 'xinlan', 'age': 18}

结论:将一个字典前加上**传入一个函数,相当于将这个字典中的键值对以关键字参数的形式传入函数。

案例:

l = ['python', 'php', 'java']

def f(*args):

print(args)

f(*l)

f('python', 'php', 'java')

运行结果:

('python', 'php', 'java')

('python', 'php', 'java')

结论:将一个列表前加上*传入一个函数,相当于将这个列表中的元素按顺序传入函数

默认参数

默认参数的作用就是,如果我们在调用函数的时候不传入相应的参数,那么函数就用默认值

在定义函数的时候我们容易出现一个错误,看下面的例子:

def f(y=[]):

y.append('ok')

print(y)

f()

f()

执行结果:

['ok']

['ok', 'ok']

我们调用了两次f函数,发现输出的结果不一样。这是因为列表,字典等这样的数据类型在调用的时候是引用它们的地址。

解释器在执行y=[]的时候,y指向的一个列表的引用地址,这个列表发生变化后,y指向的地址是没有变的

所以我们在定义函数的时候,默认参数不要定义成列表,字典等数据类型。当然我们有解决办法:

def f(y=None): # 这里None是一个占位符

if not y:

y = []

y.append('ok')

print(y)

f()

f()

执行结果

['ok']

['ok']

python函数定义时参数相当于占位符_python中函数的参数相关推荐

  1. python中df占位符_PYTHON 中的%s %占位符用法

    官方文档 解释说明 一种字符串格式化的语法, 基本用法是将值插入到%s占位符的字符串中. %%,表示输出一个% %s,表示格式化一个对象为字符 "%±(正负号表示)3(数字表示字符串的长度) ...

  2. python安装cv-oracle时如何解决vc++的问题_python中cx_Oracle模块安装遇到的问题与解决方法...

    --=========================================================================== 我的实践过程: 1,将oci.dll文件(从 ...

  3. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  4. python函数默认参数_Python中函数的默认参数问题

    前几天,运营反馈了一个BUG,某些数据在写入数据库后,其时间字段出现异常,与当前时间相差较多. 由于代码是不是我写的,所以开始一遍阅读代码一遍排查问题. 在主流程中,仅仅发现了一个对时间赋值的语句,并 ...

  5. python函数**什么意思_python中函数的参数是什么意思

    本文主要讲解python中函数的参数及参数的类型 默认参数def enroll(name, gender, age=6, city='Beijing'): print('name:', name) p ...

  6. python中、函数定义可以不包括以下一对圆括号_Python函数的基础学习

    一.函数分类 (1)内置函数.Python语言内置了若干常用的函数,例如abs().len()等等,在程序中可以直接使用. (2)标准库函数.Python语言安装程序同时会安装若干标准库,例如math ...

  7. python中模块和函数_Python中函数和模块的体验与使用

    函数基础 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体验 1.1 快速体验 所谓函数,就是把 具有独立功能的代码块 组织为一个 ...

  8. ln函数怎么看奇偶性_Python中函数的参数应该怎么理解?看完这篇文章情不自禁的想收藏...

    前面给大家讲过,函数是一种编程思想,是提高代码重复利用的设计思路,是代码设计更深层次的产物.今天要给大家讲的就是函数的核心:函数的参数 基本概念 1.函数的参数:是指函数完成某项功能所需要的信息. 举 ...

  9. android 多个占位符,Android中占位符的使用

    0.相关文章 android string.xml中使用占位符 1.正文 Android的占位符分为3种,为%s.%d.%f.中间以n代表着第几个,$是结束符,完整的使用的是%4$s,代表着第4个占位 ...

最新文章

  1. 【Go】Go基础(五):函数
  2. String,StringBuffer,StringBuilder三者的异同
  3. The build tools for v141 (Platform Toolset = 'v141') cannot be found
  4. Cortex-M0微处理器异常入口流程的细节
  5. 2.1 词汇表征-深度学习第五课《序列模型》-Stanford吴恩达教授
  6. Squid 反向代理服务器配置
  7. 弧度转为角分秒的c语言程序_用弧度表示角度
  8. ESP8266中char数据类型注意事项
  9. DCMTK:将显示曲线导出到文本文件
  10. php 集合安装,centos7安装php5.6报错集合
  11. 修改Linux系统默认语言
  12. Gitlab+Git实现版本控制系统
  13. 使用Tortoise小乌龟 git 拉取代码 报错128处理
  14. matlab最优化工具箱下载,matlab emd工具箱下载
  15. adb工具下载及配置使用
  16. cisco路由器启动过程
  17. mysql1.2.17,17.1 MySQL主从介绍17.2 准备工作17.3 配置主17.4 配置从17.5 测试主从同步...
  18. 香叶是什么,怎么用?
  19. riscv-amo原子指令
  20. 我国三大常用坐标系区别(北京54、西安80和WGS-84)(转)

热门文章

  1. oracle数据如何导入hadoop,hadoop hive 与 Oracle 互相导入数据
  2. qscrollbar 固定滑块大小_第32章:五金冲压模具设计:通用滑块结构形式!新手必备资料!...
  3. 查看java线程是否退出_[原创]IDA调试阻止java线程异常退出
  4. 创邻科技张晨:智能物联为图数据库的迅速发展提供了良好应用场景
  5. 你知道,java项目中是如何获取文件地址的吗?
  6. 自从安上了“AI”,这些商务经理天天按时下班了
  7. 华为云API Explorer开发者生态平台正式上线
  8. 介绍一种更方便的代理池实现方案
  9. 云下IDC和云上VPC如何高速稳定互联?——云专线接入方案
  10. 《跟唐老师学习云网络》 - ip命令