• 位置参数

根据位置顺序来传递参数

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" def test(a,b): #a和b为形参
print(a)
print(b)
return 0 test(1,2) #1和2为实参

运行结果

按照位置顺序,1赋值给了a,2赋值给了b

  • 关键字参数

根据形参的值来传递参数

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" def test(a,b):
print(a)
print(b)
return 0 test(b=1,a=2)

运行结果

把1直接赋值给了形参b,把2直接赋值给了形参a

  • 同时使用位置参数和关键字参数

同时使用位置参数和关键字参数进行传参的话,位置参数优先于关键字参数

位置参数只能在关键字参数前面

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" def test(a,b,c):
print(a)
print(b)
print(c)
return 0 test(3,c=1,b=2)

运行结果

位置参数3传给形参a,关键字参数c和b位置顺序没多大关系

  • 默认参数

默认参数可以对其传参数,也可以不传

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" def test(a,b=3):
print(a)
print(b)
return 0 test(1)

运行结果

没有给b传参数,b的值为默认参数

如果给b传参数的话,b的值为该参数值

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" def test(a,b=3):
print(a)
print(b)
return 0 test(1,2)

运行结果

  • 参数组(不定参数)

如果实参和形参的个数没有对上的话,程序会报错,不定参数可以解决这个问题

不定参数有两种,一个是*args,还有一个是**kwargs(这两个是通过*和**定义的,后面的只是变量名)

不定参数要放在形参的最后

  • *args

把任意个位置参数转换成元组形式

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" def test(*args):
print(args) test(1,2,3,4,5,6,7)
test(*(1,2,3,4,5,6,7)) #结果是一样的

运行结果

也设置一个形参

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" def test(a,*args):
print(a)
print(args) test(1,2,3,4,5,6,7)
test(*(1,2,3,4,5,6,7)) #结果是一样的

运行结果

把第一个实参赋值给了第一个形参,其他多余的实参被赋给了*args

所以,*args要在形参的最后,除了**kwargs

  • **kwargs

把任意个关键字参数转换成字典形式

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" def test(**kwargs):
print(kwargs) test(name='John',age=22,sex='Man')

运行结果

获取**kwargs中值的方式

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" def test(**kwargs):
print(kwargs)
print(kwargs['name'])
print(kwargs['age'])
print(kwargs['sex']) test(name='John',age=22,sex='Man')

运行结果

给函数也传入位置参数和关键字参数

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" def test(a,b,**kwargs):
print(kwargs)
print(a)
print(b) test(1,name='John',age=22,sex='Man',b='abc')

运行结果

第一个位置参数被赋值给了第一个形参,如果关键字参数中有与形参对应的,就会把这个关键字参数赋值给这个形式参数,其他形参赋值给**kwargs字典

  • *args和**kwargs

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" def test(*args,**kwargs):
print(args)
print(kwargs) test(1,2,3,name='John',age=22)

运行结果

Python函数(二)-参数传递的更多相关文章

  1. python:函数的参数传递方法演示

    """ 函数的参数传递方法演示 """ #1.位置传参 def normal(a, b, c): print("1.位置传参:&q ...

  2. python函数的参数传递问题---传值还是传引用?

    摘要:在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象.不可更改对象的传递属于传值,可更改对象属于传引用.想要在函数中传递 ...

  3. Python 函数的参数传递

    C/C++中,传递参数的类型是可以指定的.一般来说,传递参数可以分为两种:值传递和引用传递.对于值传递,参数传递的过程中进行了复制操作,也就是说,在函数中对参数的任何改动都不会影响到传入的变量:对于引 ...

  4. Python—函数的参数传递

    形参和实参 形参即形式参数,函数完成其工作时所需的信息.形参不占用内存空间,只有在被调用时才会占用内存空间,调用完了即被释放. 实参即实际参数,调用函数时传给函数的信息. # -*- coding: ...

  5. python初步学习-python函数 (二)

    几个特殊的函数(待补充) python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda >& ...

  6. python学习【第五篇】python函数 (二)

    一.装饰器 装饰器:本质就是函数,功能是为其它函数添加附加功能 装饰器的原则: 不修改被修饰函数的源代码 不修改被修饰函数的调用方式 装饰器的知识储备: 装饰器 = 高阶函数 + 函数嵌套 + 闭包 ...

  7. Python 函数(二)

    参数 以下是调用函数时可使用的正式参数类型: 必备参数 关键字参数 默认参数 不定长参数 必备参数 必备参数须以正确的顺序传入函数.调用时的数量必须和声明时的一样. 调用printme()函数,你必须 ...

  8. Python函数二(函数名,闭包,迭代器)之杵臼之交

    函数名的使用: 函数名可以作为值,赋值给变量. 函数名可以作为参数传参给函数. 函数名可以作为返回值. 函数名可以作为元素存储在容器里. 闭包:在嵌套函数内,使用外层局部变量(非全局变量)就是一个闭包 ...

  9. Python 函数 参数传递

    参数传递    在 python 中,类型属于对象,变量是没有类型的:        a=[1,2,3]        a="Runoob"    以上代码中,[1,2,3] 是 ...

随机推荐

  1. Java properties配置文件工具类

    /* * Copyright (c) 2017. Panteng.Co.Ltd All rights reserved */ import org.apache.log4j.Logger; impor ...

  2. Ansi 与 Unicode 字符串类型的互相转换

    WideCharToMultiByte 实现宽字节转换到窄字节MultiByteToWideChar 实现窄字节转换到宽字节 WideCharToMultiByte 的代码页用来标记与新转换的字符串相 ...

  3. MySql基础学习-数据操作

    对于数据的操作,无非是“增删该查”这几种操作. 1增加 数据的增加使用insert语句插入 语法:INSERT INTO TABLE_NAME(column1,column2,...)VALUES(v ...

  4. review37

    线程的常用方法 1.start() 线程调用该方法将启动线程,使之从新建状态进入就绪队列排队. 2.run() 3.sleep() 4.isAlive() 线程处于新建状态时,线程调用isAlive( ...

  5. html5 pc端参考网址

    http://huodong.baidu.com/zhuanpan/?SEM&PC&refer=107255

  6. Javascript-理解事件总结

    事件 [事件流]表述的是从页面接收事件的顺序.1.事件冒泡流:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档).所有浏览器都支持.2.事件捕获:与事件冒泡相反,事件捕获的用意在 ...

  7. 【VS2013生成DirectX Tutorials时遇到的错误】无法解析的外部符号 _D3D10CreateDeviceAndSwapChain@32

     本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/3696472.html 今天尝试编译DirectX10中的一个Turorials时, ...

  8. Thinkphp5.0 获取新增数据的ID

    // 方法1 insertGetId方法新增数据并返回主键值使用getLastInsID方法: Db::name('user')->insert($data); $userId = Db::na ...

  9. Microsoft Visual Studio Ultimate 2013 RC 离线安装程序

    Microsoft Visual Studio Ultimate 2013 RC 离线安装程序 ☆ 微软官网地址:☆ http://www.microsoft.com/en-us/download/d ...

  10. Codeforces Round #253 (Div. 2)B(暴力枚举)

    就暴力枚举所有起点和终点就行了. 我做这题时想的太多了,最简单的暴力枚举起始点却没想到...应该先想最简单的方法,层层深入. #include<iostream> #include< ...