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

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

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

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

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

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

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

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

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

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

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

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

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

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

二. python参数的引用传递

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

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

(1)传入list的示例:

(2)传入dict的示例:

(3)传入set的示例:

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

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

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

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

python基础整理笔记(三)的更多相关文章

  1. python基础整理笔记(九)

    一. socket过程中注意的点 1. 黏包问题 所谓的黏包就是指,在TCP传输中,因为发送出来的信息,在接受者都是从系统的缓冲区里拿到的,如果多条消息积压在一起没有被读取,则后面读取时可能无法分辨消 ...

  2. python基础整理笔记(四)

    一. python 打开文件的方法 1. python中使用open函数打开文件,需要设定的参数包括文件的路径和打开的模式.示例如下: f = open('a.txt', 'r+') 2. f为打开文 ...

  3. python基础整理笔记(一)

    一. 编码 1. 在python2里,加载py文件会对字符进行编码,需要在文件头上的注释里注明编码类型(不加则默认是ascII). # -*- coding: utf-8 -*- print 'hel ...

  4. python基础整理笔记(七)

    一. python的类属性与实例属性的注意点 class TestAtt(): aaa = 10 def main(): # case 1 obj1 = TestAtt() obj2 = TestAt ...

  5. python基础整理笔记(五)

    一. python中正则表达式的一些查漏补缺 1.  给括号里分组的表达式加上别名:以便之后通过groupdict方法来方便地获取. 2.  将之前取名为"name"的分组所获得的 ...

  6. python基础整理笔记(二)

    一. 列表 1. 创建实例: a = [1,2,3] b = list() 2. 主要支持的操作及其时间复杂度如下: 3. 其他 python中的列表,在内存中实际存储的形式其实是分散的存储,比较类似 ...

  7. python基础整理笔记(八)

    一. python反射的方式来调用方法属性 反射主要指的就是hasattr.getattr.setattr.delattr这四个函数,作用分别是检查是否含有某成员.获取成员.设置成员.删除成员. 此外 ...

  8. python基础整理笔记(六)

    一. 关于hashlib模块的一些注意点 hashlib模块用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512, MD ...

  9. python基础篇(三)

    PYTHON基础篇(三) 装饰器 A:初识装饰器 B:装饰器的原则 C:装饰器语法糖 D:装饰带参数函数的装饰器 E:装饰器的固定模式 装饰器的进阶 A:装饰器的wraps方法 B:带参数的装饰器 C ...

随机推荐

  1. I2C控制器的Verilog建模之三(完结版)

    前言:终于到了测试篇,不过悲剧了一下.按照之前<二>里面的思路,在顶层用一个复用器驱动读写独立模块的I2C总线确实失败.虽然综合过去了,不过警告里已经说明:底层的2个原本是inout三态口 ...

  2. c++ primer 5th 练习3.43

    #include <iostream> using namespace std; int main() { ][]={,,,,,,,,,,,}; /* for(int (&i)[4 ...

  3. PIC32MZ tutorial -- 32-bit Timer

    The microcontroller is PIC32MZ2048ECH144 on the PIC32MZ EC Starter Kit. This microcontroller has fou ...

  4. Android 环境常见问题

    1.启动adb时报: adb server is out of data.kill... ADB server didn't ACK    *failed to start daemon*    er ...

  5. 关于启用 HTTPS 的一些经验分享

    https://imququ.com/post/sth-about-switch-to-https.html 随着国内网络环境的持续恶化,各种篡改和劫持层出不穷,越来越多的网站选择了全站 HTTPS. ...

  6. (转)UVM内容梗概

    1. 类: 面向对象基础传统的面向对象编程与systemverilog类的特点,类的定义,成员与方法,构造函数,对象的复制和深/浅拷贝,父类/子类关系,类的继承,作用域的规则,对象的句柄以及赋值,方法 ...

  7. MySql中的tinying,smallint,int,bigint的类型介绍——转载

    tinyint 从 0 到 255 的整型数据.存储大小为 1 字节. smallint 从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据.存储大小为 2 个字节 ...

  8. html 高亮显示表格当前行

    html在线模拟网:http://www.w3school.com.cn/tiy/t.asp?f=html_basic 高亮显示表格当前行 <html> <head> < ...

  9. androidannotations 简单配置

    1.build.gradle 需要添加的内容 标注的颜色是新建项目之后,build.gradle文件需要添加的内容. buildscript { repositories { jcenter() } ...

  10. C# 命令绑定

    在构建WinForm程序中,为了使系统的结构清晰,有好的用户交互体验,实现不同按钮之间的交互,不使主窗体里面的代码臃肿.将按钮的命令通过类进行绑定,实现命令的管理使很有必要的. 该文章是将如何实现Bu ...