"""author = 陈俊龙"""
=============函数基础============
1.什么是函数:
函数就是对实现某一特定功能代码的封装
2.函数的分类:
1).系统函数:
系统自己定义的函数(不需要程序员去实现)
例如:print(),input(),max(),type()
2).自定义函数:
程序员自己实现的函数
3.声明函数:
1)语法:
def 函数名(参数列表):
函数体
2)说明:
def
-- 声明函数的关键字
函数名
-- 和变量的要求相同,是标识符,不能是关键字(要求),所以字母都小写,多个单词用下划线隔开(规范)
()
-- 固定写法
参数列表
-- 这里的参数也叫形参,以变量名1,变量名2......形式出现,形参可以没有,也可以有多个通过形参可以将函数外的数据传到函数里
函数体
-- 实现函数功能的一条或多条语句(核心)
3)初学者声明函数的过程:
1)确定函数功能
2)根据功能去确定函数名字
3)确定形参:看实现函数的功能需不需要从外部传数据,需要数据就对应一个参数
4)实现函数的功能
5)确定返回值(将函数里的数据传到函数外边)
注意:
声明函数的时候不会执行函数体,只要调用函数的时候才会执行函数体
4.函数的调用:
1).语法:
函数名(实参列表)
2).说明:
函数名
-- 已经声明过的函数的函数名
()
-- 固定写法
实参列表
-- 实参是给形参复制的,实参具体的值:比如:数据,已经附过值的变量等
3).函数的调用过程:
1)先回到函数声明的位置
2)传参:用实参给形参赋值
3)执行函数体
4)执行完函数体,再回到调用函数的位置接着往后执行
练习:
写一个函数,求两个数的和:
def sum_num(num1, num2):
sum1 = num1 + num2
return sum1
print(sum_num(1, 2))
求三个数的最大值:
def max_num(num1, num2, num3):
max_num1 = num1
for num in (num1, num2, num3):
if num > max_num1:
max_num1 = num
print('最大值是%d' % max_num1)
写一个函数判断字符串中是否包含中文:
def is_chinese(str1):
for item in str1:
if'\u4e00' < item < '\u9fa5':
print('有中文')
break
else:
print('没有中文')
写一个函数实现将一个数据插入到列表的最前面:
def insert_up(str1, list1=[]):
list1.insert(0, str1)
return list1
===============函数的参数==============
1.位置参数和关键字参数(实参):
1)位置参数:
调用函数时让实参和形参的位置一一对应
def fun1(x, y, z):
print(x, y, z)
# 位置参数:
fun1(1,2,3)
2)关键字参数:
以 形参=实参 的形式传参,位置可以打乱
fun1(x=1, y=2, z=3)
注意:
不管以何种方式传参,都要保证每个参数都有值
如果即有位置参数,又有关键字参数,位置参数一定要在关键字参数的前面
位置参数和关键字参数一起使用:
fun1(1, y=2, z=3)
2.参数默认值(形参):
声明函数的时候,可以给形参设置默认值,以 形参 = 值 的方式来设置
def fun2(x=0, y=0, z=0):
print(x, y, z)
fun2(z=5) # 跳过前面的参数给后面的参数赋值
设置了默认值的参数,在调用函数的时候可以不用传参,也可以传
注意:
有默认值的参数要放在没有默认值的参数!后面!
3.参数类型说明:
1).附默认值:
def func(x,y,z=0):
print(x,y,z)
2).以一种 形参:类型名 的方式说明类型:
def func(x: list, y: str, z=0):
print(x, y, z)
对参数类型进行说明可以引导函数调用者正确的传参,也可以在实现函数体的时候有代码提示
4.不定长参数:
1)形参名前加一颗星*:
在参数前加星号*,那么这个参数就会变成不定长参数,就可以同时接收多个形参
def sum_nums(*num):
sum1 = 0
for item in num:
sum1 += item
print(num) # (1, 2, 3, 4, 5)
print(sum1) # 15
sum_nums(1,2,3,4,5)
注意:
1)不定长参数实质就是一个!元组!,接收到的实参就是元组中的元素
2)!不定长参数可以不用传参!
3)带星*的参数必须放在不带星的参数后面
def func(num1, *num2):
print(num1, num2)
func(1,2,3,4,5) # 1 (2, 3, 4, 5)
func(1) # 1 ()
2)形参名前加两颗星**:
在参数前加两个星号**,那么这个参数就会变成不定长参数,就可以同时接收多个形参
def func1(**num1):
print(num1)
func1(a=1,b=2,c=3) # {'a': 1, 'b': 2, 'c': 3}
注意:
这个不定长参数的实质是一个!字典!,调用的时候必须使用关键字参数
同样也可以什么都不传
3)一个星参数的和两个星的参数可以一起用:
def fun(*args,**kwargs):
print(args, kwargs)
fun(1, a=2,) # (1,) {'a': 2}
代码的目的在于即可以传位置参数,也可以传多个关键字参数