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 相关文章推荐
Python中endswith()函数的基本使用
Apr 07 Python
详解Python中映射类型的内建函数和工厂函数
Aug 19 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
python使用opencv读取图片的实例
Aug 17 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
python和flask中返回JSON数据的方法
Mar 26 Python
在自动化中用python实现键盘操作的方法详解
Jul 19 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
python 统计文件中的字符串数目示例
Dec 24 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 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
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
php递归创建目录的方法
2015/02/02 PHP
33道php常见面试题及答案
2015/07/06 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
python基于Tkinter库实现简单文本编辑器实例
2015/05/05 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
2019/04/29 Python
python实现随机漫步方法和原理
2019/06/10 Python
django页面跳转问题及注意事项
2019/07/18 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
python__new__内置静态方法使用解析
2020/01/07 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
如何提高MySql的安全性
2014/06/19 面试题
大学生年度自我鉴定
2013/10/31 职场文书
融资租赁计划书
2014/04/29 职场文书
五好关工委申报材料
2014/05/31 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技