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 相关文章推荐
python2.7 json 转换日期的处理的示例
Mar 07 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
基于Python解密仿射密码
Oct 21 Python
python使用pip安装SciPy、SymPy、matplotlib教程
Nov 20 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 Python
Python函数参数分类原理详解
May 28 Python
PyQt5实现登录页面
May 30 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 20 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
Python 下载Bing壁纸的示例
Sep 29 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
php mysql数据库操作类
2008/06/04 PHP
php smarty函数扩展
2010/03/15 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
js实现按一下删除键删除整个单词附demo
2014/09/05 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
基于Vue制作组织架构树组件
2017/12/06 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
使用Python解析JSON数据的基本方法
2015/10/15 Python
Python中异常重试的解决方案详解
2017/05/05 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
pycham查看程序执行的时间方法
2018/11/29 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
印度服装购物网站:Limeroad
2018/09/26 全球购物
大学毕业生工作的自我评价
2013/10/01 职场文书
物理系毕业生自荐信
2013/11/01 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
空气环保标语
2014/06/12 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
学生打架检讨书
2014/10/20 职场文书
民事答辩状格式范文
2015/05/21 职场文书
导游词之介休绵山
2019/12/31 职场文书
MySQL Router的安装部署
2021/04/24 MySQL
浅谈Python numpy创建空数组的问题
2021/05/25 Python
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript