Python3 From Zero——{最初的意识:007~函数}
一、编写可接受任意数量参数的函数:*、**
>>> def test(x, *args, y, **kwargs):
... pass
...
>>> test(1, 2, 3, 4 ,5 ,5, y=9, aa=99, bb=88,cc=900)
>>> test(1, 2, 3, 4 ,5 ,5, 9, aa=99, bb=88,cc=900)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: test() missing 1 required keyword-only argument: 'y'
#以*打头的参数只能作为最后一个位置参数出现,以**打头的参数只能作为最后一个参数出现;*args之后仍然可以有其它的参数出现,但只能是关键字参数(keyword_only)
二、编写只接受关键字参数的函数
>>> def test(*, x, y):
... pass
...
>>> test(8, 9)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: test() takes 0 positional arguments but 2 were given
>>> test(x=9, y=8)
#星号*之后的参数都是keyword_only参数
三、函数注解
>>> def add(x:int ,y:int) ->int:
... return x + y
...
add.__annotations__
{'x': <class 'int'>, 'return': <class 'int'>, 'y': <class 'int'>}
#函数注解只会保存在函数的__annotations__属性中;因为Python中没有类型声明,函数注解可以用于提示
四、从函数中返回多个值:各返回值之间以逗号“,”分隔,本质上是返回一个tuple,可通过tuple解包实现返回多个值的目的
>>> def myfun():
... return 1, 2, 3
...
>>> x, y, z = myfun()
>>> x
1
>>> y
2
>>> z
3
>>> a = myfun()
>>> a
(1, 2, 3)
五、定义带有默认参数的函数
默认参数只会在函数定义时被绑定一次
>>> x = 44
>>> def sample(a=x):
... print(a)
...
>>> sample()
44
>>> x = 88
>>> sample()
44
默认参数的默认值通常应该是不可变对象;若设置可变对象,应参照如下方式:
>>> def test(a, b=None):
... if b is None:
... b = []
... pass
...
六、嵌套函数
>>> def xxx(m):
... def yyy(n):
... return m + n
... return yyy
...
>>> xxx(20) #可对比嵌套列表的逻辑进行理解
<function xxx.<locals>.yyy at 0x7f68c3aef0d0>
>>> xxx(20)(20) #给内嵌的函数参数赋值
40
>>> def test(m):
... return lambda n: m + n #实现原理上,lambda可以理解为嵌套函数
...
>>> test(20)(20)
40
七、让带有N个参数的可调用对象以较少的参数形式调用
即:给一部分参数预先斌予固定值,相当于转化成一个带有默认值的函数
>>> def sum(a, b, c, d):
... return a + b + c + d
...
>>> sum(1, 2, 3, 4)
10
>>> import functools
>>> test_0 = functools.partial(sum, b=2, c=3, d=4)
>>> test_0(1)
10
>>> test_0(100)
109
也可使用lambda函数实现
>>> test_1 = lambda a, b=2, c=3, d=4: sum(a, b, c, d)
>>> test_1(1)
10
>>> test_1(100)
109
Python3 From Zero——{最初的意识:007~函数}的更多相关文章
- Python3 From Zero——{最初的意识:002~字符串和文本}
一.使用多个界定符分割字符串 字符串.split(',')形式只适用于单一分割符的情况:多分割符同时应用的时候,可使用re.split() >>> line = 'asdf fjdk ...
- Python3 From Zero——{最初的意识:000~Initial consciousness}
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 a.编码 默认情况下,Python ...
- Python3 From Zero——{最初的意识:008~初级实例演练}
一.构显国际橡棋8x8棋盘 #!/usr/bin/env python3 #-*- coding:utf-8 -*- color_0="\033[41m \033[00m" col ...
- Python3 From Zero——{最初的意识:006~数据编码与处理}
一.读写CSV数据: #!/usr/bin/env python3 #-*- coding=utf8 -*- import csv with open('kxtx.csv', 'rt') as f: ...
- Python3 From Zero——{最初的意识:005~文件和I/O}
一.输出重定向到文件 >>> with open('/home/f/py_script/passwd', 'rt+') as f1: ... print('Hello Dog!', ...
- Python3 From Zero——{最初的意识:003~数字、日期、时间}
一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...
- Python3 From Zero——{最初的意识:001~数据结构和算法}
一.从队列两端高效插入.删除元素,及保留固定数量的数据条目: collections.deque([iterable[,maxlen=N]]) a = collections.deque([1, 2] ...
- Python3 From Zero——{最初的意识:004~迭代器和生成器}
一.反向迭代:reversed() >>> a [1, 2, 3, 4] >>> for x in reversed(a): ... print(x, end=' ...
- python3中替换python2中cmp函数的新函数分析(lt、le、eq、ne、ge、gt)
本文地址:http://blog.csdn.net/sushengmiyan/article/details/11332589 作者:sushengmiyan 在python2中我们经常会使用cmp函 ...
随机推荐
- 逆向思维——cf1241D
/* 给定一个序列a,每次可以把值为x的所有元素放到a的首部或尾部,问将a变为lis的最少操作步数 对原序列离散化后重新打标记, 可以反着来考虑这个问题:即固定连续的元素值为[l,r]的点不动,那么剩 ...
- 折半枚举——poj3977
暴力搜索超时,但是折半后两部分状态支持合并的情况,可用折半枚举算法 poj3977 给一个序列a[],从里面找到k个数,使其和的绝对值最小 经典折半枚举法+二分解决,对于前一半数开一个map,map[ ...
- 学习Caffe(一)安装Caffe
Caffe是一个深度学习框架,本文讲阐述如何在linux下安装GPU加速的caffe. 系统配置是: OS: Ubuntu14.04 CPU: i5-4690 GPU: GTX960 RAM: 8G ...
- 搭建单机版spark
二.下载软件 JDK,Scala,SBT,Maven 版本信息如下: JDK jdk-7u79-linux-x64.gz Scala scala-2.10.5.tgz 三.解压上述文件并进行环境变量配 ...
- jdk8处理时间
对当前时间格式化: public static long getCurrentTimeMillis(String pattern) { return Long.valueOf(toString(Loc ...
- cut 从/a/b/c/d/e获取/a/b/c
https://www.cnblogs.com/chenxiaomeng/p/10066821.html two_dir=`echo /a/b/c/d/e/f | cut -d"/" ...
- ssh 登陆免 known_hosts 提示
修改配置文件 “~/.ssh/config”,加上这两行,重启服务器: StrictHostKeyChecking no UserKnownHostsFile /dev/null
- 前端(十四)—— JavaScript常用类:Number、Date类、字符串、数组、Math类、正则
JS常用类:Number类.Date类.Math类.字符串.数组.正则 一.Number 1.常用数字 整数:10 小数:3.14 科学计数法:1e5 | 1e-5 正负无穷:Infinity | - ...
- 新建pc端页面的模板
pc端页面,要做兼容.新建pc端模板时,先要初始化浏览器的样式,我命名为reset.css @charset "utf-8"; /* 取消链接高亮 */ body,div,ul,l ...
- 新项目UX设计0到1的正确开启方式
无论是在BAT还是创业小公司,都随时可能接到从0开始的新项目,那么作为负责新项目的主设OR独立设计师,我们应该从何开启工作呢?