A Byte of Python 笔记(5)函数:定义、形参、局部变量、默认参数、关键参数
第7章 函数
函数是重要的程序段。它们允许你给一块语句一个名称,然后你可以在程序的任何地方使用这个名称任意多次地运行这个语句块。这被称为 调用 函数。
定义函数
函数通过 def 关键字定义。def 关键字后跟一个函数的 标识符 名称,然后跟一对圆括号。圆括号中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,它们是函数体。
# -*- coding:utf-8 –*-
# Filename: function1.py def sayHello():
print 'Hello World!!!' sayHello()
以上定义了一个名为 sayHello 的函数,该函数不使用任何参数,圆括号中没有声明任何变量。参数对于函数而言,只是给函数的输入,便于用户传递不同的值给函数,然后得到相应的结果。
函数形参
函数获取的参数即用户提供给函数的值。这些参数像变量一样,只不过这些值在用户调用函数的时候定义,而非在函数本身赋值。
参数在函数定义的圆括号内指定,用逗号分割。用户调用函数时,以同样的方式提供值。
注意:函数中的参数名称为 形参,而用户提供给函数调用的值称为 实参。
# -*- coding: utf-8 –*-
# Filename: func_param.py
def printMax(a, b):
if a > b:
print a, 'is Maximum'
else:
print b, 'is Maximum' printMax(3,4) x = 5
y = 7
printMax(x, y)
以上定义了一个名为 printMax 的函数,该函数有两个形参 a、b。
第一个 printMax 中,我们直接把数,即实参,传递给函数;
第二个 printMax 中,我们使用变量调用函数;printMax(x, y) 把实参 x 的值赋值给形参 a,实参 y 的值赋值给形参 b。
两次调用中,printMax 函数的工作完全相同。
局部变量
当用户在函数定义内声明变量的时候,它们与函数外同名的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的 作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。
# -*- coding:utf-8 _*_
# Filename: func_local.py def func(x):
print 'x is', x
x = 2
print 'Changed local x to', x x = 50
print func(x)
print 'x is still', x
在函数中,我们第一次使用 x 的 值 的时候,Python 使用函数声明的形参的值。
接下来,我们把值 2 赋给 x。x 是函数的局部变量。所以,当我们在函数内改变 x 的值的时候,在主块中定义的 x 不受影响。
使用 global 语句
如果你想要为一个定义在函数外的变量赋值,那么你就得告诉 Python 这个变量名不是局部的,而是 全局的。我们使用 global 语句完成这一功能。没有 global 语句,是不可能为定义在函数外的变量赋值的。
使用 global 语句可以清楚地表明变量是在外面的块定义的。
# -*- coding: utf-8 -*-
# Filename: func_global.py def func():
global x print 'x is', x
x = 2
print 'Changed local x to', x x = 50
func()
print 'Value of x is', x
global 语句被用来声明 x 是全局的——因此,当我们在函数内把值赋给 x 的时候,这个变化也反映在我们在主块中使用 x 的值的时候。
你可以使用同一个 global 语句指定多个全局变量。例如 global x, y, z。
默认参数值
对于一些函数,用户可能希望它的一些参数是 可选 的,如果用户没有为这些参数提供值,这些参数就使用默认值。这个功能借助于默认参数值完成。你用户可以在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值。
注意,默认参数值应该是一个参数。更加准确的说,默认参数值应该是不可变的。
# -*- coding: utf-8 -*-
# Filename: func_default.py def say(message, times = 1):
print message * times say('hello')
say('world', 5)
名为say的函数用来打印一个字符串任意所需的次数。如果不提供一个值,那么默认地,字符串将只被打印一遍。我们通过给形参 times 指定默认参数值 1 来实现这一功能。
在第一次使用 say 的时候,我们只提供一个字符串,函数只打印一次字符串。在第二次使用 say 的时候,我们提供了字符串和参数 5,表明我们想要 说 这个字符串消息 5 遍。
重要 只有在形参表末尾的那些参数可以有默认参数值,即不能在声明函数形参的时候,先声明有默认值的形参,后声明没有默认值的形参。这是因为赋给形参的值是根据位置而赋值的。 例如,def func(a, b=5)是有效的,但是def func(a=5, b)是 无效 的。 |
关键参数
如果某个函数有许多参数,而用户只想指定其中的一部分,那么可以通过 命名 来为这些参数赋值——称作 关键参数 ——使用名字(关键字)而不是位置来给函数指定实参。
优势有两个:
一,由于我们不必担心参数的顺序,使用函数变得更加简单了。
二、假设其他参数都有默认值,我们可以只给我们想要的那些参数赋值。
# -*- coding: utf-8 -*-
# Filename: func_key.py def func(a, b=5, c=10):
print 'a is', a, 'and b is', b, 'and c is', c func(3, 7)
func(25, c=24)
func(c=50, a=100)
名为 func 的函数有一个没有默认值的参数,和两个有默认值的参数。
第一次使用函数 func(3, 7) 时, 根据实参位置为 a、b 赋值,而参数 c 使用默认值10。
第二次使用函数 func(25, c=24) 时,根据实参的位置变量 a 得到值 25。根据命名,即关键参数,参数 c 得到值 24。变量 b 根据默认值,为5。
第三次使用 func(c=50, a=100) 时,使用关键参数来完全指定参数值。注意,尽管函数定义中,a 在 c 之前定义,我们仍然可以在 a 之前指定参数 c 的值。
return 语句
return 语句用来从一个函数 返回 ,即跳出函数。我们也可从函数 返回一个值 。
# -*- coding: utf-8 -*-
# Filename: func_return.py def maximum(x, y):
if x > y:
return x
else:
return y print maximum(8, 5)
注意,没有返回值的 return 语句等价于 return None。None 是 Python 中表示没有任何东西的特殊类型。例如,如果一个变量的值为 None,可以表示它没有值。
除非你提供你自己的 return 语句,每个函数都在结尾暗含有return None语句。通过运行 print someFunction(),返回 None,函数 someFunction 没有使用 return 语句,如下:
def someFunction():
pass
pass语句在Python中表示一个空的语句块。
DocStrings
Python 有一个很奇妙的特性,称为 文档字符串 ,它通常被简称为 docstrings 。DocStrings 是一个重要的工具,它可以使程序文档更加简单易懂,建议使用。你甚至可以在程序运行的时候,从函数恢复文档字符串!
# -*- coding: utf-8 -*-
# Filename: func_doc.py def printMax(x, y):
'''Prints the maximum of two numbers. The two values must be integers.''' x = int(x) # convert to integers, if possible
y = int(y) if x > y:
print x, 'is maximum'
else:
print y, 'is maximum' printMax(5, 7)
print printMax.__doc__
函数的第一个逻辑行的字符串是这个函数的 文档字符串 。注意,DocStrings也适用于模块和类。
文档字符串的惯例是一个多行字符串。首行以大写字母开始,句号结尾;第二行是空行;从第三行开始是详细的描述。 强烈建议 在函数中使用文档字符串时遵循。
DocStings 作用:抓取函数的__doc__属性,然后整洁地展示给你。
在程序中包括 help(printMax),按 q 退出 help。
自动化工具也可以以同样的方式从你的程序中提取文档。
A Byte of Python 笔记(5)函数:定义、形参、局部变量、默认参数、关键参数的更多相关文章
- Python:笔记(2)——函数与模块
Python:笔记(2)——函数与模块 Python函数 关于函数 1.我们可以使用Help来查看函数的帮助信息 2.调用函数的时候,如果传入的参数数量或者类型不符合均会报错. 3.函数名其实就是一个 ...
- python简单的函数定义和用法实例
python简单的函数定义和用法实例 这篇文章主要介绍了python简单的函数定义和用法,实例分析了Python自定义函数及其使用方法,具有一定参考借鉴价值,需要的朋友可以参考下 具体分析如下: 这里 ...
- python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程
python学习7—函数定义.参数.递归.作用域.匿名函数以及函数式编程 1. 函数定义 def test(x) # discription y = 2 * x return y 返回一个值,则返回原 ...
- 第7.23节 Python使用property函数定义属性简化属性访问的代码实现
第7.23节 Python使用property函数定义属性简化属性访问的代码实现 一. 背景 在本章前面章节中,我们介绍了类相关的知识,并举例进行了说明,在这些例子中会定义一些形如 ...
- Python使用property函数定义的属性名与其他实例变量重名会怎么样?
首先如果定义的属性名与该属性对应的操作方法操作的实例对象同名就会触发无穷的递归调用,相关部分请参考<Python案例详解:使用property函数定义与实例变量同名的属性会怎样?> 但如果 ...
- Python使用property函数定义属性访问方法如果不定义fget会怎么样?
我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...
- C语言怎么给函数添加形参的默认值
以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16637890.html 如果不是机缘巧合,当年转到C++ ...
- A Byte of Python 笔记(12)python 标准库:sys、os,更多内容
第14章 python 标准库 Python标准库是随Python附带安装的,它包含大量极其有用的模块. sys 模块 sys 模块包含系统对应的功能.如 sys.argv 列表包含命令行参数. # ...
- A Byte of Python 笔记(9) 面向对象编程
第11章 面向对象编程 面向过程:根据操作数据的函数或语句块来设计程序. 面向对象(OOP, object-oriented programming):把数据和功能结合起来,用对象包裹组织程序. 类 ...
随机推荐
- 浅谈API设计
为什么需要了解一些API设计? 只要你编程,你就是API Designer 一个好的设计,模块之间的耦合应该也是API级别的 一个程序,如果你独立开发,那你既是API的Designer,也是API的U ...
- 为什么没有好用的Android游戏引擎?
随着Android平台的不断发展,最近Android开发人员数量呈现出上升势头,就连以往较为冷门的游戏开发领域也涌现出不少生力军.然而,全新的问题正摆在了刚開始学习的人面前,非常多他们从未遇过的问题開 ...
- JavaScript奇技淫巧45招
JavaScript奇技淫巧45招 撰写于 2015年1月5日 修改于 2016年6月16日 分类 翻译 标签 JavaScript 本文是一篇翻译文章,原文信息如下: 原文:45 Useful Ja ...
- PHP删除HTMl标签
/** * 取出html标签 * * @access public * @param string str * @return string * */ function deletehtml($str ...
- 给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
题目:给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X 思路一: 1,先采用归并排序对这个数组排序, 2,然后寻找相邻<k,i>的两数之和sum,找到恰好sum>x的 ...
- SQL Server JDBC驱动中sqljdbc和sqljdbc4区别
为了支持向后兼容以及可能的升级方案,JDBC Driver 2.0 在每个安装包中都包括 2 个 JAR 类库:sqljdbc.jar 和 sqljdbc4.jar. qljdbc.jar 类库提供对 ...
- java web简易网上书店项目系列,使用MVC模式(servlet+jstl+dbutils),开篇
一. 针对很多java web初学者入门困难的问题,笔者利用一个小型web项目,一步一步的展示java web开发方法,每一个章节引入一些java web开发的重点知识,让同学们可以将java web ...
- 常用的Linux操作命令(一)
ls 目录 mkdir 创建文件夹 vi 新建文件 :w filename 将文章存入指定的文件名filename :wq 保存并退出编辑文件 :q! 强制离开并放弃编辑的文件 cd 切换到目录/ro ...
- Django Web开发【2】Django入门
配置开发环境 1.安装Python,我使用的是centos 6.0,python版本为2.6.6 2.安装Django,Django版本为1.3.5 在Django官网下载对应版本之后,解压压缩包,进 ...
- robot framework环境搭建和简单示例
环境搭建 因为我的本机已经安装了python.selenium.pip等,所以还需安装以下程序 1.安装wxPythonhttp://downloads.sourceforge.net/wxpytho ...