函数的定义
函数是将一段实现功能的完整代码,使用函数名进行封装,通过函数名称来调用,来达到一次编写,多次调用的目的。
1.1 自定义函数格式
def 函数名称 (参数列表) :
函数体
[return返回值列表]
1.2函数的调用
函数名(参数列表)
1.3实现1到n之间的累加和的自定义函数
def get_sum(num):#定义一个get_sum函数
s=0
for i in range(1,num+1):
s+=i
print(f'1到{num}之间的累加和为:{s}')
#函数的调用
get_sum(100)#1~100之间的累加和
get_sum(10)#1~10之间的累加和
代码结果为:
1到100之间的累加和为:5050
1到10之间的累加和为:55
编写函数的注意事项:
- 函数的定义使用关键字def
- 事先确认函数名称,参数名称,参数个数,函数功能
- 对函数个个参数进行实际赋值
- 如果使用return进行返回结果,则结果会被返回到调用处
函数的参数传递
下面将介绍4种传参方式分别是位置参数,关键字参数,默认值参数,可变参数(不定长参数)。
2.1位置参数
定义:调用时的参数个数和顺序必须和定义的参数一致,就是你函数开头括号内是什么你调用时必须照着模板填。
下面是实例
def happy_birthday(name,age):
print('祝'+name+str(age)+'生日快乐')
happy_birthday('小华',18)#调用函数的引用参数一一对应
结果为:
祝小华18生日快乐
2.2关键字参数
定义:函数调用时使用“形参名称=值”的方式进行传参,这样的好处是可以无视定义时的参数顺序。
下面是实例:
def happy_birthday(name,age):
print('祝'+name+str(age)+'生日快乐')
happy_birthday(age=18,name='小华')#有了关键字顺序可以不用一致了
结果为:
祝小华18生日快乐
位置参数与关键字参数的混合使用
当位置参数与关键字参数同时使用时位置参数一定要在前,我的理解是位置参数如果在后面会受关键字参数干扰从而不明确自己的位置而报错。
def happy_birthday(name,age):
print('祝'+name+str(age)+'生日快乐')
#happy_birthday(18,name='小华')报错
#happy_birthday(name='小华',18)报错
happy_birthday('小华',age=18)
2.3默认值参数
定义:在定义函数时就已经对形参进行了赋值,如果函数调用时该参数不传值,那么就使用默认值;如果传了就用传的值。
有了关键字参数我们只需要写我们想修改的值就好了,有时会很方便
下面是实例:
def happy_birthday(name='小华',age=18):#参数默认
print('祝'+name+str(age)+'生日快乐')
happy_birthday()#输出 祝小华18生日快乐
happy_birthday('小花',15)#输出 祝小花15生日快乐
2.4可变参数(不定长参数)
可变参数用于不确定调用多少参数的场景,一共有2种对应位置和关键字
个数可变的位置参数(*para)
加了*para后我们在调用函数时可以写任意个数和实际参数,函数会将它们放在一个元组中
def fun(*args):
print(args)
fun(10,20,30)
print('*'*50)
fun([11,22,33,44])#相当于传入一个参数
print('*'*50)
fun(*[11,22,33,44])#在前面加一个星星是将列表进行解包,解包后是元组
结果为:
(10, 20, 30)
**************************************************
([11, 22, 33, 44],)
**************************************************
(11, 22, 33, 44)
个数可变的关键字参数(**para)
加了2颗星星的在调用函数时可以接受任意多个的“参数=值”的参数(关键字)然后将它们放在字典中
下面是实例:
def fun2(**kwpara):#个数可变的关键字参量
print(type(kwpara))
for key,value in kwpara.items():#遍历字典
print(key,'----------',value)
fun2(name='小华',age=18,grade=100)
<class 'dict'>
name ---------- 小华
age ---------- 18
grade ---------- 100
函数的返回值return
返回值的作用非常大
- return返回的结果可以带到其他函数使用
- 函数如果需要递归那些返回运行结果的使用return关键字
- 可以用来结束函数
下面是实例:
def sum(a,b):
s=a+b
return s #将s返回给函数的调用处去处理
get_sum=sum(10,20)
print(get_sum)#结果为30
get_sum2=sum(sum(10,20),10)#10+20+10=40 先去执行sum(10,20) 返回结果为30,再去执行sum(30,10)
print(get_sum2)
函数的返回值可以是多个的 ,当返回多个值时这些值需要用逗号隔开,并且这些返回值的类型是元组,可以使用多重赋值获取返回值
下面是实例:
def return_study():
a=1
b=2
c=3
return a,b,c
result=return_study()
print(result) #结果为 (1, 2, 3) 说明多个返回值时合并为一个元组
i,j,k=result #多重赋值
print(i,j,k) #结果为 1 2 3
变量的作用域
指变量起作用的范围,分为全局变量和局部变量
局部变量
在函数定义处或者函数内部的变量或参数,就只在函数内部有效,函数执行结束后该局部变量的生命周期也结束了
看下面2个代码:
def sum(a,b): #a,b这两个参数是局部变量
s=a+b #s是函数定义的变量也是局部变量
return s
s=sum(1,2) #我在函数外面使用局部变量s不会报错
print(s) #结果为:3
def sum(a,b):
s=10
return s+a+b
print(sum(1,2))
print(s) #报错,在函数外找不到s,生命结束
说明出了函数s变量生命结束,你可以重新在外面定义一个s变量也不会报错
全局变量
在函数外定义的变量和在函数内部使用global关键字的变量,整个程序结束全局变量才结束生命
def sum(a,b):
global s
s=10
return s+a+b
print(sum(1,2)) #结果为13
a_1=10 #全局变量
print(s) #结果为10,s没有消失
注意在使用global关键字时声明和赋值要分开写
在局部变量与全局变量名称相同时,如果是函数里面就优先局部变量,函数外就优先全局变量
匿名函数lambda
是一个没有名字的函数,而且只能用一次
如果你的函数很简单只有一句代码和一个返回值就可以用这个函数来简化你的代码
语法结构:
result=lambda 参数列表:表达式
下面是实例:
s=lambda a,b:a+b #s是这个函数的名字
print(type(s)) #<class 'function'>
print(s(1,2)) #结果为:3
常用内置函数
数据类型转换函数
bool(obj) #获取指定对象obj的布尔值
str(obj) #获取指定对象obj转换成字符类型
int(x) #将x转换成int类型
float(x) #将x转换成float类型
list(sequence) #将序列转换成列表类型
tuple(sequence) #将序列转换成元组类型
set(sequence) #将序列转换成集合类型
常用数学函数
abs(x) #获取x的绝对值
divmod(x,y) #获取x与y的商和余数
max(sequence) #获取sequence的最大值
min(sequence) #获取sequence的最小值
sum(iter) #对可迭代对象(列表,元组什么的)进行求和运算
pow(x,y) #获取x的y次幂
round(x,d) #对x进行保留d位小数,结果四舍五入
以下是部分函数实例:
print('字符串最大值:',max('hello'))#字符型参数,取字母表排序靠后者
print('最大值:',max(10,20,30))
print('最大值:',max({10, 20, 30}))
print(max('ab','ac','ad')) #序列型参数,则依次按索引位置的值进行比较取最大者。
结果为:
字符串最大值: o
最大值: 30
最大值: 30
ad
常用迭代器操作函数
sorted(iter)#对可迭代对象进行排序
reversed(sequence) #反转序列生成新的迭代器对象
zip(iter1,iter2) #将iter1和iter2打包生成新的可迭代zip对象
enumerate(iter) #根据iter创建一个enumerate对象
all(iter) #判断iter中的所有元素的bool值是否都为Ture
any(iter) #判断iter中的所有元素的bool值是否都为False
next(iter) #获取迭代器的下一个元素
filter(function,iter) #通过指定条件过滤序列并返回一个迭代器对象
map(function,iter) #通过函数function对可迭代对象iter操作并返回一个迭代器对象
内置函数的具体用法在这里就不详细讲了
本人初学,写来玩玩,如有错误请指出谢谢啦