python 函数的定义及传参
函数是一个通用的程序结构部件,是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
定义一个简单的函数:
>>> def test(a): #创建一个函数,函数名是test。
for i in a:
print(i)
>>> test((1,2,3,4,5)) #使用test()调用函数,同时往里面传一个参数(元组)。
1
2
3
4
5
>>> test(['a','b','c','d']) #使用test()调用函数,往里面传一个参数(列表)。
a
b
c
d
参数形式:
不传参数
>>> def fun1(): #定义一个不传参的函数。
print('不能传参数:')
for i in range(1,10):
print(i) >>> fun1() #调用函数。
不能传参数:
1
2
3
4
5
6
7
8
9
>>> fun1('a') #传一个参数,结果会报错。
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
fun1('a')
TypeError: fun1() takes 0 positional arguments but 1 was given
>>>
必备参数
>>> def fun2(a): #这个函数必须传参数
print('必须传参数:')
for i in range (2,a):
print(i) >>> fun2(8) #调用函数,并且传一个参数。函数里面的range(2,a),传入参数 '8',就变成了range(2,8)
必须传参数:
2
3
4
5
6
7
>>>
默认参数
>>> def fun2(a=6): #定义一个可选参数的函数,因为参数默认有值。
print('默认参数:')
for i in range (2,a):
print(i) >>> fun2() #调用函数,没有传参数。
默认参数:
2
3
4
5
>>> fun2(8) #也可以定义一个参数。
默认参数:
2
3
4
5
6
7
>>> fun2(a=12) #也可以使用 “a=12” 这种方式传参数。
默认参数:
2
3
4
5
6
7
8
9
10
11
>>>
可选参数:包装成元组
def fun4(*arg),这里重要的是 " * 号 ",后边的arg只是一个约定俗成的名称。注意:调用函数时也可以添加 “* 号”这样可以对参数进行 “解包”
>>> def fun4(*arg): #有 “* 号” 开始的参数,意味着可以在这个函数里传多个或者0个参数。
print('可传0个或者多个参数:',arg) >>> fun4() #调用函数,不传参数
可传0个或者多个参数: ()
>>> fun4(1) #(1,)证明是元组,因为元素1后边有个 ',号'
可传0个或者多个参数: (1,)
>>> fun4(1,'a') #传多个参数
可传0个或者多个参数: (1, 'a') >>> fun4(1,{'a':1})
可传0个或者多个参数: (1, {'a': 1}) >>> fun4(1,*{'a':1}) #这里调用函数时,在其中一个字典参数前面添加了一个 "* 号"(*{'a':1}),这个"* 号"把里面的壳去掉,结果指输出字典的 “键”
可传0个或者多个参数: (1, 'a') >>> fun4(1,['a',1])
可传0个或者多个参数: (1, ['a', 1]) >>> fun4(1,*['a',1]) #这使用"* 号"把列表里面的壳去掉(解包)。
可传0个或者多个参数: (1, 'a', 1)
关键字参数:包装成字典
>>> def fun(**kwarg): #这里 " ** 号 "是重点,参数名kwarg是一个约定俗称,也可以这样定义 def fun(**abc):
print('关键字参数:',kwarg) >>> fun() #调用函数,不传参数时,返回一个空的字典。
关键字参数: {}
>>> fun(a=1,b=2,c=3) #可以传多个参数,因为返回的是字典,所以参数需要时键值对的格式。
关键字参数: {'a': 1, 'b': 2, 'c': 3}
>>> fun(**{'y':1,'b':8}) #如果不加 " ** 号 ",调用函数时会报错。
关键字参数: {'y': 1, 'b': 8}
>>>
参数混合的时候,关键字参数放最后;根据定义的顺序,确保必备参数能拿到值,并且只能拿到一个值。
必备参数 + 默认参数
>>> def fun(a,b=1): #默认参数b,必须放在必备参数a前面。
print('必备参数是:%s,默认参数是:%s'%(a,b)) >>> fun(2) #调用函数时,只需要给必备参数赋值
必备参数是:2,默认参数是:1
>>> fun(a=3,b=5) #也可以这样调用函数,(a=3,b=5)像关键字参数赋值一样。
必备参数是:3,默认参数是:5
>>> fun(3,5) #也可以不使用变量名
必备参数是:3,默认参数是:5
>>> fun(a=1,3) #这样就会报错,关键字参数(a=1)的赋值方式要放在后边。
SyntaxError: positional argument follows keyword argument
>>> fun(3,a=1) #也会报错,需要根据函数里传参的顺序来定义。按照传参的顺序,此时必备参数已经取到值3了,但是后边又以a=1这种关键字参数的方式又给a赋值了一次。
Traceback (most recent call last):
File "<pyshell#100>", line 1, in <module>
fun(3,a=1)
TypeError: fun() got multiple values for argument 'a'
>>>
必备参数 + 默认参数 + 关键字参数。
关键字参数放最后;根据定义的顺序传参。
def fun(a,b=1,*abc): #函数里面必备参数是a,默认参数是b=1,可选参数是:*abc
print('必备参数是:%s,默认参数是:%s,可选参数是:%s'%(a,b,abc)) >>> fun(8) #调用函数时,只需要给必备参数赋值。
必备参数是:8,默认参数是:1,可选参数是:()
>>> fun(8,b=9,1,2,3)#因为最后是 “ 关键字参数*abc ”,理论上这样调用函数是可以的,但是结果会报错。因为“ b=9 ”会被当成关键字参数放在最后,这样调用函数的顺序就不对了。
SyntaxError: positional argument follows keyword argument
>>> fun(8,1,2,3,b=9) #这种调用方式也不对,当必备参数 a 取到8后,接着默认参数 b 就会取1,然后关键字参数 *abc 取2和3,而最后又来一个默认参数b=9;结果顺序就错了。
Traceback (most recent call last):
File "<pyshell#121>", line 1, in <module>
fun(8,1,2,3,b=9)
TypeError: fun() got multiple values for argument 'b'
>>>
>>>
>>> fun(5,8,2,3,9) #必备参数a取5,默认参数b取8,可选参数*abc取(2, 3, 9)
必备参数是:5,默认参数是:8,可选参数是:(2, 3, 9)
>>>
python 函数的定义及传参的更多相关文章
- 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)
详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类 Python中函数参数定义及调用函数时传参 ...
- 深入理解PHP内核(十二)函数-函数的定义、传参及返回值
原文链接:http://www.orlion.ga/344/ 一.函数的定义 用户函数的定义从function 关键字开始,如下 function foo($var) { echo $var; ...
- 深入理解PHP内核(六)函数的定义、传参及返回值
一.函数的定义 用户函数的定义从function 关键字开始,如下 function foo($var) { echo $var; } 1.词法分析 在Zend/zend_language_scann ...
- c语言-函数的定义及传参
模块化编程 定义: 数据类型 函数名(型参):如果没有数据类型,默认的为int 值传递 地址传递 嵌套调用 递归调用:直接或间接调用本身函数,求可能栈破裂,求阶乘 #include <stdio ...
- python oop培训文档里面的 正宗oop、多个函数间反复return传参、多个文件无限复制粘贴扣字、无效废物滑稽类4种方式的例子。(2)
把文档里面说的几种范式发出来. 4种编程范式实现一个人吃喝拉撒长身体的代码.语法很简单,思想模拟了所有程序员写代码时候的代码规划设计想法. 0.我不反对复制粘贴的写法,可以百度搜索复制粘贴网上现有的, ...
- (转)Javascript匿名函数的写法、传参、递归
(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http: ...
- (转)javascript匿名函数的写法、传参和递归
(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-0 ...
- Python函数的定义、参数传入与函数的调用
作为计算机代码的一种抽象方式,函数在Python中扮演了极为重要的角色.今天给大家介绍Python函数的定义.参数的传入以及调用方式.其中函数参数的传入方式为本节重点内容.Python函数的参数形式包 ...
- Python函数定义及传参方式
主要内容: 1.函数初识 2.函数传参方式 (1)位置参数 (2)默认参数 (3)关键参数 (4)非固定传参 一.函数初识 1. ...
随机推荐
- CentOS7最小化安装-Linux-1
CentOS 7的安装其实很简单,主要是网络配置. 选英文.设置时区等 最小化安装 先启动一个网络 Begin 吧 在安装的时候设置好root密码.很简单 别去点安装tools. 等待安装完成后,点击 ...
- [Android] 使用ViewPager 实现导航
转载请标注:转载于http://www.cnblogs.com/Liuyt-61/p/6582667.html -------------------------------------------- ...
- Ruby学习笔记5: 动态web app的建立 (2)
上一节里,我们搭建了一个数据库的结构,并用index验证了request-response cycle,如下图: 1. Add show method into Controller 这一节,我们要继 ...
- curd——5
curd——5 SELECT area_id FROM 16tree.ts_area where pid=0; <?php //1可以防止注入$db = Yii::app()->db; ...
- PHP 服务 php-fpm 的一些常见配置
< 操作系统 Centos7,PHP版本7.2.7 > 已下所有配置涉及到时间单位均使用 => 秒(s) 分 (m) 时 (h) 天(d) [ 以下为全局配置 ] 01,关于,进程文 ...
- C# 如何利用反射,将字符串转化为类名并调用类中方法
首先,先随便创建一个测试类 <span style="font-family:Microsoft YaHei;font-size:18px;">public class ...
- jquery接触初级-----ajax 之:jquery_ajax 方法
1. $.get() 方法: 格式:$.get( url,[,data],[,callback],[,type] ); data: 采用键值对的方式存储于对象中; callback: 载入成功时(当 ...
- Linux主题:获取帮助
Linux有多种方式获取帮助,这些帮助通过不同的命令,获得不同详细程度和文字量的帮助. help help方式有两种用法,一种是help command,另一种是command --help.前一种是 ...
- 理解 IntelliJ IDEA 的项目配置和Web部署(转载)
理解 IntelliJ IDEA 的项目配置和Web部署 1.项目配置的理解 IDEA 中最重要的各种设置项,就是这个 Project Structre 了,关乎你的项目运行,缺胳膊少腿都不行.最 ...
- Redis进阶实践之九 独立封装的RedisClient客户端工具类(转载9)
Redis进阶实践之九 独立封装的RedisClient客户端工具类 一.引言 今天开始有关Redis学习的第九篇文章了,以后肯定会大量系统使用Redis作为缓存介质,为了更好的更好的Redis,自己 ...