函数和函数式编程
-
函数定义;
-
函数调用;
-
过程定义;
-
过程调用;
-
面向过程的编程方法;
示例:函数定义和过程定义
示例:使用函数减少重复代码
为什么要使用函数:
1.减少重复代码
示例:使用函数使程序变得可扩展
2.使程序变得可扩展
示例:函数返回值
编写函数为什么要有返回值,作用:想要这个函数的执行结果。
函数体中可以是一行代码,也可以是一万行代码。这个函数执行的结果是什么,我后面的程序需要这个程序的返回结果。
示例:带参数的函数
学会以下传参方法:位置参数;默认参数;参数组传参;字典参数传参
示例:参数带参数组的函数定义方式
示例:参数带字典的函数定义方式
示例:参数可扩展的函数定义方式
如有疑问,可加入QQ学习群:484601288
?局部变量和与全局变量
?是否可在一个函数中引用另外一个函数呢?
示例:局部变量
# 局部变量:函数里面的变量即为局部变量,只在函数里有效 def change_name(name): print("befor change", name) name = ‘San Zhang‘ # 这个函数就是这个变量的作用域 print("after change", name) name = ‘zhangsan‘ change_name(name) print(name)
示例:全局变量
# 全局变量:在整个程序中都生效的变量,在整个代码的顶层定义的变量就是全局变量 company = ‘ali‘ def change_name(name): company = ‘tengxu‘ print("befor change", name, company) name = ‘zhangsan‘ # 这个函数就是这个变量的作用域 print("after change", name) print(company) name = ‘lisi‘ change_name(name) print(name, company)
示例:局部变量改为全局变量1
在函数里面,默认情况下“字符串”和“常量”,这两类局部变量不能更改全局变量,如果想在函数中将局部变量改为全局变量的方法:改之前申明global,不建议使用这种方法。
# 在函数里面,默认情况下局部变量不能更改全局变量,如果想在函数中将局部变量改为全局变量的方法:改之前申明global,不建议使用这种方法 company = ‘ali‘ # 全局变量 def change_name(name): global company company = ‘tengxu‘ # 局部变量 print("befor change", name, company) name = ‘zhangsan‘ # 这个函数就是这个变量的作用域 print("after change", name) print(‘company: ‘, company) # 执行查看函数调用前打印的情况 name = ‘lisi‘ change_name(name) print(name) print(‘company: ‘, company) # 执行查看函数调用后打印的情况
示例:局部变量改为全局变量2
未像<局部变量改为全局变量1>那样申明global,也将局部变量更改为全局变量了。所以默认不能更改只针对“字符串和整数”外。复杂的数据类型:列表,类,字典,集合都是可以将局部变量改为全局变量。
# 局部变量改全局变量 company = ‘ali‘ # 全局变量 names = [‘zhangsan‘, ‘sili‘, ‘wangwu‘] def change_name(): names[0] = ‘张三‘ print("inside_func: ", names) # 运行查看执行结果 change_name() print(‘ouside_func:‘, names) # 运行查看执行结果
示例:作死的全局变量定义
或许你在其他地方也会看见这种方式,忘掉这种方式,不能使用这种方法,这种在逻辑复杂的代码中不利于调试,尽管是自己写的代码也会如此。
# 不建议使用这种方法 def chang_name(): global name name = ‘zhangsan‘ chang_name() print(name)
示例:使用递归方式实现,传一个值,每次除以2直到不能除为止
递归特性:1、必须有一个明确的结束条件;2、每次进入更深一层递归时,问题规模相比上次递归都应有减少;3、递归效率不高,可能会导致内存资源耗尽
做递归最好的运行方式,采用断点方式调试。
简单的一个递归方式实现传一个值,每次除以2直到不能除为止:
# 传一个值,每次除以2直到不能除为止 def calc(n): print(n) if int(n/2)>0: return calc(int(n/2)) print(‘--->>‘, n) calc(10)
所有示例程序均在Ubuntu16.04系统下的python3.5下成功执行。
如有疑问,可加入QQ学习群讨论:484601288