Python3基础之函数用法


Posted in Python onAugust 13, 2014

一般来说,函数(function)是组织好的、可重复使用的、具有一定功能的代码段。函数能提高应用的模块性和代码的重复利用率,在Python中已经提供了很多的内建函数,比如print(),同时Python还允许用户自定义函数。

本文就来实例总结一下Python3的函数用法,具体内容如下:

一、定义

定义函数使用关键字def,后接函数名和放在圆括号( )中的可选参数列表,函数内容以冒号起始并且缩进。一般格式如下:

def 函数名(参数列表): 
  """文档字符串""" 
  函数体 
  return [expression]

注意:参数列表可选,文档字符串可选,return语句可选。

示例:

def fib(n): 
  """Print a Fibonacci series""" 
  a, b = 0, 1 
  while b < n: 
    print(b, end=' ') 
    a, b = b, a+b 
  print() 
 
fib(2000) # call 
f = fib  # assignment 
f(2000)

函数名的值是一种用户自定义的函数类型。函数名的值可以被赋予另一个名字,使其也能作为函数使用。

二、函数变量作用域

在函数内部定义的变量拥有一个局部作用域,在函数外定义的拥有全局作用域。注意:在函数内部可以引用全局变量,但无法对其赋值(除非用global进行声明)。

a = 5     # 全局变量a 
 
def func1(): 
  print('func1() print a =', a) 
 
def func2(): 
  a = 21  # 局部变量a 
  print('func2() print a =', a)  
 
def func3(): 
  global a 
  a = 10  # 修改全局变量a 
  print('func3() print a =', a) 
 
func1() 
func2() 
func3() 
print('the global a =', a)

三、函数调用

1、普通调用

与其他语言中函数调用一样,Python中在调用函数时,需要给定和形参相同个数的实参并按顺序一一对应。

def fun(name, age, gender): 
  print('Name:',name,'Age:',age,'Gender:',gender,end=' ') 
  print() 
 
fun('Jack', 20, 'man') # call

2、使用关键字参数调用函数

函数也可以通过keyword=value 形式的关键字参数来调用,因为我们明确指出了对应关系,所以参数的顺序也就无关紧要了。

def fun(name, age, gender): 
  print('Name:',name,'Age:',age,'Gender:',gender,end=' ') 
  print() 
 
fun(gender='man', name='Jack', age=20) # using keyword arguments

3、调用具有默认实参的函数

Python中的函数也可以给一个或多个参数指定默认值,这样在调用时可以选择性地省略该参数:

def fun(a, b, c=5): 
  print(a+b+c) 
 
fun(1,2) 
fun(1,2,3)

注意:通常情况下默认值只被计算一次,但如果默认值是一个可变对象时会有所不同, 如列表, 字典, 或大多类的对象时。例如,下面的函数在随后的调用中会累积参数值

def fun(a, L=[]): 
  L.append(a) 
  print(L) 
 
fun(1) # 输出[1] 
fun(2) # 输出[1, 2] 
fun(3) # 输出[1, 2, 3]

4、调用可变参数函数

通过在形参前加一个星号(*)或两个星号(**)来指定函数可以接收任意数量的实参。

def fun(*args): 
  print(type(args)) 
  print(args) 
 
fun(1,2,3,4,5,6) 
 
# 输出: 
# <class 'tuple'> 
# (1, 2, 3, 4, 5, 6) 

def fun(**args): 
  print(type(args)) 
  print(args) 
 
fun(a=1,b=2,c=3,d=4,e=5) 
 
# 输出: 
# <class 'dict'> 
# {'d': 4, 'e': 5, 'b': 2, 'c': 3, 'a': 1}

从两个示例的输出可以看出:当参数形如*args时,传递给函数的任意个实参会按位置被包装进一个元组(tuple);当参数形如**args时,传递给函数的任意个key=value实参会被包装进一个字典(dict)。

5、通过解包参数调用函数

上一点说到传递任意数量的实参时会将它们打包进一个元组或字典,当然有打包也就有解包(unpacking)。通过 单星号和双星号对List、Tuple和Dictionary进行解包:

def fun(a=1, b=2, c=3): 
  print(a+b+c) 
 
fun()  # 正常调用 
list1 = [11, 22, 33] 
dict1 = {'a':40, 'b':50, 'c':60} 
fun(*list1)  # 解包列表 
fun(**dict1) # 解包字典 
 
# 输出: 
# 6 
# 66 
# 150

注:*用于解包Sequence,**用于解包字典。解包字典会得到一系列的key=value,故本质上就是使用关键字参数调用函数。

四、lambda表达式

lambda关键词能创建小型匿名函数。lambda函数能接收任何数量的参数但只能返回一个表达式的值,它的一般形式如下:

lambda [arg1 [,arg2,.....argn]] : expression

lambda表达式可以在任何需要函数对象的地方使用,它们在语法上被限制为单一的表达式:

f = lambda x, y: x+y 
print(f(10, 20)) 

def make_fun(n): 
  return lambda x: x+n 
 
f = make_fun(15) 
print(f(5))

五、文档字符串

函式体的第一个语句可以是三引号括起来的字符串, 这个字符串就是函数的文档字符串,或称为docstring 。我们可以使用print(function.__doc__)输出文档:

def fun(): 
  """Some information of this function. 
  This is documentation string.""" 
  return 
 
print(fun.__doc__)

文档字符串主要用于描述一些关于函数的信息,让用户交互地浏览和输出。建议养成在代码中添加文档字符串的好习惯。

Python 相关文章推荐
Python编程之序列操作实例详解
Jul 22 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
Django ORM多对多查询方法(自定义第三张表&amp;ManyToManyField)
Aug 09 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
pytorch 求网络模型参数实例
Dec 30 Python
Pytorch 多块GPU的使用详解
Dec 31 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
Python编写memcached启动脚本代码实例
Aug 14 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
Django框架中视图的用法
Jun 10 Python
Python3基础之条件与循环控制实例解析
Aug 13 #Python
Python3基础之基本运算符概述
Aug 13 #Python
Python3基础之list列表实例解析
Aug 13 #Python
Python3基础之基本数据类型概述
Aug 13 #Python
Python常用正则表达式符号浅析
Aug 13 #Python
wxpython中利用线程防止假死的实现方法
Aug 11 #Python
将图片文件嵌入到wxpython代码中的实现方法
Aug 11 #Python
You might like
PHP简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
python计算圆周率pi的方法
2015/07/11 Python
Python argparse模块应用实例解析
2019/11/15 Python
python中entry用法讲解
2020/12/04 Python
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
英语道歉信范文
2014/01/09 职场文书
淘宝中秋节活动方案
2014/01/31 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
竞选部长演讲稿
2014/04/26 职场文书
法制宣传月活动总结
2014/04/29 职场文书
社区先进事迹材料
2014/05/19 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
开学第一周值周总结
2015/07/16 职场文书
采购部年度工作总结
2015/08/13 职场文书