python 的参数总结
一、形参和实参
函数参数的作用是传递数据给函数使用
在使用的过程中,参数有两种形式:形式参数和实际参数
形参:
定义函数的参数
实参:
调用函数时的参数
根据实际参数类型不同,将实际参数传递给形参的方式有两种:值传递和引用传递
值传递:
实参为不可变对象,传递给形参后,形参的值改变,实参值不变。(如 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 的参数总结的更多相关文章
- Python函数参数默认值的陷阱和原理深究"
本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...
- Java可变参数 & Python可变参数 & Scala可变参数
Java 可变参数的特点: (1).只能出现在参数列表的最后: (2)....位于变量类型和变量名之间,前后有无空格都可以: (3).调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体 ...
- python函数参数的pack与unpack
python函数参数的pack与unpack 上周在使用django做开发的时候用到了mixin(关于mixin我还要写一个博客专门讨论一下,现在请参见这里),其中又涉及到了一个关于函数参数打包(pa ...
- Python中参数是传值,还是传引用?
在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...
- Python函数参数的五种类型
之前项目需求,需要通过反射获取函数的参数,python中可以通过函数签名(signature)来实现. 首先需要了解函数参数的类型,Python的参数类型一共有5种:POSITIONAL_OR_KEY ...
- Python 关于Python函数参数传递方式的一点探索
关于Python函数参数传递方式的一点探索 by:授客 QQ:1033553122 实践代码 #!/usr/bin/env python # -*- coding:utf-8 -*- __author ...
- 笔记:Python 默认参数必须指向不变对象
笔记:Python 默认参数必须指向不变对象 学习记录 >>> def add_end(L=[]): L.append('END') return L >>> ad ...
- python 函数参数介绍
python 函数参数介绍 python 使用过程总,总会遇到 *args,**kw形式的参数,总是一头雾水,而且网上介绍的或是叫法不一,为此专门深入实践进而了解了函数参数的使用 具体请看代码 #-* ...
- shell如何向python传递参数,shell如何接受python的返回值
1.shell如何向python传递参数 shell脚本 python $sendmailCommandPath $optDate python脚本 lastDateFormat = sys.argv ...
- python函数参数类型及其顺序
根据inspect模块官文文档中关于函数参数类型的相关说明,python函数参数共有五种类型,按顺序分别为:POSITIONAL_ONLY.POSITIONAL_OR_KEYWORD.VAR_POSI ...
随机推荐
- python+tkinter+动画图片+爬虫(查询天气)的GUI图形界面设计
1.完整代码: import time import urllib.request #发送网络请求,获取数据 import gzip #压缩和解压缩模块 import json #解析获得的数据 fr ...
- 数据库程序接口——JDBC——功能第一篇——第一个程序
流程图 综述 从零开始搭建JDBC环境.通过创建Java项目,在项目中,通过java程序执行SQL,并处理返回的结果.本文通过执行 select 1 from dual 语句来测试,并输出相结果集.首 ...
- jquery 相同ID 绑定事件
本文链接:https://blog.csdn.net/lan_13217/article/details/84079441 http://hi.baidu.com/meneye/blog/item/1 ...
- via/route blockage/size blockage/wire/pin guide/pin blockage/partition
1.via 中文名称互连线通孔.我们知道,芯片的连线有不同层的金属互连线相互连接.而Via的作用就是连接这些不同层的金属.如下图所示: 一个完整的通孔是由三层组成的,包括两个互连层和一个cut层,cu ...
- Git的安装和使用(转载)
转载博客连接:https://www.cnblogs.com/qijunjun/p/7137207.html 实际项目开发中,我们经常会用一些版本控制器来托管自己的代码,今天就来总结下Git的相关用法 ...
- oracle 多表查询,请教个问题
首先,是有一个合同表,对应数据库表 lg_bill_of_lading_detail 简称 bold 有一个用户表 EMT_USER 简称 e 合同审批 后,合同表里 会有一个审核人AUDI ...
- APP inventor 学习
中文教程:https://web.17coding.net/ 网页在线开发:http://app.gzjkw.net/#1 ai2.appinventor.mit.edu http://appinve ...
- codeforces-Three Friends
Three Friends Three friends are going to meet each other. Initially, the first friend stays at the ...
- java中LinkedList源码分析
ArrayList是动态数组,其实本质就是对数组的操作.那么LinkedList实现原理和ArrayList是完全不一样的.现在就来分析一下ArrayList和LinkeList的优劣吧LinkedL ...
- java 编译java文件 以及生成可执行jar
1.新建java project: 2.src下新建包以及class文件: 3.打包: 5.选取目标mainclass 很关键决定jar是否可执行: 7.build jar : 8:artifact ...