函数
没有函数的时候,问题在哪儿?
1.同样一个功能的代码需要重复的写多次
2.当功能发生改变的时候,需要修改多个地方
怎么解决这个问题?
使用函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
函数的定义
-
函数:就是对实现某一特定功能的代码块的封装
-
作用:封装(将功能绑定在一个函数中,想要使用这个功能的时候,直接调用函数)
-
怎么声明函数(重点):
def 函数名(参数列表):
'''函数说明'''
函数体
def: 是python中声明函数的关键字
函数名: 标识符。PEP8。见名知义(看到函数名要大概知道函数的功能)
函数说明: 对函数的功能和参数以及返回值进行说明
(): 是固定格式
参数列表:(形参列表)参数名1,参数名2,参数名3...。
参数的功能是用来接收从外部传到函数内部的数据
函数体:实现函数功能的代码块,可能会包含一个return语句 -
初学者声明函数的步骤:
a.确定函数的功能
b.确定函数名
c.确定参数:
确定需不需要参数
确定需要几个参数
(看实现函数的功能需不需要从外面传数据到函数里面)
d.实现函数的功能
e.确定返回值 -
函数的调用(重点)
函数名(实参列表)
函数名:调用的函数一定是已经声明过的,想要使用什么功能就调用对应的函数
实参列表:实参是用来给形参赋值的
-
函数的调用过程(重点):
0.回到函数声明的地方
1.使用实参给形参赋值
2.执行函数体
3.函数体执行完成后,回到函数调用的位置 -
注意(重点):
1.函数只有在调用的时候才会执行
2.函数调用的时候一定要保证每个形参都有值
3.一个函数可以调用多次
# 写一个函数,计算两个数的和
def my_sum(number1, number2):
# (这儿写函数的功能的描述)求两个数的和
# :param number1: 提供第一个数,int
# :param number2: 提供第二个数,int
# :return: 对返回值进行说明
print(number1, number2)
print('=====')
print(number1+number2)
# 函数的调用一定要写在函数的声明后面
my_sum(10, 300)
# 练习:声明一个函数,功能是打印10个*(**********)
# 调用这个函数
def print_star():
print('*'*10)
print_star()
print_star()
结果:
10 300
=====
310
**********
**********
函数的参数
- 位置参数
# 参数的作用: 从函数的外面给函数传值
# 传参的时候,实参按顺序给形参赋值
def func1(a, b, c):
print(a, b, c)
func1(10, 20, 30)
结果:
10, 20, 30
- 关键字参数
# 调用函数的时候:
# 函数名(参数=值)
func1(b=20, a=10, c=30)
结果:
10, 20, 30
- 说明:位置参数和关键字参数可以混着来
def func11(a, b='cc', c='bb', d='a'):
print(a,b,c,d)
func11(10, d='100')
结果:
10 cc bb 100
- 参数的默认值
- python中函数声明的时候参数可以设置默认值,有默认值的参数必须放在参数列表的最后
- 调用参数有默认值的函数,有默认值的参数可以传参也可以不传参
def func2(b, a=10, c=100):
print(a, b, c)
func2(10, 20, 30)
func2(10, 20)
结果:
10 cc bb 100
- 参数个数不定
- 函数参数的个数不确定的时候,就在声明函数的时候,形参的前面加一个*,将形参变成元祖。
- 调用函数的时候,这个参数会将对应的实参作为元祖的元素保存起来
# 写一个函数,求多个数的和
def my_sum(*numbers):
print(numbers)
sum1 = 0
for item in numbers:
sum1 += item
print(sum1)
my_sum(10, 20, 22, 10, 20)
结果:
(10, 20, 22, 10, 20)
82
- 注意:参数个数不定,可以是形参中的一部分是不定的
#个数不确定的参数要放到放参数的最后
def func1(char, *numbers):
print(char, numbers)
func1('a', 10, 20, 39)
# 参数个数不定,也可以不传参,对应的参数的值就是一个空的元祖
func1('a')
结果:
a (10, 20, 39)
a ()
因为内容还待完善所以下面给一个较充足的连接供参考
函数链接

练习
- 编写一个函数,求1+2+3+...+N。
def func1(n):
sum1 = 0
for x in range(1,n+1):
sum1 += x
print(sum1)
func1(100)
结果:
5050
- 编写一个函数,求多个数中的最大值。
def func1(*number1):
n = max(number1) #直接取出最大值用MAX方法
print(n)
func1(10,20,22,-12,20)
结果:
22
- 编写一个函数,实现摇色子的功能,打印n个色子的点数和。
def func1(number1):
import random #调用random模块
sum1 = 0
for _ in range(number1):
n1 = random.randint(1,6)
sum1 += n1
print(sum1)
func1(5)
结果:
14
- 编写一个函数, 交换指定字典的key和value。
def func1(list):
list2 = {}
for x in list:
y = list[x] #把key和‘值’交换
list2[y] = x
print(list2)
func1({'as':'sd','aa':'dd'})
结果:
{'sd': 'as', 'dd': 'aa'}
- 编写一个函数,三个数中的最大值。
def func1(a,b,c):
list1 =[]
list1.append(a)
list1.append(b)
list1.append(c)
n = max(list1) #添加到列表中用MAX方法
print(n)
func1(20, 20, 33)
结果:
33
- 编写一个函数, 提取指定字符串中的所有的字母,然后拼接在一起后打印出来。
def func1(str1):
str2 = ''
for x in str1:
if ('a'<=x<='z') or ('A'<=x<='Z'): #判断是否为字母
str2 += x
print(str2)
func1('56a5sd41asdf44xd%%%s54dasd')
结果:
asdasdfxdsdasd
- 写一个函数,求多个数的平均值。
def func1(*number1):
sum1 = 0
for x in number1:
sum1 += x
ave = sum1/len(number1) #除于元组的长度
print(ave)
func1(12,54,6,4)
结果:
19.0
- 写一个函数,默认求10的阶层,也可以求其他数的阶层。
def func1(number1):
sum1 = 1
for _ in range(number1-1): #遍历取值到1,然后相乘
sum1 *= number1
number1 -= 1
print(sum1)
func1(10)
结果:
3628800
- 写一个函数,可以对多个数进行不同的运算。
def func1(char,*number1):
if char == '+':
sum1 = 0
for x in number1:
sum1 += x
print(sum1)
if char == '-':
sum1 = (number1[0])*2 #让被减数先乘2,再减去遍历后的每一个数,等于拿第一个数去减后面的数
for x in number1:
sum1 -= x
print(sum1)
if char == '*':
sum1 = 1
for x in number1:
sum1 *= x
print(sum1)
func1('+', 2, 4, 5, 10)
func1('-', 2, 4, 5, 10)
func1('*', 2, 4, 5, 10)
结果:
21
-21
400
网友评论