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 相关文章推荐
Python3实现生成随机密码的方法
Aug 23 Python
Python使用Redis实现作业调度系统(超简单)
Mar 22 Python
python3中zip()函数使用详解
Jun 29 Python
python 对多个csv文件分别进行处理的方法
Jan 07 Python
Python闭包和装饰器用法实例详解
May 22 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
Python实现对adb命令封装
Mar 06 Python
django model通过字典更新数据实例
Apr 01 Python
python 日志模块logging的使用场景及示例
Jan 04 Python
SpringBoot首页设置解析(推荐)
Feb 11 Python
如何使用Python实现一个简易的ORM模型
May 12 Python
使用Pytorch训练two-head网络的操作
May 28 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与ASP
2006/10/09 PHP
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
JS模块与命名空间的介绍
2013/03/22 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
Vue组件开发初探
2017/02/14 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
如何运行Python程序的方法
2013/04/21 Python
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
python文件操作之批量修改文件后缀名的方法
2018/08/10 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
python将数组n等分的实例
2019/12/02 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
python实现计算器简易版
2020/12/17 Python
Python 内存管理机制全面分析
2021/01/16 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android