Python函数基础知识
Python函数基础知识
5月19日课程总结
[var1]
问题:我们为什么需要函数?
答:如果在开发程序时,需要某块代码多次,但是为了提高编写的效率,以及代码的重用,所以把具有独立功能的代码块组成一个个小模块,这就是函数
1.函数范例
函数的定义与调用:
2.空函数
定义一个什么也不用做的空函数,可以用pass语句;pass可以用作占位符,当你还没想好接下来的代码怎么写时,可以先用pass让你的代码运行起来。
3.函数返回值
所谓“返回值”,就是程序中,函数完成一件事后函数得出的算式并且返回给调用者的结果,没有返回值,则默认为None。
[var1]
输入第一行中给出两个不超过100的正整数,分别是系统产生的随机数、以及猜测的最大次数N。随后每行给出一个用户,直到出现负数为止。
4.函数的应用:打印图像以及数学运算
数学运算部分:
运行结果:
6.函数的优势
从理论上说,不用函数,也能够编程,我们在前面已经写了程序,就没有写函数,当然,用python的内建函数姑且不算了。现在之所以使用函数,主要是:
降低编程的难度(分而治之的思想)
代码重用。避免了重复劳动,提供了工作效率。
7.函数的各种变量
1)局部变量
1.局部变量,就是在函数内部定义的变量。
2.不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响。
3.局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用。
2)全局变量
如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量。
全局变量能够在所有的函数中进行访问
如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的
问:不使用global声明全局变量时不能修改全局变量?
答:global的本质是声明可以修改全局变量的指向, 即变量可以指向新的数据。
1). 不可变类型的全局变量: 指向的数据不能修改, 不使用global时无法修改全局变量。
2). 可变类型的全局变量: 指向的数据可以修改, 不使用global时可以修改全局变量。
8.函数中的各种参数
1)形参与实参:
定义时小括号中的参数,用来接收参数用的,称为 “形参”
调用时小括号中的参数,用来传递给函数用的,称为 “实参“
2)默认参数
需求: 定义一函数,计算x值的n次方。那如果计算x平方时只需要传入x值时怎么解决?
默认参数可以降低调用函数的难度。
默认参数注意事项:
有多个参数时,变化大放前面,变化小的放后面;
必选参数在前,默认参数在后。
3)可变参数
可变参数就是传入的参数个数是可变的,可以是 1 个、2 个到任意个,还可以是 0 个。
如果已经有一个 list 或者 tuple,要调用一个可变参数怎么办?
Python 允许你在 list 或 tuple 前面加一个 * 号
把 list 或 tuple 的元素变成可变参数传进去:
largs = [1,2,3]
func(largs[0],largs[1],largs[2])
func(*largs)
4)关键字参数
关键字参数允许传入 0 个或任意个含参数名的参数;
这些关键字参数在函数内部自动组装为一个 dict;
关键字参数用**kwargs;
参数组合是指可以必选参数、 默认参数、 可变参数和关键字参数一起使用。
参数定义的顺序必须是:必选参数、 默认参数、可变参数和关键字参数。
参数总结
[var1]
1) 定义:
匿名函数指一类无需定义标识符的函数与子程序,Python用lambda语法定义匿名函数,只需要用表达式无需声明。(省略了用def声明函数的标准步骤。期间两个变量用冒号分隔。)
以上图片显示出的结果分别为:
30,40
lambda函数的语法只包含一个语句,如下:
lambda函数能接收任何数量的参数,但只能返回一个表达式的值。
2)应用实例:函数作为参数传递
小练习
问题描述1: 有一个整数列表(若干个元素), 要求调整元素顺序,把所有的奇数放在前面,偶数放在后面。
问题描述2:给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
#输入: 数组的记录;0 7 0 2
#输出: 调整后数组的内容; 7 2 0 0
[var1]
1.定义:
已知: 函数可以调用函数。结论: 一个函数在内部调用自己本身,这个函数就是递归数。
需求:
计算阶乘 factorial: n! = 1 * 2 * 3 * … * n
什么是递归函数?
1)阶乘的规律:
2)代码实现:
练习:
递归函数模型:汉诺塔问题
n代表汉诺塔盘子的个数:
n=1,sum=1*(2**1-1)
n=2,sum=3*(2* *2-1)
.
.
.
n=n,sum=2n-1(2n-1)
解决方法图解:
[var1]
1.编程实现 9*9乘法表(循环嵌套的复习)
a = 1
b = 1
print('%d* %d = %d\t' % (a , b,a*b))
for item in range(8):
a += 1
print('%d* %d = %d\t' % (a, b, a * b))
b += 1
print('%d* %d = %d\t' % (a, b, a * b))
2. 用函数实现求100-200里面所有的素数。
提示:素数的特征是除了1和其本身能被整除,其它数都不能被整除的数
def qiusushu():
list = []
for a in range(100, 200):
for i in range(2, int(a-1)):
list.append(int(a % i))
if list.count(0) != 0:
del list[:]
else:
print(a)
qiusushu()
3.用函数实现输入某年某月某日,判断这一天是这一年的第几天?闰年情况也考虑进去。
def runnian():
x = input("请输入的年份:")
y = input("请输入的月份:")
z = input("请输入的日期:")
li = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if ((int(x) % 4 == 0) and (int(x) % 100 != 0)) or (int(x) % 400 == 0):
days = 0
for i in range(1, int(y)):
days += li[i]
if int(y) >= 3:
result = days + int(z) + 1
else:
result = days + int(z)
print(result)
else:
days = 0
for i in range(1, int(y)):
days += li[i]
result = days + int(z)
print(result)
runnian()
4.题目需求:对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
f(13) = 1 ** 2 + 3 ** 2 = 10
f(207) = 2 ** 2 + 0 ** 2 + 7 ** 2 = 53
Python函数基础知识相关教程