一、形参和实参

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

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

  形参:  

    定义函数的参数

  实参:

    调用函数时的参数

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

  值传递:

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

  引用传递:

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

# 值传递和引用传递
def fun(obj):
print(obj)
obj += obj1 = ""
demo(obj1)
print("函数调用后 obj1:" + obj1) obj2 = [ ,,]
demo(obj2)
print("函数调用后:"+ obj2) # 结果 函数调用后obj1:
[, , ]
函数调用后obj2:[, , , , , ]

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

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

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

2、关键字参数

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

3、默认参数

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

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

# 默认参数必须值相不可变对象,如果指向可变对象,结果不对
def demo1(obj = []):
print( obj )
obj.append() def demo2(obj = None):
if obj == None:
obj = []
print(obj)
obj,append() demo1()
demo1()
demo1() demo2()
demo2()
demo2()
#结果
[]
[]
[, ]
[]
[]
[]

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

  可变参数有两种形式:一种时 *arg, 一种时 ** kwargs

  *args :

    这种形式表示接受任意多个实际参数将其放到一个与那组中

  **kwargs:

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

#可变参数
#*args形式
def demo3(*args):
print "\n I like coffee:"
for i in args:
print i,
#调用形式:可直接传一个tuple
demo3('巴西','土耳其')
#也可以通过list或者tuple的变量传
obj1=['蓝山','摩卡','卡布奇诺']
demo3(*obj1) #**kwargs形式
def person(name, age, **kw):
print'\n name:', name, 'age:', age, 'other:', kw
def demo4(**kwargs):
print "\n name:age"
for i,j in kwargs.items():
print i,':',j #调用:可直接传一个字典
person("Paul",,sex="male",job="teacher")
#也可以通过字典变量传
obj2={'Mary':,'HanMeiMei':,'Lily':}
demo4(**obj2)
#结果
I like coffee:
巴西 土耳其
I like coffee:
蓝山 摩卡 卡布奇诺
name: Paul age: other: {'job': 'teacher', 'sex': 'male'} name:age
Lily :
Mary :
HanMeiMei :

三、参数组合

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

  必选参数、默认参数、可变参数、关键字参数

              

python 的参数总结的更多相关文章

  1. Python函数参数默认值的陷阱和原理深究"

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  2. Java可变参数 & Python可变参数 & Scala可变参数

    Java 可变参数的特点: (1).只能出现在参数列表的最后: (2)....位于变量类型和变量名之间,前后有无空格都可以: (3).调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体 ...

  3. python函数参数的pack与unpack

    python函数参数的pack与unpack 上周在使用django做开发的时候用到了mixin(关于mixin我还要写一个博客专门讨论一下,现在请参见这里),其中又涉及到了一个关于函数参数打包(pa ...

  4. Python中参数是传值,还是传引用?

    在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...

  5. Python函数参数的五种类型

    之前项目需求,需要通过反射获取函数的参数,python中可以通过函数签名(signature)来实现. 首先需要了解函数参数的类型,Python的参数类型一共有5种:POSITIONAL_OR_KEY ...

  6. Python 关于Python函数参数传递方式的一点探索

    关于Python函数参数传递方式的一点探索 by:授客 QQ:1033553122 实践代码 #!/usr/bin/env python # -*- coding:utf-8 -*- __author ...

  7. 笔记:Python 默认参数必须指向不变对象

    笔记:Python 默认参数必须指向不变对象 学习记录 >>> def add_end(L=[]): L.append('END') return L >>> ad ...

  8. python 函数参数介绍

    python 函数参数介绍 python 使用过程总,总会遇到 *args,**kw形式的参数,总是一头雾水,而且网上介绍的或是叫法不一,为此专门深入实践进而了解了函数参数的使用 具体请看代码 #-* ...

  9. shell如何向python传递参数,shell如何接受python的返回值

    1.shell如何向python传递参数 shell脚本 python $sendmailCommandPath $optDate python脚本 lastDateFormat = sys.argv ...

  10. python函数参数类型及其顺序

    根据inspect模块官文文档中关于函数参数类型的相关说明,python函数参数共有五种类型,按顺序分别为:POSITIONAL_ONLY.POSITIONAL_OR_KEYWORD.VAR_POSI ...

随机推荐

  1. [远古回忆]发现了以前的一些wow截图 这里也备份一下

    看邮箱里面通知 网易相册24号就停服了..赶紧找到以前的账号登录了进去瞅瞅 看看有什么重要的东西需要备份的 想不到发现了很多惊喜 虽然因为年代久远和网易相册提供的免费服务 很多文件图片和其他资料有接近 ...

  2. Python - CentOS 下 yum 安装 python3

    1. 概述 CentOS 7 自带 python2(python 以下正文简写为 py, 命令行中依然是 python) 尝试用 yum 安装 py3 2. 环境 os centos7 3. 步骤 1 ...

  3. Go项目结构

    1. go项目工程结构 配置好工作目录后,就可以编码开发了,在这之前,我们看下go的通用项目结构,这里的结构主要是源代码相应地资源文件存放目录结构. 1.1 gopath目录 gopath目录就是我们 ...

  4. idea2019.2激活至2089年!

    上图! 激活到2089年8月,绝对够用! ​ 注意:在激活之前,无需改动 host 文件. 资料自取:链接:https://pan.baidu.com/s/1MzX5ewt6lbzHYuggP5sGE ...

  5. Python - 装饰器实现缓存

    from functools import wraps def cache(func): cache = {} @wraps(func) def wrap(*args): if args not in ...

  6. [C++_QT] Error: Not a signal or slot declaration

    问题: 在Qt工程中添加了一个新的窗口之后 一直报错 如下 单单从错误描述上看 是缺少信号或者槽 但是我确定没有缺少啊 然后第二个错误显示了一个mox_xxxx文件 然后我就去那个目录下去找那个文件 ...

  7. 吴裕雄 python 机器学习——模型选择验证曲线validation_curve模型

    import numpy as np import matplotlib.pyplot as plt from sklearn.svm import LinearSVC from sklearn.da ...

  8. 吴裕雄 python 神经网络TensorFlow实现LeNet模型处理手写数字识别MNIST数据集

    import tensorflow as tf tf.reset_default_graph() # 配置神经网络的参数 INPUT_NODE = 784 OUTPUT_NODE = 10 IMAGE ...

  9. mybatis 源码分析--日志分析

    1. MyBatis 没有提供日志实现,需要接入第三方的日志组件,但是第三方的日志组件都各自的Log级别,而不相同 实现方式:适配器模式   Slf4jImpl 2. 自动扫描日志实现,并且第三方日志 ...

  10. 5_3 安迪的第一个字典(UVa10815)<set的使用>

    Andy 是个 8 岁的孩子,他梦想要制作一本他自己的字典. 这并不是一件容易的事,因为他认识的字还不是那么多. 他并不想要自己去想这本字典中该放哪些字,他有个聪明的主意. 就是拿出他最喜欢的一本故事 ...