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 ...
随机推荐
- Django之form表单操作
小白必会三板斧 from django.shortcuts import render,HttpResponse,redirect HttpRespone:返回字符串 render:返回html页面 ...
- 远程传输文件命令:scp
1.概述 scp(secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,其格式为“scp [参数] 本地文件 远程帐户@远程 IP 地址:远程目录”. 与第 2 章讲解的 cp ...
- 如何处理 Web 图片优化?
未优化的图片是影响网站性能的主要因素之一,尤其会影响初次加载.取决于图像的分辨率和画质,图片可能占据整个网站流量的 70%. 生产环境出现未优化的图片并显著影响初次加载速度的现象还是挺常见的.缺乏经验 ...
- CF-----Pillars
. Pillars There are n pillars aligned in a row and numbered from 1 to n. Initially each pillar conta ...
- js 根据data-i 降序排列
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- c++高斯消元法求解线性方程组
#include<iostream> #include<math.h> #include<string.h> using namespace std; #defin ...
- eclipse配置tomcat后修改server.xml文件(如编码等)无效问题
我们用eclipse配置好tomcat后,在处理中文乱码或是配置数据源时,我们要修改Tomcat下的server.xml等文件. 修改后重启Tomcat服务器时发现xml文件又被还原了. 因为Tomc ...
- linux +jenkins +python 集成测试
1.jenkin安装部署 2.git 安装 3.git server 配置 4.contab
- 20141110的alltosun面试
今天周一,是校招的第一天,心情有点紧张,不过可以和很多同学一起去,是我紧张的心情变得稍微安静些.面试进行的时候,是学长2哥面的我,总体感觉自己的表现很糟糕,在公共场合发表言论或者演讲,一直是我的一个弱 ...
- C:gcc的基本使用
分布编译 预处理:gcc -E hello.c -o hello.i 编 译:gcc -S hello.i -o hello.s 汇 编:gcc -c hello.s -o hello.o 链 接:g ...