python 形参_python中参数总结

一、形参和实参

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

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

形参:定义函数时的参数

实参:调用函数时的参数

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

值传递:实参为不可变对象,传递给形参后,形参的值改变,实参值不变。如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中定义函数,可以用必选参数、默认参数、可变参数、关键字参数组合使用。但是注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、关键字参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WebRTC---入门篇】(十)NAT

NAT主要用于内网穿透 NAT产生原因 NAT的种类 NAT穿越原理 完全锥型:内网主机先向外发送一个请求形成IP和port

linux安装mq报5724,小白提问:linux安装MQ出现的错误

在安装MQ中遇到以下问题,求大神帮助# ./mqlicense.sh -acceptLicensed Materials - Property of IBM 5724-H72 (C) Copyright IBM Corporation 1994, 2009 All rights reserved.US Gover...显示全部在安装MQ中遇到以下问题,求大神帮助…

maven java1.7_本周Java技巧#7 – Maven慢吗?

maven java1.7本周Java本周技巧是有关Maven的上一期的后续内容。 第一个视频介绍了与Maven依赖关系有关的方面。 该视频将介绍一些加快Maven构建速度的技术。 Maven慢吗? 从Maven 3开始,您可以并行运行构建。 根据构建机器和项目结构的不同,…

vector 删除指定元素_std::vector简介

引入使用vector&#xff0c;需添加头文件#include<vector>&#xff0c;要使用sort或find&#xff0c;则需要添加头文件#include<algorithm>。简介vector是表示可以改变大小的数组的序列容器。就像数组一样&#xff0c;vector使用连续存储空间存储元素&#xff0c;这…

【WebRTC---入门篇】(十一)STUN协议

STUN作用:用于NAT穿越;它是典型的CS模式 RFC STUN规范 STUN header STUN Header格式

linux dd iflag oflag,centos – dd oflag =直接5倍速

我在这个规格的服务器中有Centos 6.2&#xff1a;2xcpu 16 Core AMD Opteron 6282 SE64GB RAMRaid controller H700 1GB cache NV- 2HD 74GB SAS 15Krpm RAID1 stripe 16k (OS Centos 6.2) sda- 4HD 146GB SAS 15Krpm RAID10 stripe 16k (ext4 bs 4096,no barriers) sdb -> …

mysql数据迁移到sqlserver_一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE...

这是一个.net下操作数据库(结构数据库)的工具类&#xff0c;支持sqlserver、oracle、mysql、postgres、sqlite、access等常见数据库。注意&#xff1a;它并不是一个orm工具(常见的orm框架如&#xff1a;EF、Dapper等)。2.1 引入DBUtil依赖1. 首先打开vs(推荐vs2019)&#xff0c…

【H.264/AVC视频编解码技术】第二章【H264码流分析】

H264码流分层 NAL层,视频数据网络抽象层,作用是控制二进制数据的传输,主要用于网络传输。 VCL层,视频数据编码层。 VCL结构关系 NALU NAL Header (1B)+ RBSP H264码流中NALU sps pps IDR帧的理解 概念 什么是NALU? H264码流可以分为两层,VCL层和NAL层,NAL的全称…

jcmd_程序化JCMD访问

jcmd在线提出的问题表明&#xff0c;开发人员偶尔会希望通过Java应用程序访问通常从针对应用程序外部运行JConsole &#xff0c; VisualVM或JDK命令行工具获得的信息类型。 以下是这类问题的一些示例&#xff1a; 如何以编程方式获取jmap直方图&#xff1f; 以编程方式从Java…

android相册管理,Piktures - 最优雅的相册管理 - Android 应用 - 【最美应用】

多维度管理&#xff0c;美到每一个细节Piktures 的优雅&#xff0c;首先在于其浏览、管理的维度设计上。Android 原生相册最为人所诟病的就是其乱糟糟的浏览体验&#xff0c;所有带图片的文件夹都毫无章法地直接呈现。而 Piktures 则做了全面的改进。左滑即开打开文件夹管理模式…

【H264码流分析】 SPS/PPS/Slice Header

SPS中相关 H264 Profile 对视频压缩特性的描述&#xff0c;Profile越高&#xff0c;就说明采用了越高级的压缩特性 H264 Level Level是对视频的描述,Levrl越高&#xff0c;视频的码率&#xff0c;分辨率&#xff0c;fps越高 分辨率 帧相关 帧率计算 PPS Slice Header

access update语句执行_SQL Server与Access数据库sql语法十大差异

本文总结了SQL Server与Access数据库sql语法的十大差异。ACCESS结构简单容易处理&#xff0c;而且也能满足多数的应用程序要求&#xff0c;也是初学者的试牛刀。随着时间的推移&#xff0c;大多数数据库应用程序都会发展&#xff0c;变得更复杂&#xff0c;并且需要支持更多用户…

junit测试起名字规则_如何在JUnit 5中替换规则

junit测试起名字规则最近发布的JUnit 5&#xff08;又名JUnit Lambda&#xff09; alpha发行版引起了我的兴趣&#xff0c;在浏览文档时&#xff0c;我注意到规则以及运行程序和类规则都消失了。 根据文档&#xff0c;这些部分竞争的概念已被单个一致的扩展模型取代。 多年来&…

android照片编辑软件,照片编辑免费软件下载-照片编辑软件app下载 v7.45最新版_5577安卓网...

照片编辑免费软件app下载&#xff0c;提供给你全新的图片处理工具&#xff0c;这是软件包含了丰富的功能内容&#xff0c;软件一键即可轻松对各种照片組合、编辑和拼貼&#xff0c;那么有需要图片处理的用户下载该app使用吧&#xff01;【软件特色】【 拼图编辑&#xff1a;强大…

扩展 junit 框架_JUnit 5 –扩展模型

扩展 junit 框架我们已经对Java最普遍的测试框架的下一个版本了解很多。 现在&#xff0c;让我们看一下JUnit 5扩展模型&#xff0c;该模型将允许库和框架将自己的实现添加到JUnit中。 总览 建立 基本 建筑 扩展模型 条件 注射 … 在新兴的《 JUnit 5用户指南》中可以找…

【斐波拉切数列第N项】

#include<iostream> using namespace std;int main() {int f[100];f[0] 0, f[1] 1;int n;cin >> n;for (int i 2; i < n; i){f[i] f[i - 1] f[i - 2];}cout <<f[n] << endl;return 0; }

python怎么下载安装mac_Mac下内置python2.7如何安装模块?

目前电脑里内置的版本是python2.7 用easy_install下载了几个模块&#xff0c;再输入pip list&#xff0c;得到&#xff1a; beautifulsoup4 (4.5.1) easygui (0.98.0) pip (8.1.2) setuptools (20.10.1) vboxapi (1.0) 可以确定我想要的bs4已经下载成功。然后我再输入python se…

jooq_SpringBoot:与JOOQ合作

jooq在上一篇文章SpringBoot&#xff1a;与MyBatis一起工作中&#xff0c;我们学习了如何使用SpringBoot MyBatis Starter快速启动并运行Spring和MyBatis。 在本文中&#xff0c;我们将学习如何使用SpringBoot JOOQ Starter。 JOOQ&#xff08;面向Java对象的查询&#xff09;…

【WebRTC---入门篇】(十二)WebRTC传输协议

浏览器协议栈(左图传统HTTP 右图WebRTC) RTP/SRTP RTP是未加密的数据,SRTP是加密后的数据。 RTP协议

android4.0支持m3u8格式,【报Bug】安卓下无法播放M3U8格式音频,报错

详细问题描述(DCloud产品不会有明显的bug&#xff0c;所以你遇到的问题大都是在特定环境下才能重现的问题&#xff0c;请仔细描述你的环境和重现方式&#xff0c;否则DCloud很难排查解决你的问题)[内容]安卓下小程序音频播放器播放&#xff2d;3&#xff35;8格式文件报错重现步…