一、形参和实参

函数参数的作用是传递数据给函数使用。

在使用的过程中,参数有两种形式:形式参数和实际参数

形参:定义函数时的参数

实参:调用函数时的参数

根据实际参数类型不同,将实际参数传递给形参的方式有两种:值传递和引用传递

值传递:实参为不可变对象,传递给形参后,形参的值改变,实参值不变。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

引用传递:实参为可变对象,传递给形参后,形参的值改变,实参值改变。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

#值传递与引用传递

defdemo(obj):printobj

obj+=obj

obj1="123456"demo(obj1)print "函数调用后obj1:"+obj1

obj2=[1,2,3]

demo(obj2)print "函数调用后obj2:"+str(obj2)#结果

123456函数调用后obj1:123456[1, 2, 3]

函数调用后obj2:[1, 2, 3, 1, 2, 3]

二、位置参数、关键字参数、默认参数、可变参数

1.位置参数(必备参数)

函数调用时的数量,位置,参数类型必须和定义时的一致。

2.关键字参数

函数调用时,使用形参的名字=输入的参数值,此时位置可与定义时不一致。

3.默认参数

函数定义时,为参数设置一个默认值,当函数调用时,没有传入这个参数值,直接使用这个默认值。注意:

定义函数时,默认参数必须指向不可变对象;如果指向可变对象,多次调用,可能得到的不是意料之内的结果。

#默认参数必须指向不可变对象,如果指向可变对象,结果不对

def demo1(obj=[]):printobj

obj.append(1)def demo2(obj=None):if obj==None:

obj=[]printobj

obj.append(1)

demo1()

demo1()

demo1()

demo2()

demo2()

demo2()#结果

[]

[1]

[1, 1]

[]

[]

[]

4.可变参数(不定长参数)

可变参数有两种形式:一种是*args,另一种是**kwargs

*args:这种形式表示接受任意多个实际参数将其放到一个元组中。

**kwargs:这种形式表示接受任意多个实际参数将其放到一个字典中,类似关键字参数

#可变参数#*args形式

def demo3(*args):print "\n I like coffee:"

for i inargs:printi,#调用形式:可直接传一个tuple

demo3('巴西','土耳其')#也可以通过list或者tuple的变量传

obj1=['蓝山','摩卡','卡布奇诺']

demo3(*obj1)#**kwargs形式

def person(name, age, **kw):print'\n name:', name, 'age:', age, 'other:', kwdef demo4(**kwargs):print "\n name:age"

for i,j inkwargs.items():print i,':',j#调用:可直接传一个字典

person("Paul",77,sex="male",job="teacher")#也可以通过字典变量传

obj2={'Mary':23,'HanMeiMei':34,'Lily':12}

demo4(**obj2)#结果

I like coffee:

巴西 土耳其

I like coffee:

蓝山 摩卡 卡布奇诺

name: Paul age:77 other: {'job': 'teacher', 'sex': 'male'}

name:age

Lily :12Mary :23HanMeiMei :34

三、参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数组合使用。但是注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、关键字参数。

python 形参_python中参数总结相关推荐

  1. python 函数参数前面两个星号_Python中参数前面一个星号两个星号(*参数,**参数)起什么作用呢?...

    摘要: 下文讲述Python中参数前面一个星号两个星号的功能分享,如下所示: 在Python语言中,我们经常看见参数前面 加上一个星号或两个星号 那么这些写法到底起什么作用呢? 下文将一一道来,如下所 ...

  2. python函数定义中参数列表里的参数是_python-函数(def)参数 及参数解构 变量 知识整理...

    函数 python 函数 由若干语句组成的语句块.函数名称.参数列表构成,他是组织代码的最小单元 完成一定的功能 函数的作用: 结构化编程对代码的最基本的封装,一般按照功能组织一段代码 封装的目的是为 ...

  3. python参数化_Python 中如何实现参数化测试的方法示例

    之前,我曾转过一个单元测试框架系列的文章,里面介绍了 unittest.nose/nose2 与 pytest 这三个最受人欢迎的 Python 测试框架. 本文想针对测试中一种很常见的测试场景,即参 ...

  4. python字符集_PYTHON 中的字符集

    Python中的字符编码是个老生常谈的话题,今天来梳理一下相关知识,希望给其他人些许帮助. Python2的 默认编码 是ASCII,不能识别中文字符,需要显式指定字符编码:Python3的 默认编码 ...

  5. kafka python框架_Python中如何使用Apache Avro——Apache的数据序列化系统

    了解如何创建和使用基于Apache Avro的数据,以实现更好,更有效的传输. 在这篇文章中,我将讨论Apache Avro,这是一种开源数据序列化系统,Spark,Kafka等工具正在使用该工具进行 ...

  6. python标准化_python中标准化

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! sdk 3.0 实现了统一化,各个语言版本的 sdk具备使用方法相同.接口调用方 ...

  7. python函数定义中参数列表里的参数是_python函数参数中的/和*是什么意思?

    在python3.8之后函数参数中允许出现/和*号,/用来指明某些函数形参必须使用位置参数而非关键字参数的形式,*出现在函数参数中第一种含义可以表示为可变参数,一般写作*args:对于单独出现在参数中 ...

  8. python中的参数_python中参数解析

    取得命令行参数 在使用之前,首先要取得命令行参数.使用sys模块可以得到命令行参数. import sys print sys.argv 然后在命令行下敲入任意的参数,如: python get.py ...

  9. python函数定义中参数列表里的参数是_python函数定义中的参数说明

    原博文 2020-05-23 07:50 − > 描述函数定义时 涉及到的 位置参数,默认参数,关键字参数,可变参数等的概念及用法 ## 1 示例代码 ``` #! /usr/bin/env p ...

最新文章

  1. Lighttpd1.4.20源代码分析 笔记 状态机之错误处理和连接关闭
  2. 发现错误(Core Data 应用程序实践指南)
  3. Python中的那些“坑”
  4. c语言,如何产生随机数
  5. 2.1.4 进程之间的通信(共享通信、消息传递、管道通信)
  6. HDU 1248 寒冰王座(完全背包问题另类解法)
  7. Spring Boot之基于Dubbo和Seata的分布式事务解决方案
  8. android tcp socket框架_花了一个星期,我终于把RPC框架整明白了
  9. 从数据到代码——通过代码生成机制实现强类型编程[上篇]
  10. django缓存优化(二)
  11. SpringBoot中级篇-事务@Transactional注解无效
  12. Crack内网通积分规则(基于版本3.4.3035)
  13. 在串口调试助手上使用AT命名控制GPRS模块发送短信
  14. python 京东签到_Python实战—京东用户行为分析
  15. CKEditor5系列二:创建简单插件
  16. 网易云音乐歌单生成外链播放器
  17. config配置中文解释
  18. 多设备monkey测试工具_基于Tkinter GUI操作
  19. python之json扩展
  20. java获取天气的方法

热门文章

  1. netbeans6.8_NetBeans IDE 8.0和Java 8的新功能
  2. jax-ws cxf_Apache CXF – JAX-WS –简单教程
  3. Lombok,自动值和不可变项
  4. java 编写代码_Java 7:如何编写非常快速的Java代码
  5. appengine_Google Appengine登台服务器操作方法
  6. Java无处不在:使用DukeScript在任何地方运行一次编写
  7. 如何以及为什么序列化Lambda
  8. 领域驱动设计模式设计与实践_在域驱动设计中使用状态模式
  9. java桌面版_长大了Java! 提出Java桌面版
  10. 零垃圾创建数百万个对象