读廖雪峰的 Python 教程小结--------Python函数
来源:互联网 发布:mysql创建唯一约束 编辑:程序博客网 时间:2024/05/19 02:21
其实Python的函数不难,重点不是在函数的调用,和函数的定义。我觉得重点在与定义函数的时候定义函数参数
主要分:
1. 位置参数
2. 默认参数
3. 可变参数
4. 关键字参数
5. 命名关键字参数
位置参数,就是普通的函数的定义啊
def abs(x): if x>0: return x else: return -x def max(x , y): if x>y: return x else: return y
默认参数,给某个参数给上默认值
但是有几点需要注意的:
- 必选参数在前,默认参数在后,否则Python的解释器会报错;
- 是如何设置默认参数。当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
def power(x , n=2): i=0 sum=1 while i>n: sum = sum*x return sum
当有多个默认参数的时候,调用的时候要按照默认参数的顺序调用,当然也可以不按照顺序,但是调用的时候就要做一些改变
比如:
def setStudent(name , age=8 , city="Guangzhou"): print("name:%s" % name) print("age :%s" % age) print("city:%s" % city) >>>setStudent("KIM") .... .... >>>setStudent("KIM" , 9 , "Shanghai") .... .... >>>setStudent("KIM" , city="Beijing") #跳过了age
最后要注意的是:默认参数必须指向不变对象!!!
可变参数,就是参数是不定的,你可以给任意的参数数量
#只需要在参数前加上一个*,就变成可变参数了 #在函数内部,参数numbers接收到的是一个tuple #即是numbers是一个tuple(数组) def max(*numbers): max=0 for n in numbers: if n > max: max = n return max
调用方法也有几种:
Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去
>>>max(5,6,9,7) ... ... >>>L=[1,2,3,4] >>>T=(2,3,4,5) >>>max(*L) ... ... >>>max(*T) ... ...
关键字参数
关键字参数其实和可变参数差不多,只不过可变参数是把参数自动组装为一个tuple,而关键字参数在函数内部自动组装为一个dict
- 可变参数———–tuple
- 关键字参数——–dict
在参数前面家两个*,就是关键字参数
当然我们调用的时候,传入参数的形式也是以键值对的方式传入
def setPersonInfo(name , age , **kw): pass >>>setPersonInfo("KIM" , 8) ... ... >>>setPersonInfo("KIM" , 8 , city="Beijing" , job="teacher") ... ... >>> extra = {'city': 'Beijing', 'job': 'Engineer'} >>> person('Jack', 24, city=extra['city'], job=extra['job']) ... ... >>> person('Jack', 24, **extra) ... ...
**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
命名关键字参数
简单理解命名关键字参数就是关键字参数的升级版,关键字参数不能限制输入参数的,而命名参数可以限制(可以看出命名关键字参数是定长的)
关键字参数*kw不同,命名关键字参数需要一个特殊分隔符,*后面的参数被视为命名关键字参数
def setPersonInfo(name , age , * , city , job): pass#必须要键值对方式传入,并且是规定好的,不能任意,否则会报错>>> person('Jack', 24, city='Beijing', job='Engineer')
当然也有特殊情况,比如说:
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了
def person(name, age, *args, city, job): pass
看出如果在可变参数后边的位置参数其实是命名关键字参数,要以键值对方式传入,否则会被当做可变参数的
>>>person("KIM" , 8 , city="Guangzhou" , job="teacher") ... ... >>>person("KIM" , 8 , "傻瓜" , city="Guangzhou" , job="teacher") ... ...
当然命名关键字参数也可以具有默认值,那在调用的时,就可不传入有默认值的参数
def person(name, age, *args, city="Guangzhou", job): pass def person(name, age, * , city="Guangzhou", job): pass >>>person("KIM" , 8 , job="teacher") ... ...
总结
位置参数————普通参数
默认参数————给参数默认值,调用的时候可以不传参数
可变参数————不定参数的个数 ,以tuple方式传入, *args
关键字参数———和可变参数差不多 , 以 dict 方式传入 **kw
命名关键字参数—–关键字参数的升级版,参数定长,以dict传入,但是必须以规定的参数名传入 ,*,job
- 读廖雪峰的 Python 教程小结--------Python函数
- 读廖雪峰的 Python 教程小结--------Python基础
- 读廖雪峰的 Python 教程小结--------Python高级特性
- 廖雪峰的Python教程
- 廖雪峰python教程
- 廖雪峰python教程阅读之函数
- 廖雪峰python教程阅读之函数的参数
- 廖雪峰的Python教程-高阶函数
- 廖雪峰的Git、Python教程
- 廖雪峰的0Python教程
- 廖雪峰的Python教程-网络编程
- 廖雪峰的Python教程-电子邮件
- 廖雪峰的Python教程-生成器
- Python练习 - 廖雪峰教程
- 廖雪峰 Python教程 笔记
- 廖雪峰的Python-返回函数
- 廖雪峰的Python-匿名函数-lambda
- 廖雪峰python教程阅读之调用函数
- 使用vundle管理vim的插件
- ubuntu下在docker中安装mysql5.6
- PoEdu-Windows班-005 ListView控件的使用方法
- Dubbo&maven 聚合初学Demo级别配置展示
- SQL2008 清除日志文件方法
- 读廖雪峰的 Python 教程小结--------Python函数
- JKI State Machine
- PHP:分页功能,底层原理;
- Effective Java读书笔记十九(Java Tips.Day.19)
- Hibernate的聚合查询返回类型Long
- OpenSessionInViewFilter原理以及为什么要用OpenSessionInViewFilter
- [usaco]Name That Number题解
- git 关于merge的小总结
- 面试:----利用solr实现商品的搜索功能