Python3基础之函数用法
作者:shichen2014 发布时间:2021-12-22 08:38:43
一般来说,函数(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__)
文档字符串主要用于描述一些关于函数的信息,让用户交互地浏览和输出。建议养成在代码中添加文档字符串的好习惯。
猜你喜欢
- min()方法返回它的参数最小值:最接近负无穷大的值。语法以下是min()方法的语法:min( x, y, z, .... )参
- 什么是索引拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为
- 如下所示:#coding=utf-8import sys, re, osdef getDictList(dict): regx
- 本文实例讲述了Go语言实现AzDG可逆加密算法。分享给大家供大家参考。具体实现方法如下:package mainimport (
- 如果有人问你,对查询执行EXPLAIN是否可以改变你的数据库,你可能会说不会; 通常都是这么认为的。EXPLAIN应该向我们展示查询是如何执
- 为什么Python中0.2+0.1不等于0.3大家请看下面的python程序代码:print(0.2+0.1)猜一猜运行结果是什么,是0.3
- count()方法返回obj出现在列表的次数。语法以下是count()方法的语法:list.count(obj)参数
- 前言最近将使用爬虫爬取的链接保存到 mysql 数据库中时,发现我将链接使用 json_encode 保存时候,在数据库中却显示了转义字符,
- 目录一、Python 异常处理:错误与异常1、什么是错误?2、什么是异常?二、如何使用 Try-Except 处理异常?1、什么是 Try-
- 1、说明tqdm是一个方便且易于扩展的Python进度条,可以在python执行长循环时在命令行界面实时地显示一个进度提示信息,包括执行进度
- 图的定义图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E
- 前言全局共享内存则主要是 MySQL Instance(mysqld进程)以及底层存储引擎用来暂存各种全局运算及可共享的暂存信息,如存储查询
- 数据类型优化首先我们介绍一下这个schema:schema(发音 “skee-muh” 或者&
- datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1.da
- 关于使用CTE(公用表表达式)的递归查询----SQL Server 2005及以上版本公用表表达式 (CTE) 具有一个重要的优点,那就是
- 建议先看vue瀑布流组件上拉加载更多再来食用本文,如果直接想看源码文末就是~文末新增组件优化,之所以没有删优化前的代码是想让以后自己还能看到
- 导语小伙伴们大家好~如今的游戏可谓是层出不穷,NBA 2K系列啊,FIFA系列啊更是经典中的经典,不过小编发现,赛车游戏也是深受大家欢迎啊,
- 很多时候我们在使用ThinkPHP配置网站前台和网站后台的数据库连接时,往往都是分别在前台的配置文件和后台的配置文件单独都写了配置的。但是有
- selenium关闭窗口有两个方法,close与quit,我们稍作研究便知道这两个方法的区别。1.看源码或API这是close()的说明:C
- 背景上周公司培训了MySQL replication, 这个周末打算用所学来实践操作一下。Master server:MySQL conta