内容大纲:
一、函数初识
二、函数的返回值
三、函数的传参
一、函数初识
1、什么是函数 :
函数是组织好的,可重复使用的,用来实现单一、或相关联功能的代码,函数能提高应用的模块性和代码的重复利用率。
函数的优点:减少代码重复率,增强代码阅读性
函数的主要目的:封装一个功能
2、函数的定义和调用
#函数的定义 def my_len(): '''计算s1的长度''' s = 'dahjd' length = 0 for i in s: length += 1 print(length) #函数的调用 my_len()
定义:
def:关键字开头,空格之后接函数名称和括号,最后还有一个' : '
空格:为了将def关键字和函数名隔开
函数名:函数名只能包含数字、字符串和下划线组成,不能以数字开头,和变量名的组成方式相同
括号:必须加
注释:每一个函数都应该对功能和参数进行说明
调用:
就是函数名(),一定要加括号。函数的执行者
二、函数的返回值return
1、函数中如果遇到return则直接结束函数
def func1(): print(111) print(222) return print(333) func1() 结果是: 111 222
2、给函数的执行者返回值
①没有返回值:返回给函数执行者None
def func1(): a = 1 b = 2 return print(func1()) 执行结果:None
②返回一个值:return单个值,将该值原封不动的返回
def func1(): a = 1 b = 2 return a print(func1())
执行结果:1
③返回多个值:return多个值,返回元组类型,返回值作为元组中的元素
def func1(): a = 1 b = 2 c = 'hello' d = [1,2,3] return a,b,c,d print(func1())
执行结果:(1, 2, 'hello', [1, 2, 3])
三、函数的传参
1、实参:在函数执行者里面的参数叫实参
①位置参数:按顺序和形参一一对应
def compare(x,y): ret = x if x > y else y #三元运算,针对简单的if else才能使用 return ret print(compare(123,122334))
执行结果:122334
②关键字参数:可以不按顺序,但是必须一一对应
def compare(x,y): ret = x if x > y else y return ret print(compare(y=13,x=1)) 执行结果:13
③混合参数:关键字参数一定要在位置参数后面
def func1(a,b,c,x,y): a = 1 b = 'hello' return a,b,c,x,y name = 'tt' print(func1(1,2,name,y=10,x=20)) 执行结果: (1, 'hello', 'tt', 20, 10)
2、形参:
①位置参数:按顺序和实参一一对应,位置参数必须传值
②默认参数:给其传值,默认参数覆盖,不传值,不报错,使用默认参数
def name_list(name,sex = 'male'): '''将姓名/性别写入文件''' with open('namelist',encoding='utf-8',mode='a') as f1: f1.write('{} /{} '.format(name,sex)) while 1: name,sex = input('请输入姓名/性别,以“、”隔开:').strip().replace(',',',').split(',') if sex.strip(): #当性别不为空时即有输入性别时,默认参数被覆盖 name_list(name,sex) else: name_list(name) #当没有输入性别时,使用默认参数
③动态参数:不定长传参,在需要传递的参数很多不定长的情况下,就用*args、**kwargs接收。
args是元组形式,接收除键值对以外的所有参数,kwargs只接收键值对的参数,并保存在字典中。
def trans_para(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) trans_para(1,'hello',[1,2,3],{'name':'weng'},name = 'weng') #键值对一定要在最后 执行结果: (1, 'hello', [1, 2, 3], {'name': 'weng'}) <class 'tuple'> {'name': 'weng'} <class 'dict'>