当前位置: 首页 > news >正文

python基础整理笔记(三)

一. python的几种入参形式:
1.普通参数:
普通参数就是最一般的参数传递形式。函数定义处会定义需要的形参,然后函数调用处,需要与形参一一对应地传入实参。
示例:

1 def f(a, b):
2   print(a,b)
3 f(1, 2)


2. 指定参数:
指定参数就是在函数调用时,给传入的实参加上其对应的形参的参数名,这样实参的顺序就可以不用和形参完全一一对应的顺序。
示例:

1 def f(a, b):
2   print(a, b)
3 f(b=1, a=2)

 

3. 默认参数:
默认参数是在函数的形参处直接设定好一个参数的值,在函数调用的时候,可以不传入对应这个形参的实参,当不传入参数时,会直接取这个设定的默认值。当传入时,会用传入的值。
此外要注意,有默认值的参数,需要放在所有无默认值的参数之后。
示例:

1 def f (a, b=1, c=2):
2     print(a,b,c)
3 f(1,2)


4. 动态参数:
动态参数就是可以在函数的形参处不指定具体的名称与个数,在函数被调用时,传入的实参皆可在函数中获得。
动态参数有两种形式,一种以列表的形式,一种以字典的形式。
(1) 当以列表形式的时候,在函数调用时,实参的传递与普通的方式类似,直接传入;形参获取到的是一个列表的形式,元素为传入的每个实参。
示例:

1 def f(*args):
2     for i in args:
3     print(i)
4 f(1,23,3)

(2) 当以字典形式时,在函数调用时,实参传递类似制定参数的方式;形参获得的是一个字典。
示例:

1 def f(**kargs):
2     for k, v in kargs.items():
3         print(k, v)
4 f(k1=1, k2=2)    

(3) 此外两种形式也可以一起使用,并且也可以和其他类型如普通参数,有默认值的参数一起使用。
此外需要注意的是,列表形式的动态参数需要放在普通参数和默认值参数之后,字典形式的动态参数,需要放在所有类型的参数之后。
示例:

1 def f(a, b=1, *args, **kargs):
2     print(a,b)
3 for i in args:
4     print(i)
5 for k, v in kargs.items():
6     print(k, v)
7 f(1,2,22,33,k1=4,k2=5)

(4) 另外还有种向函数传递默认参数的方法,即在函数调用时,在传入的列表前加*,在传入的字典前加**,这样被传入的参数就不会被当做是一整个列表或字典,而是动态参数。
示例:

1 a = [1,2]
2 k = {'k1':1, 'k2':2}
3 def f(*args, **kargs):
4 for i in args:
5     print(i)
6 for k, v in kargs.items():
7     print(k, v)
8 f(*a, **k)

 

二. python参数的引用传递

虽然python中并没有类似C语言中的显示支指出传递参数还是引用或者指针这种类似设计,但实际上,当python函数的入参是list, tuple, dict, set, deque等容器时候,传入的其实是引用即其本身,而非复制的结果。

在函数内部修改这些入参后,操作的即传入的实参的内存,所以即使出了函数外部,实参也被改变了。

(1)传入list的示例:

(2)传入dict的示例:

(3)传入set的示例:

(4)另外需要注意的是,如果在函数内部,将传入的容器类参数做一个重新赋值,那么当出了函数以后,原版的实参值并不变。这是因为在函数内部赋值,其实把函数的形参指向了一块新的内存,原本的容器值并没有改变,等到出了作用域,自然会发现值没变。示例:

 

 

三. set的常用方法与时间复杂度

set是一个无需不重复的元素集合,此外与list和tuple的主要区别是,支持方便直接地做一些集合运算,如:

并集、交集、差集、判断是否子集、判断是否父集。当然也支持增加与删除元素等操作。
时间复杂度如下:

转载于:https://www.cnblogs.com/nigel-woo/p/5538671.html

相关文章:

  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之94——BREW中的应用单元测试方法...
  • 一张图说明CDN网络的原理
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之95——BREW中的典型上有测试TBT...
  • 我的程序库:HiCSUtil
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之96——BREW中运营商管理的测试UBT...
  • echarts学习网站
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之97——BREW的应用管理器...
  • QTableWidget嵌入QpushButton后定位QpushButton
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之98——BREW中RUIM的相关问题...
  • Linux strace命令使用详解
  • wireshark在ubuntu系统中的正确安装方法
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之99——BREW中的应用删除和召回...
  • 数据存储——SQLite数据库存储——API
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之100——BREW中绚丽多彩的应用...
  • 001.[python学习]写在前面的
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 2017前端实习生面试总结
  • 345-反转字符串中的元音字母
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • IndexedDB
  • Invalidate和postInvalidate的区别
  • JavaWeb(学习笔记二)
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Service Worker
  • SpiderData 2019年2月23日 DApp数据排行榜
  • tweak 支持第三方库
  • 工作中总结前端开发流程--vue项目
  • 老板让我十分钟上手nx-admin
  • 利用jquery编写加法运算验证码
  • 聊聊sentinel的DegradeSlot
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 巧用 TypeScript (一)
  • 思维导图—你不知道的JavaScript中卷
  • 栈实现走出迷宫(C++)
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 交换综合实验一
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #### go map 底层结构 ####
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (1)(1.11) SiK Radio v2(一)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core引入性能分析引导优化
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .NET中winform传递参数至Url并获得返回值或文件
  • /usr/bin/env: node: No such file or directory