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备份Mysql脚本
Aug 11 Python
Python检测生僻字的实现方法
Oct 23 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
python 重定向获取真实url的方法
May 11 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
python3.6 如何将list存入txt后再读出list的方法
Jul 02 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
DRF框架API版本管理实现方法解析
Aug 21 Python
Python用dilb提取照片上人脸的示例
Oct 26 Python
详解matplotlib绘图样式(style)初探
Feb 03 Python
pytorch中Schedule与warmup_steps的用法说明
May 24 Python
Python道路车道线检测的实现
Jun 27 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大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
php实现微信支付之现金红包
2018/05/30 PHP
Js注册协议倒计时的小例子
2013/06/24 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
Extjs 点击复选框在表格中增加相关信息行
2016/07/12 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
Python常用模块用法分析
2014/09/08 Python
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
python面试题小结附答案实例代码
2019/04/11 Python
在python中画正态分布图像的实例
2019/07/08 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
python基于opencv 实现图像时钟
2021/01/04 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
速比涛英国官网:Speedo英国
2019/07/15 全球购物
关于人生的感言
2014/01/17 职场文书
物理课外活动总结
2014/08/27 职场文书
公司员工安全协议书
2014/11/21 职场文书
团员个人总结
2015/02/26 职场文书
体检通知范文
2015/04/21 职场文书
公司处罚决定书
2015/06/24 职场文书
Python图片检索之以图搜图
2021/05/31 Python
python 管理系统实现mysql交互的示例代码
2021/12/06 Python