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

>>> 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. 高级运维(六):源码安装Redis缓存服务、常用Redis数据库操作指令、配置Redis主从服务器

    一.源码安装Redis缓存服务 目标: 本案例要求先快速搭建好一台Redis服务器,并测试该缓存服务器: 1> 设置变量test,值为123 2> 查看变量test的值 3> 设置计 ...

  2. vim编辑器设置缩进!

    转载自 http://blog.chinaunix.net/uid-27213819-id-3813909.html 1.在自己的home目录下建立.vimrc文件.控制台输入vi ~/.vimrc ...

  3. python中处理.mat文件

    python中处理.mat文件 背景 在实际使用python的时候,发现很多数据都是使用.mat的形式保存,所以,如何使用python读写.mat文件成为了许多python使用者必备的技能. -v7. ...

  4. org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.abc.beans.Minister

    使用mybatis进行一对多嵌套查询时出错,错误原因: <select id="findMinisterById" resultMap="com.abc.beans ...

  5. xshell6 远程连接时提示 WARNING! The remote SSH server rejected X11 forwarding request.

    1.输入命令 vi /etc/ssh/sshd_config ,修改配置文件 2.将UserLogin no 的注释解除   3.执行yum install -y xorg-x11-font xorg ...

  6. 数据整理A

  7. 根据不同运行环境配置和组织node.js应用

    安装node-config模块 npm install config --save || yarn add config mkidr config // 创建config文件夹 在config文件夹下 ...

  8. 第十二篇 requests模拟登陆知乎

    了解http常见状态码 可以通过输入错误的密码来找到登陆知乎的post:url 把Headers拉到底部,可以看到form data _xsrf是需要发送的,需要发送给服务端,否则会返回403错误,提 ...

  9. 认识AppDomain类

    原文:认识AppDomain类 表示应用程序域,它是一个应用程序在其中执行的独立环境. 创建新的 AppDomain,在该新建 AppDomain 中实例化类型,以及与该类型的对象通信. usingn ...

  10. 新项目UX设计0到1的正确开启方式

    无论是在BAT还是创业小公司,都随时可能接到从0开始的新项目,那么作为负责新项目的主设OR独立设计师,我们应该从何开启工作呢?