函数:
函数是组织好的,可重复使用的,用来实现单一的,或相关功能的代码段。
函数能提高应用的模块性和代码的重复利用率。也可以自己定义函数,叫自定义函数。
1、定义一个函数:
在python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
2、语法:python定义函数使用def关键字,一般格式如下:
def 函数名(参数列表): 函数体
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
3、函数的调用:
函数名([实参])
# 定义函数 import random def yan_zheng(length): code = '' a = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM' for i in range(length): ran = random.choice(a) code+=ran print('验证码为:',code) #调用函数 yan_zheng(4) yan_zheng(5) # 验证码为: IQls # 验证码为: a4kpw
4、函数的参数:
1》普通参数:
参数的个数:要求定义函数时的个数与调用函数时个数要一致。
from collections import Iterable def func(name,friends): # 打印信息 print('{}的朋友们如下'.format(name)) if isinstance(friends,Iterable): for friend in friends: print(friend) else: print(friends) # 添加朋友们friends def add_friend(f): name = input('输入朋友们的名字:') if isinstance(f,list): f.append(name) name = '钢铁侠' friends = ['雷神','黑寡妇','绿巨人'] # 调用函数查看friends func(name,friends) # 添加朋友 add_friend(friends) # 输入朋友们的名字:gang print(friends) # ['雷神', '黑寡妇', '绿巨人', 'gang']
2》参数的类型:
不可变:str int float bool tuple
可变: list set dict ------可变类型函数传递的是地址
不可变的参数给的是值
可变的参数给的是地址
5、函数的参数:
1》默认值参数:在定义函数的时候,对某个参数设置一个固定的值。
def func(a,b=10):
其中b = 10 就是默认值
调用时:
func(8) ----- a=8,b=10 此时使用了默认b=10的值
func(1,5) ----- a = 1,b=5 此时5替换了原来的默认值
注意:在定义默认值的时候必须要放在参数的后面,否则报错
def func(a,b=10): r = a + b print(r) func(8) # 18 func(4,5) # 9
2》关键字参数:在调用的时候通过关键字的方式明确指明是给哪一个参数的
func(b=6) ----- b=7就是关键字的方式
func(b=1,a=2) ---- 顺序乱也是没有关系,关键是能够明确给那个参数赋值
def func(b=8,a=10): r = a + b print(r) func(a=4,b=5) # 9
补充:拆包、装包
list1 = [4,7,8] n1,n2,n3 = list1 # 先做拆包动作再给前面变量赋值 print(n1,n2,n3) # 4 7 8 list2 = [1,2,3,6,7,8] x,y,*z = list2 print(x,y,z) # 1 2 [3, 6, 7, 8] x,*y,z = list2 print(x,y,z) # 1 [2, 3, 6, 7] 8
3》可变类型参数:*args **args
def 函数名(*args,**args):
pass
args --->() 元组 底层会将所有的位置参数存放到args
kwargs ---->{} 字典 会将所有的关键字参数放到字典中
调用:
函数名(1,2,3) ------ 1,2,3 位置参数 ---- (1,2,3)
函数名(a=1,b=2) ----- a = 1,b=2 关键字参数 -------{'a':1,'b':2}
def func(a,b=0,*args): print(a) print(b) print(args) func(4,6,7,8,9) # 4 # 6 # (7, 8, 9) func(6) # 6 # 0 # () func(1,2) # 1 # 2 # ()
注:只要函数定义中出现可变参数,则在使用关键字参数的时候要慎重。
----------------
def func1(a,*args): print(a) print(args) func1(10) func1(1,2,3) # 只要调用函数,参数是至少必须填一个的
**args 关键字参数
def func2(*args,**kwargs): print(args) # () print(kwargs) # {} 调用func2 func2() func2(1,2,3,4) func2(1,3,5,a=6,b=10)