一、编写可接受任意数量参数的函数:*、**

>>> 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~函数}的更多相关文章

  1. Python3 From Zero——{最初的意识:002~字符串和文本}

    一.使用多个界定符分割字符串 字符串.split(',')形式只适用于单一分割符的情况:多分割符同时应用的时候,可使用re.split() >>> line = 'asdf fjdk ...

  2. Python3 From Zero——{最初的意识:000~Initial consciousness}

    http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 a.编码 默认情况下,Python ...

  3. Python3 From Zero——{最初的意识:008~初级实例演练}

    一.构显国际橡棋8x8棋盘 #!/usr/bin/env python3 #-*- coding:utf-8 -*- color_0="\033[41m \033[00m" col ...

  4. Python3 From Zero——{最初的意识:006~数据编码与处理}

    一.读写CSV数据: #!/usr/bin/env python3 #-*- coding=utf8 -*- import csv with open('kxtx.csv', 'rt') as f: ...

  5. Python3 From Zero——{最初的意识:005~文件和I/O}

    一.输出重定向到文件 >>> with open('/home/f/py_script/passwd', 'rt+') as f1: ... print('Hello Dog!', ...

  6. Python3 From Zero——{最初的意识:003~数字、日期、时间}

    一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...

  7. Python3 From Zero——{最初的意识:001~数据结构和算法}

    一.从队列两端高效插入.删除元素,及保留固定数量的数据条目: collections.deque([iterable[,maxlen=N]]) a = collections.deque([1, 2] ...

  8. Python3 From Zero——{最初的意识:004~迭代器和生成器}

    一.反向迭代:reversed() >>> a [1, 2, 3, 4] >>> for x in reversed(a): ... print(x, end=' ...

  9. python3中替换python2中cmp函数的新函数分析(lt、le、eq、ne、ge、gt)

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/11332589 作者:sushengmiyan 在python2中我们经常会使用cmp函 ...

随机推荐

  1. go语言将函数作为参数传递

    Go语言函数作为参数传递,目前给我的感觉几乎和C/C++一致.非常的灵活. import "fmt" import "time" func goFunc1(f  ...

  2. Future初次使用理解

    当客户端执行方法时,立即返回一个代理对象,此时代理对象没有数据,与此同时开启一个线程去构造真实对象并把真实对象替换掉代理对象(使用set方法).所以就会出现,客户端收到代理对象之后以为执行完了然后执行 ...

  3. git分布式版本控制系统权威指南学习笔记(四):git reset

    文章目录 git reset目录树重写 git reset 重置 git reset目录树重写 git reset --soft 暂存区工作区不变 git reset --hard git reset ...

  4. mvn eclipse:eclipse

    pom.xml 在哪个文件夹, 你就在哪里按shift 右键,,[在此处打开命令窗口]  执行那个命令. mvn eclipse:eclipse

  5. 3. Python基础语法

    注释 我们在文言文中经常会看到注释,注释可以帮助读者对文章的理解.代码中的注释也是一样,优秀的代码注释可以帮助读者对代码的理解.当然在代码编写过程中,注释的使用不一定只是描述一段代码,也可能的是对代码 ...

  6. flink收藏博客

    1.https://blog.csdn.net/liguohuabigdata/article/category/7279020 2.http://wuchong.me 3.https://www.j ...

  7. 剑指offer——570~n-1中缺失的数字

    题目:0~n-1中缺失的数字. 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内. 在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. ...

  8. 【牛客提高训练营2B】分糖果

    题目 发现自己一年之前非常垃圾 题目大意是给你一个\(n\)个点的环,给每个点一个\([1,a_i]\)的取值,并且满足环上任意相连两点权值不能相等,求方案数 考虑断环为链,发现不大会 不妨考虑所有\ ...

  9. 【学术篇】51nod 1238 最小公倍数之和

    这是一道杜教筛的入(du)门(liu)题目... 题目大意 求 \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \] 一看就是辣鸡反演一类的题目, 那就化式子呗.. \[ \s ...

  10. Mysql的Event

    Mysql的Event Event简介 Event是mysql中的一个事件,和触发器类似,触发器是在某条sql语句执行后可能会触发,而Event是每隔一段时间或某个特定的时间点执行,可以精确到秒. 准 ...