函数1
一、函数基本概念
函数的功能时什么?
答:包裹一部分代码,实现某一个功能,达成一个目的。
特点:可以反复调用,提高代码的复用性,提高开发效率,便于维护管理
1、函数的基本格式:
函数的定义:
def 函数名() #定义函数
code1
code2
函数名() # 函数的调用
def func():
print("我是一个函数")
func()
运行结果:
2、函数的命名规则(同变量):
1)可以使用数字字母下划线
2)首字符不能用数字
3)严格区分大小写
4)不能使用关键字
5)变量命名要有意义
6)不能使用中文
驼峰式命名法:
1)大驼峰命名法:每个单词首字母大写(定义类:面向对象)
mycar => MyCar
2)小驼峰命名法:除了第一个单词首字符小写之外,剩下每个单词首字符大写
mycar => myCar
3、函数方式打印两遍99乘法表
def func():
for i in range(1,10):
for j in range(1,i+1):
num = "%d*%d=%2d " %(i,j,i*j)
print(num,end="")
print()
# 函数调用处
for i in range(2):
func()
运行结果:
二、函数的参数
参数:
1、形参:形式参数,在函数的定义处
2、实参:实际参数,在函数的调用处
形参:普通形参(位置),默认形参,普通收集形参,命名关键字形参,关键字收集形参
实参:普通实参,关键字实参
遵循原则:
形参和实参要一一对应
1、普通形参
def func(a,b):
for i in range(a,b):
for j in range(1,i+1):
num = "%d*%d=%2d " %(i,j,i*j)
print(num,end="")
print()
for i in range(2):
func(1,10)
把1和10传给a和b
运行结果:
2、默认形参
形参上面有默认值,为默认形参
def func(a=1,b=10):
for i in range(a,b):
for j in range(1,i+1):
num = "%d*%d=%2d " %(i,j,i*j)
print(num,end="")
print()
for i in range(2):
func()
运行结果:
3、普通形参 + 默认形参
默认形参必须跟在普通形参之后,顺序是一定的
def func(a,b=10):
for i in range(a,b):
for j in range(1,i+1):
num = "%d*%d=%2d " %(i,j,i*j)
print(num,end="")
print()
for i in range(2):
func(1)
运行结果:
4、关键字实参
关键字实参是对具体的某个参数赋值,具体的顺序可以打乱。
def func(a,b,c):
for i in range(a,b):
for j in range(c,i+1):
num = "%d*%d=%2d " %(i,j,i*j)
print(num,end="")
print()
for i in range(2):
func(b=10,c=1,a=1)
运行结果:
5、普通实参 + 关键字实参
同样存在顺序问题:关键字实参必须在普通实参之后。
def func(a,b,c):
for i in range(a,b):
for j in range(c,i+1):
num = "%d*%d=%2d " %(i,j,i*j)
print(num,end="")
print()
for i in range(2):
func(1,b=10,c=1)
运行结果:
6、区分默认形参和关键字实参
默认形参和关键字实参写法上一模一样
区别:
默认形参在函数的定义处
关键字实参在函数的调用处
7、收集参数
1、普通收集参数
专门用来收集多余没人要的=普通实参=
语法:
def func(*args)
code
*args => arguments(参数)
在args这个参数的前面加上一个*表达普通收集参数,形成一个元组。
基本使用:
def func(*args):
print(args) #作为变量不用加*号
func(1,2,3,4,5,6,8,9)
运行结果:
8、关键字收集参数
专门用来收集多余的没人要的=关键字实参=
语法:
def func(**kwargs):
code
**kwargs => keyword arguments
在kwargs前面加**表示关键字收集参数,形成一个字典。
基本使用:
def func(**kwargs):
print(kwargs) #作为变量不用加**号
func(k1=1,k2=2,k3=3,k4=4,k5=5,k6=6,k7=8,k8=9)
运行结果:
9、命名关键字参数
定义命名关键字参数有两种方式:
1)def func(a,b,*,c) c是命名关键字
2)def func(*args,c,**kwargs) c是命名关键字参数
在函数调用时,必须使用命名关键字参数来赋值
1、定义方式一
def func(a,b,*,c,d):
print(c,d)
func(1,2,d=5,c=3)
运行结果:
2、定义方式二
def func(*args,c,**kwargs):
print(c)
print(args)
print(kwargs)
func(1,2,d=5,c=3,e=6)
运行结果:
10、关于*和**的用法
*和** 在函数的定义处,用来做收集操作,打包
*和** 在函数的调用处,用来做打散操作,解包
解包:
def func(a,b,c,f,g,h):
print(g)
lst = [7,8,9]
func(1,2,5,*lst)
运行结果:
重点(顺序不能乱):
参数定义的顺序:普通参数 -> 默认参数 -> 普通收集参数 -> 命名关键字参数 -> 关键字收集参数