一、函数的作用
1、当同一个功能的代码需要重复写多次的时候
2、当功能发生改变,需要修改多个地方的时候
二、函数的定义
1、函数就是对某一特定功能的代码进行封装
2、函数的作用:主要是封装的作用(将特定的功能绑定在一个函数中,当需要用到这个功能的时候,调用函数就可以实现)
3、声明函数
def 函数名(参数):
函数体
def:关键字
函数名:标识符,PEP8的命名规则
参数:用来接收从外部传导到函数内部的数据
函数体:实现函数功能的代码块
4.初学者声明函数的步骤:
a.确定函数的功能
b.确定函数名
c.确定参数
确定需不需要参数
确定需要几个参数
(看实现函数的功能需不需要从外面传数据到函数里面)
d.实现函数的功能
e.确定返回值
5.函数的调用
函数名(实参列表)
函数名:调用的函数一定是已经声明过的,想要使用什么功能就调用对应的函数
实参列表:实参是用来给形参赋值的
重点--------函数的调用过程:
0.回到函数声明的地方
1.使用实参给形参赋值
2.执行函数体
3.函数体执行完成后,回到函数调用的位置,再执行后面的代码
注意:
1.函数只有在调用的时候才会执行
2.函数调用的时候一定要保证每个形参都有值
3.一个函数可以调用多次
三、函数的参数
1、位置参数:传参的时候实参按位置的顺序给形参赋值
2、关键字参数:用关键字调用函数的时候,参数的顺序可以打乱,如
def func1(a, b, c):
print(a, b, c)
func1(c=20, b=10, a=80)
结果:80 10 20
3、参数的默认值
在声明函数的时候,参数可以有默认值,但是有默认值的参数在声明的时候必须放在形参的最后面,否则会报错。
在调用函数有默认值参数的时候,有默认值的参数可以传参也可以不传参。
def func1(a, b, c=10):
print(a, b, c)
func1(10,20)
func1(10,20,30)
结果:10 20 10
10 20 30
4、参数个数不定
参数的个数不确定的时候,就在声明函数的时候,形参的前面加一个*,将形参变成元组
调用函数的时候,这个参数会将对应的实参作为元组的元素保存起来
def func1(*x):
print(x)
func1(1,2,3,4,5,6)
结果:(1, 2, 3, 4, 5, 6)
def func1(*x,y):#参数个数不定的时候,个数不定的参数只能放到形参的最后
print(x,y)
func1(1,2,3,4,5,6)
结果:1 (2, 3, 4, 5, 6)
File "C:/Users/VM590/Desktop/Python/我的程序/day7-学生管理系统/练习.py", line 15, in
func1(1,2,3,4,5,6)
TypeError: func1() missing 1 required keyword-only argument: 'y'
作业
1.编写一个函数,求1+2+3+....+N
def my_sum():
sum1 = 0
number = int(input('请输入一个N值:'))
for i in range(1,number+1):
sum1 += i
print(sum1)
my_sum()
结果:请输入一个N值:89
4005
2.编写一个函数,求多个数中的最大值
def max1(*x):
print(max(x))#元组也可以用max实现求其中的最大值
max1(1,2,58,96,74,52,34)
结果:96
3.编写一个函数,实现摇色子的功能,打印n个色子的点数和
法1:
def my_sum():
number = int(input('请输入色字的个数:'))
count = 0
list1 = []
sum1 = 0
while True:
count += 1
import random
n = random.randint(1,6)#random函数会包括结束下标的数字,比如该题是产生1~6之间的随机数字(包括6)
list1.append(n)
if count == number:
for i in list1:
sum1 += i
print(sum1)
break
my_sum()
结果:请输入色字的个数:5
15
法2:
def sum1(x):#x代表色子的个数
sum1 = 0
count = 0
while True:
count += 1
import random
n = random.randint(1,6)
sum1 += n
if count == x:
break
print(sum1)
sum1(50)
结果:188
法3
def my_sum():
number = int(input('请输入N值:'))
sum1 = 0
for item in range(1,number+1):
import random
n = random.randint(1,6)
print(n)
sum1 += n
print('和:',sum1)
my_sum()
结果:请输入N值:5
4
1
4
5
1
和: 15
4.编写一个函数,交换指定字典的key和value。
法1:
dict1 = {'name':'张三','age':18,'weight':50,'hight':1.7}
def change_key_value(dict1):
print(dict((key,value) for value,key in dict1.items()))
change_key_value({'name':'张三','age':18,'weight':50,'hight':1.7})
结果:{'张三': 'name', 18: 'age', 50: 'weight', 1.7: 'hight'}
法2
dict1 = {'name':'张三','age':18,'weight':50,'hight':1.7}
def change_key_value(dict1):#dict1表示一个字典,任何字典都可以
list2 = []
for key,value in dict1.items():
list1 = [value,key]
list2.append(list1)
dict2 = dict(list2) #将列表转化成字典
print(dict2)
change_key_value(dict1)
结果:{'张三': 'name', 18: 'age', 50: 'weight', 1.7: 'hight'}
法3
dict1 = {'name':'张三','age':18,'weight':50,'hight':1.7}
def change_key_value(dict1):
dict2 = {}
for key,value in dict1.items():
dict2[value] = key
print(dict2)
change_key_value(dict1)
结果:{'张三': 'name', 18: 'age', 50: 'weight', 1.7: 'hight'}
5.编写一个函数,三个数中的最大值
def max1(x,y,z):
print(max(x,y,z))
max1(10,8,15)
结果:15
6.编写一个函数,提取指定字符串中的所有的字母,然后拼接在一起后打印出来
def print_str():
str1 = input('请随便输入一串字符:')
str2 =''
for i in str1:
if 'a'<=i<='z' or 'A'<=i<='Z':
str2 += i
print(str2)
print_str()
结果:请随便输入一串字符:jjk1457ADJJHGJ8315&&^%$#@**&&
jjkADJJHGJ
7.写一个函数,求多个数的平均值
def average(*number):
sum1 = 0
count = 0
for x in number:
count += 1
sum1 += x
print('平均数:',sum1/count)
average(10,20,30)
结果:平均数: 20.0
8.写一个函数,默认求10的阶层,也可以求其他数的阶层
def hierarchy(x):
mul1 = 1
for i in range(1,x+1):
mul1 *= i
print(mul1)
hierarchy(10)
结果:3628800
9.写一个函数,可以对多个数进行不同的运算
例如: operation('+', 1,2,3) --->求1+2+3的结果
operation( '-',10,9) --->求10-9的结果
operation( '',2,4,8,10) --->求24* 8* 10的结构
def operation(option,*number):
if option == '+':
sum1 = 0
for item in number:
sum1 += item
print(sum1)
if option == '-':
diff = 0
for item in number:
diff -= item
print(diff)
if option == '*':
mul1 = 1
for item in number:
mul1 *= item
print(mul1)
operation('*',10,25,89,14)
结果:311500