一、形参和实参

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

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

  形参:  

    定义函数的参数

  实参:

    调用函数时的参数

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

  值传递:

      实参为不可变对象,传递给形参后,形参的值改变,实参值不变。(如 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. sqli-libs(54-65关)

    Less_54 Less-54:使用’’包裹 对输入的次数做了限制,必须在10次请求之内获取信息,否则会刷新表名 输入:?Id=1’ order by 3--+   查看有多少列: 输入 ?id=-1 ...

  2. java.lang.OutOfMemoryError: GC overhead limit exceeded异常处理

    今天写程序遇到个之前从没遇到的异常-----java.lang.OutOfMemoryError: GC overhead limit exceeded,下面附上解决方法 异常: 解决方法: 鼠标右击 ...

  3. 搭建离线下载aria2 树莓派下搭建,以及图形化界面AriaNG

    请参考链接 https://www.htcp.net/3652.html https://www.zrj96.com/post-296.html Aria2自动更新BT Tracker服务器列表的方法 ...

  4. http://localhost:8080/sockjs-node/info?t=1556418283950 net:: ERR_CONNECTION_REFUSED(亲测有效~!)

    如果你的项目没有用到sockjs,vuecli3 运行npm run serve 之后network里面一直调用一个接口:http://localhost:8080/sockjs-node/info? ...

  5. ARM架构安装Anaconda3出现错误:cannot execute binary file: Exec format error

    ARM架构安装Anaconda3出现错误:cannot execute binary file: Exec format error 原因是:安装包格式不对. 在Anaconda官网上只有x86(32 ...

  6. 吴裕雄 python 人工智能——基于神经网络算法在智能医疗诊断中的应用探索代码简要展示

    #K-NN分类 import os import sys import time import operator import cx_Oracle import numpy as np import ...

  7. 安装多个xcode对homebrew影响

    安装多个xcode,可能会导致无法识别默认使用哪个xcode的情况,这时候执行下列语句,设置默认xcode sudo xcode-select --switch /Applications/Xcode ...

  8. webservice笔记

    Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的 ...

  9. Tomcat部署Web项目的3种方式

    一.将war包丢进webapps 这是最简单粗暴的方式:将web工程打成war,丢进tomcat/webapps目录即可,tomcat会自动解压.无需修改任何配置文件即可完成部署. 这里我准备了tom ...

  10. 《MFC dialog中加入OpenGL窗体》

    <MFC dialog中加入OpenGL窗体> 最近学习了如何在MFC对话框程序中加入OpenGL窗体的方法,在这里将自己的实现过程归纳一下. 步骤零: 加入PictureControl控 ...