【Python学习笔记】第八章 函数
【Python学习笔记】第八章 函数
文章目录
- 【Python学习笔记】第八章 函数
- 前言
- 8.1 定义函数
- 8.2 调用函数
- 8.2.1 使用位置参数调用函数
- 8.2.2 使用关键字参数调用函数
- 8.3 参数的默认值
- 8.4 可变参数
- 8.4.1 基于元组的可变参数(*可变参数)
- 8.4.2 基于字典的可变参数(**可变参数)
- 8.5 函数中变量的作用域
- 8.6 函数类型
- 8.6.1 理解函数类型
- 8.6.2 过滤函数filter()
- 8.6.3 映射函数map()
- 8.7 lambda()函数
- 待更新lambda()几个好的例子
- 总结
前言
在程序反复执行的某些代码,可以使用函数来封装。函数具有 函数名 、 参数和返回值 。Python中的函数很灵活:可以在模块中但是类之外的定义,作用域是当前模块,我们称为函数; 也可以在别的函数中定义,我们称之为嵌套函数 ; 还可以在类中定义。
8.1 定义函数
自定义函数的语法格式如下:
def 函数名(形式参数列表):函数体return 返回值
注意事项:1. 缩进一般采用四个空格,2. 如果没有数据返回可以省略 return
语句
Q: 什么是形式参数?
A: 由于定义函数时的参数不是实际数据,会在调用函数时传递给他们实际数据,所以我们称定义函数时的参数为 形式参数 ,简称 形参 ;称调用函数时传递的实际数据为 实际参数 ,简称 实参 。可以将形式参数理解为函数中定义的变量。
实例代码:
def rect_area(width , height):area = width * heightreturn areadef print_area(width , height):area = width * heightprint("{0} X {1} 长方形的面积:{2}".format(width , height , area))
8.2 调用函数
在定义好函数后,就可以调用函数了。
8.2.1 使用位置参数调用函数
在调用函数时传递的实参与定义函数时的形参顺序一致,这就是调用函数的基本目的。
代码示例:
def rect_area(width , height): # 形参列表area = width * heightreturn arear_area = rect_area(220 , 440) # 调用函数,实参列表,顺序与形参一致
print("{0} X {1} 长方形的面积为: {2}".format(220 , 440 , r_area))-----输出:-----
>>>
===== RESTART: /Users/starkk/Downloads/8_2_1.py ====
220 X 440 长方形的面积为: 96800
8.2.2 使用关键字参数调用函数
在调用函数时可以采用 关键字 = 实参
的形式 ,其中关键字的名称就是自定义函数时形参的名称。
def rect_area(width , height):area = width * heightreturn arear_area = rect_area(width = 220 , height = 330) # 关键字的名称就是定义函数的名称
print("{0} X {1} 长方形面积是{2:.2f}".format(220 , 330 , r_area))r_area = rect_area(height = 220 , width = 330) # 实参不受形参的顺序影响
print("{0} X {1} 长方形面积是{2:.2f}".format(220 , 330 , r_area))-----输出-----
>>>
===== RESTART: /Users/starkk/Downloads/8_2_1.py ====
220 X 330 长方形面积是72600.00
220 X 330 长方形面积是72600.00
使用关键字参数调用函数时,调用者能很好很清晰的看出传递参数的含义,提高函数调用的可读性。
8.3 参数的默认值
函数重载会增加代码量,所以在Python中没有函数重载的概念,而是为函数的参数提供默认值实现的。
def play_sport( name = '羽毛球'): # 默认值return '我们一起去玩{0}'.format(name)sport1 = play_sport(name = '巴西柔术') # 提供参数
sport2 = play_sport() # 没有提供参数,使用默认值print(sport1)
print(sport2)-----输出-----
>>>
===== RESTART: /Users/starkk/Downloads/8_2_1.py ====
我们一起去玩巴西柔术
我们一起去玩羽毛球
8.4 可变参数
Q: 当我们使用
format()
格式化字符串的方法时,可以有1个参数也可以传递3个参数。WHY?
print("{0} X {1} 长方形面积是{2:.2f}".format(220 , 330 , r_area))
print("{0} X {1} 长方形面积是{2:.2f}".format(220 , 330 , r_area))
A: Python中的函数可以定义接受不确定数量多的参数,这种参数称为可变参数。可变参数有两种,在参数前面加
*
或者**
。
8.4.1 基于元组的可变参数(*可变参数)
*可变参数在函数中被组装成一个元组
实例代码:
def sum(*numbers): # 可变参数total = 0.0for i in numbers:total += ireturn totalprint(sum(100.0 , 200.0 , 456.789)) # 多个参数被组装成元组numbers
print(sum(122.345 , 222.333)) # 多个参数被组装成元组numbers-----输出-----
>>>
===== RESTART: /Users/starkk/Downloads/8_2_1.py ====
756.789
344.678
8.4.2 基于字典的可变参数(**可变参数)
** 可变参数在函数中被组装成一个字典
实例代码:
def show_info(**info): # 可变参数print('-----show info-----')for key , value in info.items():print('{0} ---{1}'.format(key , value))show_info(name = 'starkk' , age = '21' , handsome = True)
show_info(SID = '77z11' , Unikey = 'handsome1234' , studdent_hobby = 'badminton')-----输出-----
>>>
===== RESTART: /Users/starkk/Downloads/8_2_1.py ====
-----show info-----
name ---starkk
age ---21
handsome ---True
-----show info-----
SID ---77z11
Unikey ---handsome1234
studdent_hobby ---badminton
注意点:
show_info(name = 'starkk' , age = '21' , handsome = True)
多个参数被组装成info,字典的键是name
,age
,handsome
,字典的值是'starkk'
,'21'
,True
show_info(SID = '77z11' , Unikey = 'handsome1234' , studdent_hobby = 'badminton')
多个参数被组装成字典info, 字典的键是SID
,Unikey
,student_hobby
,字典的值是'77z11'
,'handsome1234'
,'badminton'
8.5 函数中变量的作用域
变量可以在模块中创建,作用域(变量的有效范围)是整个模块,称为全局变量。变量也可以在函数中创建,在默认情况下作用域是整个函数,被称为局部变量。
代码示例:
x = 20 # 在模块中定义变量x , 作用域是整个模块def print_value():x = 10 # 在模块中定义变量x , 作用域是整个函数,它会屏蔽模块变量xprint("函数中 x = {0}".format(x))print_value()
print("全局变量 x = {0}".format(x))-----输出结果-----
>>>
===== RESTART: /Users/starkk/Downloads/8_2_1.py ====
函数中 x = 10
全局变量 x = 20
小提示: 一般情况下尽量不要在模块和函数中定义两个相同名变量,但是他们两个是不同的变量,因为会发生冲突,函数中的同名变量会屏蔽模块中的同名变量。对于在模块和函数中各定义的一个同名变量,如果在函数中将其声明为global
,则会将函数中的这个同名变量提升为全局变量。
实例代码
x = 20def print_value():global x # 将函数的x变量提升为全局变量xx = 10 # 全局变量提升为10print("函数中 x = {0}".format(x))print_value()
print("全局变量 x = {0}".format(x))-----输出结果-----
>>>
===== RESTART: /Users/starkk/Downloads/8_2_1.py ====
函数中 x = 10
全局变量 x = 10
8.6 函数类型
Python中的任意一个函数都有数据类型,这种数据类型是
function
,被称为函数类型。
8.6.1 理解函数类型
函数类型的数据与其他类型的数据是一样的,任意类型的数据都可以作为函数返回值使用,还可以作为函数参数使用,因此一个函数可以作为另一个函数的返回值使用,也可以作为另一个函数的参数使用。
def add(a , b):return a + b # 返回两数之和def sub(a , b):return a - b # 返回两数之差def calc(opr): # 返回function数据类型,即另一个函数add()或sub()if opr == '+':return addelse:return sub# 调用calc()函数返回数据f1 ,f1实际上是add()函数
f1 = calc('+') #f1实际上是add()函数
f2 = calc('-') #f2实际上是sub()函数
print("10 + 5 = {0}".format(f1(10 , 5))) # f1(10 ,5) 是调用f1指向的add()函数,相当于调用add(10 , 5)
print("10 - 5 = {0}".format(f2(10 , 5)))-----输出结果-----
>>>
===== RESTART: /Users/starkk/Downloads/8_2_1.py ====
10 + 5 = 15
10 - 5 = 5
小提示: 以上3个函数虽然都是函数类型,但是在细节方面还是有很大区别的, 这个区别主要是函数参数列表。有两个参数的函数和有1个参数的函数是不同的函数类型。
实例代码
# 定义加法函数
def add(a , b):return a + b# 定义减法函数
def sub(a , b):return a - b# 定义平方函数
def square(a):return a * a
小提示: add()
和 sub()
函数有两个数字参数,具有相同的函数类型。square()
函数只有一个数字参数,所以 square()
与 add()
、sub()
函数的类型不同。
8.6.2 过滤函数filter()
在Python中定义了一些用于数据处理的函数,如
filter()
和map()
等。
filter()
函数用于对容器中的元素进行过滤处理,filter()
函数的语法如下:
filter(function , iterable)
参数function
是一个提供过滤条件的函数,返回布尔值。参数iterable
是容器类型的数据。
# 提供过滤条件函数
def f1(x):return x > 50 # 找出大于50 元素data1 = [66 , 15 , 91 , 28 , 98 , 50 , 7 , 80 , 99]
filitered = filter(f1 , data1)
data2 = list(filitered) #转换列表
print(data2)-----输出结果-----
>>>
===== RESTART: /Users/starkk/Downloads/8_2_1.py ====
[66, 91, 98, 80, 99]
注意: filter()
函数的返回值并不是一个列表,如果需要返回列表类型数据,则通过list() 函数进行转换。
8.6.3 映射函数map()
map()
函数用于对容器中的元素进行映射(或者转换),map()
函数的语法如下:
map(function , iterable)
参数function
是一个提供变换规则的函数,返回变换之后的元素。参数iterable
是容器类型数据。
#提供变换规则的函数
def f1(x):return x * 2 # 变换规则乘以2data1 = [66 , 15 , 91 , 28 , 98 , 50 , 7 , 80 , 99]
mapped = map(f1 , data1)
data2 = list(mapped) # 转换为列表
print(data2)-----输出结果-----
>>>
===== RESTART: /Users/starkk/Downloads/8_2_1.py ====
[132, 30, 182, 56, 196, 100, 14, 160, 198]
8.7 lambda()函数
我们之前学习的函数都是有名称的函数,例如
rect_area()
函数,rect_area
就是其函数名。我们也可以定义匿名函数,匿名函数就是没有名称的函数。
在Python中使用lambda
关键字定义匿名函数。lambda
关键字定义的函数也被称为lambda()
函数。语法如下:
“参数列表”与函数的参数列表是一样的,但不需要用小括号括起来。
lambda 参数列表: lambda体
注意: lambda体
部分不能是一个代码块,不能包含多条语句,只有一条语句,语句会计算一个结果并返回给lambda()
函数,但与有名称的函数不同的是,不需要使用return
语句返回。
代码示例:
def calc(opr):if opr == '+':return lambda a , b :(a + b)else:return lambda a , b :(a - b)f1 = calc('+')
f2 = calc('-')print("10 + 5 = {0}".format(f1(10 ,5)))
print("10 - 5 = {0}".format(f2(10 ,5)))-----输出结果-----
>>>
===== RESTART: /Users/starkk/Downloads/8_2_1.py ====
10 + 5 = 15
10 - 5 = 5
待更新lambda()几个好的例子
总结
加油小伙伴们,集美们。
【Python学习笔记】第八章 函数相关推荐
- Python学习笔记11:函数修饰符
Python学习笔记11:函数修饰符 Python有很多有趣的特性,其中函数修饰符就是一个. 我们在之前的那个web应用示例中用过如下写法: @web.route('/log') @符号后边的,就是一 ...
- python学习笔记之自定义函数
live long and prosper 自定义函数 def greet_user():"""现实简单的问候语"""print(" ...
- 深度之眼 - Python学习笔记——第八章 文件、异常和模块
第八章 文件.异常和模块 实际应用中,我们绝大多数的数据都是通过文件的交互完成的 8.1 文件的读写 8.1.1 文件的打开 文件的打开通用格式 with open("文件路径", ...
- Python学习笔记:返回函数
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记7:函数对象及函数对象作參数
一.lambda函数 比如: fun1 = lambda x,y: x + y print fun1(3,4) 输出:7 lambda生成一个函数对象.该函数參数为x,y,返回值为x+y.函数对象赋给 ...
- Python学习笔记---理解zip()函数
转载自Python零碎知识(2):强大的zip 一.代码引导 首先看这一段代码: 1 >>> name=('jack','beginman','sony','pcky')2 > ...
- python学习笔记10-匿名函数lambda
匿名函数lambda 定义匿名函数 lambda def fun(x,y): return x*y r=lambda x,y: x*y r(3,4) In [2]: r = lambda x, y: ...
- [Python学习笔记][第八章Python异常处理结构与程序调试]
1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try:try块 except Exception:except块 try-except-else结构 try: ...
- Python学习笔记之eval函数简析
一个最基本的eval()函数的格式应该如下: >>> command = 'print(\'Hello world!\')' >>> eval(command) H ...
- python学习笔记:插入函数append,extend与insert的使用与区别
python中的几个插入函数: append( )函数 函数功能:append( )函数是在列表末尾添加新的对象. 易错点:使用 append() 函数添加列表时,是添加列表的「引用地址」而不是 ...
最新文章
- java date只保留年月日_Java日期时间API系列14-----Jdk8中日期API类,日期计算1,获取年月日时分秒等...
- python 文件获取绝对路径
- PHP代码审计基础手册
- 8.了解如何把vector和string数据传给旧的API
- python脚本式编程_Python编程入门(一)
- python3 image_python3 ImageTk 安装方法
- Linux oracle(常用命令)启动、停止、监听
- CentOS安装nextcloud-17.0.0
- Linux命令之sed使用入门概述
- GitLab CI/CD实践
- [导入]从飞信到SNS,中国移动进军互联网之路,悬乎
- 经典算法-(一)汉诺塔(河内之塔)
- 易优CMS插件大全-采集翻译发布插件
- 网页服务器阿帕奇怎么启动服务,阿帕奇服务器使用教程
- x.264编译问题合集
- 拳头产品|海泰虎讯,新一代安全即时通讯系统
- 电脑重装系统后无法上网怎么办
- 计算机mc代表什么意思6,我的世界:萌新无法理解的6个老梗,唯老MC才懂!你能看懂几个?...
- 《文明3》全攻略之设置篇
- Linux电脑睡眠后黑屏打不开,Win10系统下电脑休眠或睡眠无法唤醒屏幕黑屏打不开的解决方法...