一、引言
Python作为一门流行的编程语言,其前景一直是编程界的热门话题。Python简洁的语法、强大的标准库和丰富的第三方库使其在众多领域都有广泛的应用,从网站开发、数据分析、人工智能到科学计算等。随着数据科学和人工智能的兴起,Python的需求持续增长,成为了许多初学者和转行人士的首选语言。
根据业界调查,Python的流行度持续位于顶尖位置。技术发展的趋势表明,Python在未来仍然是一个值得投资学习的语言,不仅因为其在当前的技术市场中的需求,还因为它在教育、科研和自动化等领域的扩展性。
二、第七章
1.函数
# Author : zzd
# Date : 2016/3/4 17:22
# 函数
"""
什么是函数:
函数是执行特定任务和完成特定功能的一段代码
为什么需要函数:
提高代码可复用性
隐藏实现细节
提高可维护性
提高可读性
函数的创建:
def 函数名([输入参数]):
函数体
[return xxxx]
"""
"""
在函数调度过程中,进行参数的传递
如果是不可变对象,在函数体的修改不会影响实参的值
如果是可变对象,在函数体的修改会影响到实参的值
"""
def cale(a,b): # a,b为形参
return a + b
if __name__ == '__main__':
a = cale(10,20) # 10,20 是实参
print(a)
b = cale(b=100,a=10) # 指定参数赋值
print(b)
2.函数返回值
# Author : zzd
# Date : 2016/3/4 18:55
# 函数返回值
"""
函数返回值:
如果函数没有返回值 return可以不写
函数的返回值,如果是一个,直接返回类型
函数返回值,如果是多个,返回结果为元组
"""
# 函数返回多个值,结果为元组
def fun(num):
odd = []
even = []
for i in num:
if i % 2 == 0 :
odd.append(i)
else:
even.append(i)
return odd,even
if __name__ == '__main__':
lists = [10,23,45,23,85,12]
print('元组:',fun(lists))
# 函数返回多个值,可以使用下标取值
print('列表1',fun(lists)[0])
print('列表2',fun(lists)[1])
# for i,j in fun(10):
# print(i)
# print(j)
3.函数默认值
# Author : zzd
# Date : 2016/3/4 19:49
def fun(a,b=20):
# 这里的为end='\t'也是给end指定传参,这样就不会使用默认值end='\n'
# def print(self, *args, sep=' ', end='\n', file=None):
print('begin1',end='\t')
print('beigin2')
return a+b
if __name__ == '__main__':
a = fun(10)
print('未给b传参,则b使用默认值',a)
b = fun(10,30)
print('给a,b指定传参,则默认值失效',b)
4.位置参数和关键字参数
# Author : zzd
# Date : 2016/3/4 20:01
# 函数得参数定义
"""
个数可变得位置参数:
定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
使用*定义个数可变的位置形参
结果为一个元组
个数可变的关键字形参:
定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
使用**定义个数可变的关键字形参
结果为一个字典
"""
def fun1(*args):
print(args,type(args))
def fun2(**args):
print(args,type(args))
if __name__ == '__main__':
fun1(10,20,30)
fun2(a=10,b=20,c=30)
5.参数总结
# Author : zzd
# Date : 2016/3/4 21:07
# 参数总结
def fun(a,b,c):
print('a={0},b={1},c={2}'.format(a,b,c))
def fun2(a,b,c,d):
print('a={0},b={1},c={2},d={3}'.format(a, b, c,d))
if __name__ == '__main__':
fun(10,20,30) # 位置传参
fun(a=10,b=20,c=30) # 关键字传参
lst = [10,20,30]
fun(*lst) # 使用lst传参的时候,需要使用*,将列表中的元素依次传给函数fun()
dic = {'a':10,'b':20,'c':30}
fun(**dic)
6.变量的作用域
# Author : zzd
# Date : 2016/3/4 21:31
# 变量的作用域
"""
变量的作用域:
程序代码能访问该变量的区域
根据变量的有效范围可分为:
局部变量:
在函数内定义并使用的变量,只有在函数内部有效,
局部变量使用global声明,这个变量就会变成全局变量
全局变量:
函数体外定义的变量,可作用于函数内外
"""
b = 'hello python'
def fun():
a = 'hello word'
global c
c = 'hello java'
print('局部变量',a)
print('global局部变量转全局变量',c)
if __name__ == '__main__':
print('全局变量', b)
fun()
# global将局部变量转为全局变量,定义在fun()函数中,需要先调用fun()函数,才能使用全局变量c
print('global局部变量转全局变量',c)
7.递归函数
# Author : zzd
# Date : 2016/3/4 21:48
#递归函数
"""
什么是递归函数?
如果在一个函数的函数体内调用了该函数本身,这个函数就成为递归函数
递归的组成部分?
递归调用与递归终止条件
递归的调用过程?
每递归调用一次函数,都会在栈内存分配一个栈帧
每执行完一次函数,都会释放相应的空间
递归的优缺点?
缺点:占用内存多,效率底下
优点:思路和代码简单
"""
def fun(n):
if n == 1:
return 1
else:
return n * fun(n-1)
if __name__ == '__main__':
print(fun(6))
8.斐波那契
# Author : zzd
# Date : 2016/3/4 22:09
# 斐波那契
"""
fun(6)
fun(5) fun(4)
fun(4) fun(3) fun(3) fun(2)
fun(3) fun(2) fun(2) fun(1) fun(2) fun(1) .
fun(2) fun(1) . . . . . .
. . . . . . . .
. . . . . . . .
1 1 1 1 1 1 1 1
"""
def fun(n):
if n == 1:
return 1
elif n == 2:
return 1
else:
return fun(n-1) + fun(n-2)
if __name__ == '__main__':
print(fun(6))