【第五章-基础】Python 函数---以一个初学者来理解函数
目录
5.函数
5.1创建函数、作用域
5.2 传递参数
5.3 返回值
5.4 匿名函数(lambda)
5.5 函数模块
5.函数
5.1创建函数、作用域
解释:
1.函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
2.任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
3.函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
4.函数内容以冒号起始,并且缩进。return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
(1) 函数的创建
语法:
def 函数名 ([输入参数]):
函数体
[return XXX] #return 返回值列表(也就是说不止一个),是非必须的(1) 函数的创建
语法:
def 函数名 ([输入参数]):
函数体
[return XXX] #return 返回值列表(也就是说不止一个),是非必须的def cal(a,b): #a,b 为形式参数,形参的位置是在函数的定义处c=a+breturn c result=cal(10,20) # 10,20称为实际参数的值,实参的位置是函数的调用处 print(result)res=cal(a=10,b=20) # =左侧的变量称为关键字,根据形参名进行实参传递 print(res)
结果: 30 30
(2)变量的作用域-------------->程序代码能访问到该变量的区域
# 局部变量:
定义:在函数定义处的参数和函数内部定义的变量
作用范围:仅在函数内部,函数执行结束,局部变量的生命周期也结束了在函数内定义并使用的变量、只在函数内部有效、局部变量使用global声明,这个变量就会成为全局变量
# 全局变量:
定义:在函数外定义的变量或函数内部使用global关键字修饰的变量
作用范围:整个程序,程序运行结束,全局变量的生命周期才结束# 变量的作用域 def fun(a=10,b=60):c=a+b # c,就称为局部变量、因为c是在函数内部定义的,a,b作为形参作用域也是在函数的内部print(c) fun()def fun1():global age # 函数内部定义的变量,可以不 用global进行定义,将局部变量变为全局变量age=20print(age) fun1() print(age)
结果:
20
20
5.2 传递参数
(1)实参:位置实参、关键字实参 # 如上述代码所示,a,b为形参,10,20为实参
##位置实参 ,要求位置实参与形参相对应
def Introduce(name,age):print(f"我的名字是{name},今年{age}岁")Introduce("小强",18) Introduce(18,"小强")
结果:
我的名字是小强,今年18岁
我的名字是18,今年小强岁解释:name,age为形参,小强,18为实参
(2)关键字实参
def Introduce(name,age):print(f"我的名字是{name},今年{age}岁")Introduce(name="小强",age=18) Introduce(age=18,name="小强")
结果:
我的名字是小强,今年18岁
我的名字是小强,今年18岁解释:关键字实参,跟顺序无关,已经指定清楚
(3) 既含位置实参又含关键字实参
def Introduce(name,age):print(f"我的名字是{name},今年{age}岁")Introduce("小强",age=18)
注意事项:
如果在传参的过程中,既有位置传参也有关键字传参,那么要遵循位置传参在前,关键字传参在后(4)默认值参数 ========就是给形参指定默认值
def Person(age,name='小强'): # 在定义函数的过程中,直接赋值,叫做默认值传参print("我的名字是{0},年纪为:{1}".format(name,age)) # 函数的调用 Person(18) # 不传入任何参数,为默认值传参
注意事项:形参需要在默认值参数前
(5)个数可变的位置形参,前面加一颗星
def fun2(*args): # 个数可变的位置形参,前面加一颗星print(args)fun2(10,20,30,40) # 返回值为元祖 fun2([10,20,30,40])#若传入的为一个列表,虽然列表内有4个元素,实际上被当成一个元祖,需要在列表前加一个*用来解包,就会生成四个元素
结果:
(10, 20, 30, 40)
([10, 20, 30, 40],)(6)个数可变的关键字传参 前面加两颗星加上两颗星
def fun3(**args): # 个数可变的关键字传参,前面加两颗星加上两颗星print(args) fun3(a=11,b=22,c=33,d=44) # 返回值为字典,解包也需要加上两颗星
结果:
(10, 20, 30, 40)
{'a': 11, 'b': 22, 'c': 33, 'd': 44}(7)关键字形参
def fun4(a,b,*,c,d):print('a=',a)print('b=', b)print('c=', c)print('d=', d)# fun4(10,20,30,40) # 采用位置实参传递 fun4(a=11,b=22,c=33,d=44) # 关键字实参传递 fun4(10,20,c=33,d=44) # 前两个参数采用位置实参传递,后两个采用关键字实参传递
结果:
a= 11
b= 22
c= 33
d= 44
a= 10
b= 20
c= 33
d= 44(8)传递列表
# 传递列表 def lst(names):for i in names:print(f"名字叫做:{i}") lst(["小强","小谢","小张"])
结果:
名字叫做:小强
名字叫做:小谢
名字叫做:小张解释:把参数直接当成一个列表就行
5.3 返回值
(1) 函数的返回值 可返回任何类型的值,例如变量、列表、字典
def fun(num):odd=[] # 存储奇数even=[] # 存储偶数for item in num:if item%2==0:odd.append(item)else:even.append(item)return odd,even result=fun([12,45,78,9,56,47]) print(result)
# 函数的返回值:
1)、如果函数没有返回值(函数执行完毕,不需要给调用处提供数据),return可以不写
2)、函数的返回值,如果是一个,直接返回类型
3)、函数的返回值,如果是多个,返回的结果为元祖
什么时候需要return返回值,什么情况下不需要return返回值?
主要看程序的目的是什么,如果只是执行某些操作,则不需要返回值。
def hello():print ("hello")def cal(a,b):c=a+breturn chello() print (cal(6,3))
解释:函数一就不要return返回值,而函数二就需要return返回值。
##return的作用:
1. 结束函数执行
return
语句的首要作用是结束函数的执行。一旦执行到return
,函数将停止执行余下的代码,并将控制权交还给调用者。
return
语句后跟的表达式将被计算并返回给函数的调用者。这允许函数输出数据,使得函数不仅能执行操作,还能提供操作结果。
5.4 匿名函数(lambda)
概念:是指没有名字的函数,这种函数只能使用一次
使用场景:函数体只有一句代码且只有一个返回值时,可以使用匿名函数来简化语法:lambda arguments:expression ##### result=lambda 参数列表:表达式
解释:
arguments: 参数列表,其中包含多个参数
expression:表示函数体,可以是任意表达式
lambda返回的是一个函数对象,一般将其赋值给一个变量,然后通过这个变量来调用函数add=lambda x,y:x+y print(add(2,3))
结果:5
注意:lambda表达式 是一个单行表达式函数,不能包含多行代码或者标准的控制但是可以使用三元表达式
三元表达式语法:
<experssion1> if <condition> else <experssion2>
解释:条件成立执行表达式1,条件不成立执行表达式2
5.5 函数模块
作用:避免函数类名称相冲突的问题
# 创建模块
新建一个.py文件,就是一个模块,名称尽量不要与Python自带的标准模块名称相同
1)、导入模块的两种方式
# 导入模块
import 模块名称 [as 别名]#导入多个模块,用英文逗号隔开
import math,time,random# 导入模块的函数或者类或变量
from 模块名称 import 函数\变量\类* #星代表导入这个模块的所有,叫做通配符
例子:
# 导入模块的函数
from math import pow
print(math.pow(2,3))结果:
8.0
# 导入自定义模块
例子:
from cal import cal # cal 是自己声明的一个模块,也就是一个.py文件
print(cal(9,8))结果:
17
第三方模块的安装和卸载#安装
pip install 模块名称#卸载
pip uninstall 模块名称