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使用正则表达式提取网页URL的方法
May 26 Python
python使用正则表达式匹配字符串开头并打印示例
Jan 11 Python
Python MD5加密实例详解
Aug 02 Python
Python使用Scrapy保存控制台信息到文本解析
Dec 27 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
python reverse反转部分数组的实例
Dec 13 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
python matplotlib库直方图绘制详解
Aug 10 Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 Python
python 常见的排序算法实现汇总
Aug 21 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
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
Node.js的特点详解
2017/02/03 Javascript
详解node中创建服务进程
2017/05/09 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
windows10系统中安装python3.x+scrapy教程
2016/11/08 Python
Python多线程实现同步的四种方式
2017/05/02 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
详解Django-auth-ldap 配置方法
2018/12/10 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
彪马日本官网:PUMA日本
2019/01/31 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
大学毕业生通用自荐信范文
2013/10/31 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
MYSQL如何查看进程和kill进程
2022/03/13 MySQL
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis