Python

函数是一个能完成特定功能的代码块,可在程序中重复使用,减少程序的代码量和提高程序的执行效率。在python中函数定义语法如下:

def  function_name(arg1,arg2[,…]):statement[return value]

返回值不是必须的,如果没有return语句,则Python默认返回值None。

>>> def hello():
...     print 'Hello World!'
...
>>> res = hello()
Hello World!
>>> res
>>> print res
None
>>> type(res)
<type 'NoneType'>
>>>

Python函数没有声明和定义的区分。

python函数能返回多个值?

>>> def foo():
...     return 1,'123',[1,'a']
>>> res = foo()
>>> print res
(1, '123', [1, 'a'])
>>> res
(1, '123', [1, 'a'])
>>> type(res)
<type 'tuple'>
>>>

Python看起来能返回多个返回值,但其实是一个元组,因为元组在语法上不需要一定带上圆括号。

所以表面上看上去是返回了多个值,实际上上述代码是组包和解包的过程,元组使用逗号打包,序列通过放置几个逗号分隔的目标到语句的左边来解包。

函数也是对象,可以被引用,可以作为函数的参数,可以作为容器对象的元素,如List, Dictionary等。

>>> def func():
...     print 'call func.'
...
>>> def foo(func):
...     func()
...
>>> foo(func)
call func.
>>>

函数参数:
参数的传递规则如下:

p  参数的传递是通过把对象赋值给局部的名字。

赋值在Python中就意味着引用。函数中的参数与调用者共同引用的同一个对象。

p  在函数内部中给参数赋值不会影响调用者。
p  在函数内部修改可变类型的参数会影响到调用者。

参数的行为可以与C语言进行类比:

p  不可变类型的参数的行为就像C语言的“by value”方式。

如参数是整数,字符串

p  可变类型的参数的行为就像C语言的“by pointer”方式。

如参数是列表

参数匹配的模式:

p  位置:位置匹配,从左到右
p  关键字:根据参数名进行匹配
p  可变参数:匹配任意多的参数
p  默认值:提供参数的默认值
Syntax  Location  Interpretation
func(value)  Caller  Normal argument: matched by position
func(name=value)  Caller  Keyword argument: matched by name
def func(name)  Function  Normal argument: matches any by position or name
def func(name=value)  Function  Default argument value, if not passed in the call
def func(*name)  Function  Matches remaining positional args (in a tuple)
def func(**name)  Function  Matches remaining positional args (in a dictionary)
规则:
p 默认参数必须在非默认参数之后
p  在单个函数定义中,只能使用一个tuple参数(*ARG)和一个字典参数(**ARG)
p  tuple参数必须在位置参数和默认参数之后
p  字典参数必须在最后定义

python函数是否支持重载?

重载(overload)的特点:

1、参数类型不同

2、参数个数不同

Python的动态类型+可变参数,天然就支持了重载的特性,而且不需要像C++那样去定义多个同名函数。动态类型的特性还让python函数具备了C++中函数模板的功能。

lambda表达式/匿名函数:

lambda [arg1[, arg2, … argN]]: expression

注意:表达式与参数以及lambda都必须在同一行。lambda 函数可以接收任意多个参数(包括 可选参数)并且返回单个表达式的值。lambda 函数不能包含命令,包含的表达式不能超过一个。不要试图向 lambda 函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。

>>> foo = lambda x,y:x+y
>>> foo(1,3)
4
>>> (lambda x,y:x+y)(5,4)
9
>>>

内嵌函数:在函数内部定义函数

在函数体内创建另外一个函数是合法的,内部函数整个函数体都在外部函数的作用域内,除了在函数体内,任何地方都不能对其进行调用

>>> def foo():
...     def inner():
...         print 'call inner.'
...     print 'call foo'
...     inner()
...
>>> foo()
call foo
call inner.
>>>

转载于:https://www.cnblogs.com/TonyZhao/p/3529213.html

Python基础(7) - 函数相关推荐

  1. python的用途实例-Python基础之函数原理与应用实例详解

    本文实例讲述了Python基础之函数原理与应用.分享给大家供大家参考,具体如下: 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体 ...

  2. Python基础之函数

    详情请戳 python基础之函数介绍及使用 python基础之内置函数 python基础之迭代器和生成器 python基础之装饰器 转载于:https://www.cnblogs.com/zhangl ...

  3. Python数据结构与算法(1.5)——Python基础之函数与异常

    Python数据结构与算法(1.5)--Python基础之函数与异常 0. 学习目标 1. 函数 1.1 自定义函数 1.2 函数与参数 1.3 函数与返回值 2. 异常处理 2.1 raise 语句 ...

  4. 刻意练习:Python基础 -- Task05. 函数与Lambda表达式

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

  5. Python基础__函数

    本节将进入函数的介绍,函数是Python基础中最精彩的部分之一,接下来将对函数做详细介绍. 函数 函数就是对代码进行一个封装.把实现某一功能的代码进行封装到一起.下次需要使用时不需要进行编写代码直接调 ...

  6. 『Python基础』函数

    Python中的函数 函数 (1)什么是函数? 软件开发,是为了解决生活中的问题,函数就是生活中的一种行为,如:吃饭.睡觉.学习.游戏等等等- 不需要资源.不需要结果.执行即可 关门的行为 需要资源. ...

  7. 第七篇 python基础之函数,递归,内置函数

    阅读目录 一 数学定义的函数与python中的函数 二 为何使用函数 背景提要 三 函数和过程 四 函数参数 五 局部变量和全局变量 六 前向引用之'函数即变量' 七 嵌套函数和作用域 八 递归调用 ...

  8. python入门之函数调用内置函数_第九篇 python基础之函数,递归,内置函数

    阅读目录 一 数学定义的函数与python中的函数 二 为何使用函数 背景提要 三 函数和过程 四 函数参数 五 局部变量和全局变量 六 前向引用之'函数即变量' 七 嵌套函数和作用域 八 递归调用 ...

  9. Python基础第六天——函数的使用、函数的参数、函数的返回值、函数的嵌套、命名空间、作用域、函数对象...

    一.拾遗 1.通常情况下无参函数只是进行操作,所以不需要返回值:有参数函数则需要返回值. 2.练习: 判断用户输入一串字符,如果这串字符的长度小于5则重新输入,如果大于5则退出循环. while Tr ...

  10. python基础学习——函数和方法的区别与联系

    以下是综合多家说法的个人理解总结,仅为做到理解它们的区别与联系,不保证严谨. 函数 函数是封装了一些独立的功能,可以直接调用,python内置了许多函数,同时可以自建函数来使用. 独立的函数是函数(像 ...

最新文章

  1. 企业信息门户与办公自动化的集成应用
  2. kafka安装及Kafka-PHP扩展的使用
  3. JavaScript中几个优雅的运算符使用技巧
  4. thymeleaf 学习笔记
  5. MSF(二):msf外部/内部常用命令
  6. TensorFlow自带例子已经包含了android和ios下的摄像头图像分类示例Inception v1,这里补充一个Windows下的,使用AForge库(www.aforgenet.com)操作
  7. STL源码剖析学习二:空间配置器(allocator)
  8. STM32——SPI接口
  9. 1012 The Best Rank (25)
  10. java对日开发好跳槽么_国内 Java 开发者必备的两个装备,你配置上了么?
  11. 升级Exchange server 2010 SP1至SP3版本相关问题解决方法
  12. c 更新mysql数据_MySQL插入更新删除数据
  13. HUE与Mysql的集成
  14. 计算机java二级 netbeans 安装使用方法
  15. brctl 设置ip_Linux网桥配置命令:brctl
  16. 安卓开发使用ttf文字_Android应用使用自定义字体
  17. 单片机c语言百分号是什么意思,请教:数组表达式的百分号和分号含义是什么?...
  18. craftsmanship中文_中英文常用广告套语
  19. 服务器共享cad修改不了,CAD图纸打开后无法编辑无法修改怎么办
  20. RTSP协议网络摄像头互联网无插件直播EasyNVR+EasyNVS,如何保持配置地址一致?

热门文章

  1. Angular实现购物车计算
  2. react-native环境配置——Android工程搭建
  3. SQL SERVER 之 填充因子
  4. Javascript 使用Qunit单元测试
  5. android 2.3 webView select控件 无法及时显示optionLabel的BUG
  6. 解析接口中的JSON数据
  7. 分布式爬虫原理之Scrapy分布式实现
  8. Eclipse \ MyEclipse \Scala IDEA for Eclipse里如何将控制台console输出的过程记录全程保存到指定的文本文件(图文详解)...
  9. 关于网页内容加速黑科技的趣谈
  10. ARM入门笔记(4)