版权声明:本文为博主原创文章,转载请注明作者和出处。https://blog.csdn.net/xq920831/article/details/82216075
开始今天的内容。
1. 局部变量与全局变量
局部变量只在函数中有作用,整个函数就是局部变量的作用域。
全局变量写在函数之外,作用域为整个程序。一般写在头部
很好理解,这里就不多赘述了,给个例子自行理解。
# -*- coding:utf-8 -*-
# Author: Agent Xu
def change_name(name):
print('before change:name --> %s' %name)
name = 'agent xu'
print('after change:name --> %s' %name)
name = 'agent'
change_name(name)
#before change:name --> agent
#after change:name --> agent xu
print(name)
#agent
如果需要在函数内写一个全局变量,则需要先声明该变量为全局变量,然后再赋值。(正常情况下不这么做!!!)
例如:
name1 = 'agent'
def change_name1():
global name1
name1 = 'agent xu'
print(name1)
print(name1)
#agent
change_name1()
#agent xu
print(name1)
#agent xu
另外需要注意的是:除了数字和字符串(列表,字典,集合等数据结构),局部变量改了,全局变量也会跟着改。
name2 = ['agent','xiaohua','xiaosun']
def change_name2(name):
name[0]='agent xu'
print(name)
change_name2(name2)
#['agent xu', 'xiaohua', 'xiaosun']
print(name2)
#['agent xu', 'xiaohua', 'xiaosun']
2. 递归函数
自己调用自己,很重要,常用函数。
这里给个例子,可以测出机器的最大递归次数:
# -*- coding:utf-8 -*-
# Author: Agent Xu
def calculate(n):
print(n)
return calculate(n+1)
calculate(0)
递归的特性:
- 必须有一个明确的结束条件。
- 每次进入更深一层的递归时,问题规模相比上次递归都应有所减少。
- 递归效率不高,递归层次过多会导致栈溢出。
def cal(n):
print(n)
if int(n/2)>0:
return cal(int(n/2))
print('-->%s' %n)
cal(10)
3. 高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就叫做高阶函数。
def adddata(x,y,f):
print(f(x)+f(y))
return f(x)+f(y)
adddata(6,-4,abs)
#10
附
注释小技巧:单行注释:#
多行注释:''' '''
Ctrl+?