一、认识函数
函数就是实现某一特定功能的代码块,在类中,函数又叫方法(对某一功能的封装)
-
为什么要使用函数?
飞机的功能:左移、右移、上移、下移、发射子弹等
没有函数的时候:
问题:
1.一样的功能对应的代码,需要重复写很多次 (代码冗余)
2.如果功能发生改变的时候,需要修改很多位置的代码
怎么解决上面的问题:使用函数
-
函数的作用:
1.让界面简洁(同样的功能对应的代码只写一遍)
2.如果功能发生改变,使用函数只需修改一个地方的代码
3.让代码模块化
左移
print('看后视镜')
print('踩油门')
print('打左转向灯')
print('向左打方向盘')
print('回正方向盘')
右移
print('看后视镜')
print('踩油门')
print('打右转向灯')
print('向右打方向盘')
print('回正方向盘')
二、使用函数
-
1.声明函数(定义)
print()、input()、len()、max()等,都是python的内置函数 append()、insert()等是相关类对应的函数
a.格式:
def 函数名(参数列表):
说明文字
函数体
def:是python中声明函数的关键字
函数名:标识符,PEP 8,见名知义(根据函数名大概知道函数的功能)
():固定格式,不能省略
参数列表(形参):参数的作用就是从外面往函数中传值的.
一个函数可以没有参数,也可以有多个参数。
如果有多个参数,参数之间用逗号隔开。
冒号:固定的格式
说明文字:对函数功能进行说明
函数体:就是实现函数功能的代码段
b.对于初学者来说,声明函数的步骤:
1.确定函数的功能(确定函数是干什么的)
2.确定函数名(根据功能确定函数名)
3.确定参数(确定是否有参数,确定参数有几个,看实现这个功能需不需要从外面传值进去)
4.确定是否需要返回值(返回值就是函数返回给调用者的数据。python中所有的函数都有返回值,默认是None)
5.实现函数的功能
注意:函数只有在调用的时候才会执行
-
2.函数的调用
格式:
函数名(参数列表)
函数名:你声明的需要调用的函数(已经声明过得函数才能调用)
参数列表:实参
函数的调用过程:
1.就是用实参给形参赋值,
2.并且执行函数体获取返回值
3.获取返回值(这个时候会回到函数调用的位置,并且让函数调用表达式的值)
写一个函数,打印'hello python'
声明函数hello
def hello():
"""打印'hello python'"""
print('hello python')
调用函数hello
hello()
print(hello())
注意:
1.一个函数声明后,可以调用多次;
2.python中所有的函数调用表达式都有值
练习:写一个函数去打印10的阶层
def jie_ceng():
"""打印10的阶层"""
sum2 = 1
for x in range(1, 11):
sum2 *= x
print(sum2)
jie_ceng()
三、带参的函数
1.函数的声明
def 函数名(参数列表):
说明文字
函数体
形参:获取从外面传递给函数内部的值
2.函数的调用
函数名(实参列表)
实参:调用函数的时候给函数传值
写一个函数,打印两个数的和
形参就是声明在函数内的变量
def my_sum(num1, num2):
"""打印num1和num2的和"""
print(num1 + num2)
带参函数的调用
-
1.位置参数
my_sum(10, 20) # 执行这句代码:先将num1 = 10, num2 = 20.再执行my_sum的函数体 my_sum(30) 报错:TypeError: my_sum() missing 1 required positional argument: 'num2'
注意:函数调用的时候,一定要保证每个形参都要有值
2.关键字参数
my_sum(num2=10, num1=5)
练习:写一个函数,打印一个数的立方
def cubic(num):
"""打印一个数的立方"""
print(num**3)
cubic(6)
-
2.参数的默认值
在python中,函数的参数可以设置默认值(函数声明的时候给函数赋值)。
如果参数设置了默认值,那么调用这个函数的时候,这个参数可以传参 ,也可以不参
写一个函数,问候某人(打印:xxx,how are you!)
def say_hi(name='xxx'):
"""问候"""
print('{},how are you!'.format(name))
函数调用的要求:保证每个参数有值
say_hi()
say_hi('张三')
注意:如果声明函数的时候,函数中有多个函数,有默认值的必须放在没有默认值的参数后边
def say_hello(name='xxx', message): #报错
"""问候"""
print('%s, %s' % (name, message))
def say_hello(message, name='xxx'):
"""问候"""
print('%s, %s' % (name, message))
say_hello('你吃了吗?', '李四') # 李四, 你吃了吗?
say_hello('最近好吗?') # xxx, 最近好吗?
say_hello(name='小花', message='I love you!') # 小花, I love you!
say_hello(message='我恨你!') # xxx, 我恨你!
-
3.参数个数不定
写一个函数,求多个数的和
参数个数不确定的时候,就在参数列表中声明一个变量,前面加一个*;
这个时候,这个变量就变成了元祖。函数调用的时候,所有的实参都会添加到元祖中
def my_sum2(*nums):
sum1 = 0
for item in nums:
sum1 += item
print(sum1)
my_sum2(10, 2, 30) # 42
my_sum2(10, 2, 30, 45, 89, 54, 789) # 1019