Python中函数的多种格式和使用实例及小技巧


Posted in Python onApril 13, 2015

这里先解释一下几个概念
- 位置参数:按位置设置的参数,隐式用元组保存对应形参.平时我们用的大多数是按位置传参.比如有函数def func(a,b,c),调用func(1,2,3).即a=1,b=2,c=3
- 关键字参数:可以通过关键字设置参数,不用关心参数位置,隐式用字典保存形参.比如有函数def func(a,b,c),调用func(b=1,c=2,a=3),即a=3,b=1,c=2

普通格式

def func(opt_args):

    ...

    return value

带收集位置参数的函数

格式如下

def func(*params):

    ...

    return value

用法

使用函数时,不用限制传参的个数,*params会自动收集传入的参数作为一个元组.

实例

def  func(*params):

    print params
a = [1,2,3,4]

b = 'hello'

c = 3

func(a, b, c)

输出

([1, 2, 3, 4], ‘hello', 3)

带收集关键字参数的函数

格式如下

def func(**params):

    ...

    return value

用法
按关键字传参时,**params会自动收集传入的参数作为一个字典.

实例

def  func(**params):

    print params

func(a=1, b=2, c=3)

输出
{‘a': 1, ‘c': 3, ‘b': 2}

函数特殊用法

默认参数

格式

def func(a = 1, b = 2)

等号(=)号是默认值,调用函数时可以不用传参给默认参数.
实例
def  func(a = 1, b = 2):

    print a, b  

func(a=3)

输出
3 2

函数可以返回多个值

格式

return a, b, c

实例
def  func(a = 1, b = 2):

    return a, b
print func(a=3)

输出
(3, 2)

内嵌函数和闭包

格式

def foo()    #外部函数

    def bar()    #内嵌函数

        ....

    ....

如果内嵌函数引用了外部函数的变量(包括外部函数参数),这个引用的变量称为自由变量, 那么称这个内嵌函数是闭包.再来看看专业的解释:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。

实例

def foo(a, b):

    x = 4

    def bar():

        return x * a + b;

    return bar
f1= foo(1, 2)

f2= foo(2, 3)
print f1(), f2()

输出
6 11

传递函数

Python一切皆对象,函数这一语法结构也是一个对象, 可以将函数名作为参数传递
格式

def bar(*param1, **param2):

    ....
def foo(bar, *param1, **param2):

    bar(*param1, **param2)

实例
def bar(*param1, **param2):

    print param1

    print param2
def foo(bar, *param1, **param2):

    bar(*param1, **param2)
foo(bar,  1, 2, 3,  a = 111, b = 222, c = 333)

输出
(1, 2, 3) 

{‘a': 111, ‘c': 333, ‘b': 222}

匿名函数与lambda

lambda语法可以创建一个匿名的函数,主要作用是简化书写,是一种语法糖.
- 格式

lambda [arg1[, arg2, … argN]] : expression

实例
def foo(x, y):

    return x + y

print  "call foo function, result is: ", foo(3, 4)
bar = lambda x = 2, y = 3 : x + y

print  "call lambda fucntion, result is:", bar(3,4)

输出
call foo function, result is: 7 

call lambda fucntion, result is: 7
Python 相关文章推荐
详细介绍Ruby中的正则表达式
Apr 10 Python
python web.py开发httpserver解决跨域问题实例解析
Feb 12 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
Python中求对数方法总结
Mar 10 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
Python执行时间的几种计算方法
Jul 31 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
Python eval函数原理及用法解析
Nov 14 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
在Python中使用SimpleParse模块进行解析的教程
Apr 11 #Python
Python的动态重新封装的教程
Apr 11 #Python
简单的Python的curses库使用教程
Apr 11 #Python
详解Python中的文本处理
Apr 11 #Python
状态机的概念和在Python下使用状态机的教程
Apr 11 #Python
在Python下使用Txt2Html实现网页过滤代理的教程
Apr 11 #Python
详解Python中DOM方法的动态性
Apr 11 #Python
You might like
PHP读取MySQL数据代码
2008/06/05 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
php中动态调用函数的方法
2015/03/16 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
python实现广度优先搜索过程解析
2019/10/19 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
会计毕业生自我鉴定
2013/11/04 职场文书
公司薪酬管理制度
2014/01/31 职场文书
总经理岗位职责范本
2014/02/02 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android