1.函数的声明
1)什么是函数
函数就是对实现某一特定功能的代码的封装
2)函数的分类
按照函数是谁来声明的将函数分为系统函数和自定义函数
- 系统函数:由系统声明,程序员直接使用的函数。例如:print/input/hex/length/sum/max/min等
- 自定义函数:由程序员自己声明的函数
3)函数的声明(定义)
a.语法:
def 函数名(参数列表):
函数说明文档
函数体
b.说明
def - python声明函数的关键字,固定写法
函数名 - 程序员自己命名;
要求:是标识符,不能是关键字
规范:PEP命名规范;见名知义(看到函数名大概知道函数的功能);不能使用系统函数名或者类名
() - 固定写法
参数列表 - 这儿的参数叫形参;以'变量名1,变量名2,...'的形式存在
它的作用是将函数外面的数据传递到函数里面
: - 固定写法
函数说明文档 - 使用三个双引号引起来的文本信息
函数体 - 和def保持一个缩进的一条或者多条语句。就是实现函数功能的代码段
c.初学者声明函数的步骤
1.确定函数功能
2.根据功能确定函数名
3.确定函数的参数;看实现函数的功能需不需要额外的数据,需要几个
4.实现函数的功能
5.写函数说明文档
d.注意:函数在声明的时候不会执行函数体,调用的时候才会执行(重要!)
写一个函数,求两个数的和
def ysy_sum(num1, num2):
"""
功能说明:求两个数的和
:param num1: 参数说明 - 数字
:param num2: 参数说明 - 数字
:return: 返回和的值
"""
sum1 = num1 + num2
return sum1
print(ysy_sum(1, 2))
练习:写一个函数,打印指定字符串中所有的中文字符
def c_char(str1):
"""
功能说明:求指定字符串中所有的中文字符
:param str1: 指定的字符串
:return: 返回一个包含所有中文的新的字符串
"""
str2 = ''
for chars in str1:
if '\u4e00' <= chars <= '\u9fa5':
str2 += chars
return str2
print(c_char('as12哈哈9你好1q'))
4)函数的调用
a.语法
函数(实参列表)
b.说明
函数名 - 已经声明过的函数名
() - 固定写法
实参列表 - 以‘值1,值2,值3,...’的形式存在;实参是用来给形参赋值的
c.注意:同一个函数可以调用多次
2.函数的调用
1)函数的调用过程
1)回到函数声明的位置
2)用实参给形参赋值(传参);传参的时候要保证每个参数都有值
3)执行函数体
4)确定函数的返回值
5)回到函数调用的位置,接着往后执行。
def ysy_sum(num1, num2):
# num1 = 1, num2 = 2
print(num1 + num2)
ysy_sum(1, 2)
3.函数的参数
1)参数分类
1.位置参数和关键字参数(实参分类)
a.位置参数:让实参和形参一一对应,来给不同的形参赋不同的值
b.关键字参数:以'参数名1=值1,参数名2=值2,...'的形式来传参
注意:1.如果位置参数和关键字参数同时存在的时候,位置参数必须放在关键字参数的前面
2.如果希望跳过前面某个、某几个参数,直接给后面的参数赋值,就必须使用关键字参数
def func1(x, y, z):
print(x, y, z)
# 位置参数
func1(1, 2, 3)
# 关键字参数
func1(x=1, y=1, z=1)
func1(y=2, x=1, z=3)
# 位置参数+关键字参数
func1(3, z=2, y=1)
2.参数默认值 - 形参
声明函数的时候,可以给形参赋默认值;已经有默认值的参数在调用的时候可以不用传参
注意:没有默认值的参数必须放在有默认值参数的前面
def func2(x, y=2, z=1):
print(x, y, z)
func2(1, z=2)
3.参数类型说明
a.给参数设置默认值,默认值的类型就是参数类型
b.形参:类型名
4.不定长参数 - 参数个数不确定
a.在参数名前加,那么这个参数就会变成一个元组去接收多个参数,调用的时候不能使用关键字参数传参
b.在参数名前加*,那么这个参数就会变成一个字典去接收多个参数,调用的时候只能使用关键字参数传参
# 计算多个数的和
def ysy_sum(*num):
print(sum(num))
ysy_sum(1, 2, 3)
def func5(x, *y):
print(x)
print(y)
func5('ab', 1, '1s')
def func6(**num):
print(num)
func6()
# func6(1) # TypeError: func6() takes 0 positional arguments but 1 was given
func6(x=10)
func6(x=1, y=2)