1.函数的作用

1.1函数的作用:提高代码的复用性

2.函数的特点

2.1实现某个指定的功能

2.2重复使用

例如:type(),len(),range() 等内置函数

3.函数的语法

def 函数名(参数1,参数2,参数3...):
	函数体(此函数的具体功能)
	return  表达式

例如:

def add(a,b,c):
	result=a+b+c    
	return result       #1.用result变量存储函数体的运行结果,再用return返回

res=add(4,5,1)	        #2.用res变量存储返回值
print(res)               #3.再打印存储返回值res

注意事项:
a.def 顶格写,告诉python,这是一个函数

b.函数名小写,不同的字母与数字之间用下划线隔开,不能用数字开头

c.参数的个数大于等于0个(>=0)

d.函数体是函数的子代码,要缩进,实现这个函数的功能

e.return后面的表达式大于等于0(>=0);return后面表达式个数显示

e1.表达式==0个,返回None(空的)

e2.表达式==1个,返回指定的数据类型

e3.表达式>1个,返回是元组的类型

f.想要拿到函数体运行的结果,要加上return,return后面加表达式

g.如果return后面没有表达式,return可以不写(没有表达式,Python会自动添加一个隐式的:return)

h.return表示函数结束,所以不执行后面的代码了;所以有效代码要放在return前面

i.调用函数:函数名(对应个数的参数)

i1.写好的函数本模块不一定都要调用,只是放在那里,等后面需要再导入

i2.写完函数要在最后加上:if __name__=="__main__":,后面放测试代码

if __name__=="__main__":          #__name__表示当前模块的名字
    #函数名1
    #函数名2
    #函数名3

if __name__ == '__main__'的意思是:

1.当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;

2.当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行(过滤掉if name == 'main’下的测试代码)。

4.函数的参数

4.1函数为什么要加参数呢?

a.通过调用函数,把参数列表传递进来

b.提高代码的复用性

4.2函数的参数个数大于等于(>=0)0个

4.3函数的参数类型:位置参数、默认参数、动态参数、关键字参数

一.位置参数:通过调用函数时传参,是按顺序赋值

形参(只是占坑的,没有实际数据)
实参(调用函数的时候给的值)
在实参里面,还可以指定参数赋值(a=1,c=2,b=101)

def info(name,age,height):       #形参
	print("运行后的结果是:{},今年{}岁了,身高是:{}".format(name,age,height))

info("老男孩",20,175.5)         #实参

运行后的结果是:老男孩,今年20岁了,身高是:175.5

二.默认参数:给形参指定默认值

调用函数时候,以实参的值为主;
实参不传值,就默认取形参的默认值
位置参数要放在默认参数前面
调用函数时,形参里面有多少个位置参数,我们就要传多少个参数

def info(name,age,height=175.5):    
	print("运行后的结果是:{},今年{}岁了,身高是:{}".format(name,age,height))

info("老男孩",20,178)    #以实参的值为主;height有默认值了,所以height的实参可以不传

运行后的结果是:老男孩,今年20岁了,身高是:178

三.动态参数:关键字(*args ) 预先不知道需要传多少个参数,也叫不定长参数

可以传任意多个参数,参数之间用逗号隔开
不限制数据类型
默认:args,前面带一个星号
参数到函数内部,变成了元组类型

def info(*args):
	print("运行后的结果:",args)

info("老男孩",20,178,(1,3.1415),{"hobby":"爬山","sport":"打篮球"})

运行后的结果: ('老男孩', 20, 178, (1, 3.1415), {'sport': '打篮球', 'hobby': '爬山'})

四.关键字参数:**kwargs (key word arguments)

关键字是key:value的形式,参数之间用逗号隔开
默认:kwargs,前面带两个星号
参数到函数内部,变成字典类型

def info(**kwarg):
	print("运行后的结果:",kwarg)

info(name="老男孩",age=20,height=178,love={"hobby":"爬山","sport":"打篮球"})

运行后的结果: {'age': 20, 'love': {'hobby': '爬山', 'sport': '打篮球'}, 'height': 178, 'name': '老男孩'}

5.函数之间的相互调用

def student_info(class_name,name,offer):
	print("{}期的{}同学,拿到了{}K的offer!!".format(class_name,name,offer))

def eat_like(*args):
    s_1=""
    for i in args:
        s_1+=i
        s_1+="、"
    new_s_1=s_1.strip("、")
    print("最喜欢的是:",new_s_1)
    
    student_info(15, "小李", 30) #eat_like()函数里调用上面定义好的student_info()函数

eat_like("啤酒", "BBQ")

最喜欢的是: 啤酒、BBQ
15期的小李同学,拿到了30K的offer!!