变量作用域

  • 全局变量

在函数内外都有效的变量就是全局变量(使用global关键字声明)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#声明一个全局变量(不完全正确)
mzj = '全身麻醉剂'(局部里仅仅可以进行访问全局变量,不可以进行其他操作)

#声明一个函数(产生一个局部环境)
def zui():
#在函数中打印mzj变量
print('在函数内部调用变量mzj',mzj)
print('在嘴巴里面拔牙')


#1.正在的环境(函数外部)中是否可以使用 ->变量有效
print('在函数外部调用变量mzj',mzj)
#2.在局部环境中检测变量是否有效 -> 变量有效
zui()

真正的全局变量:
zai外部声明变量后,函数内部使用global关键字对全局变量进行声明才可以在函数内部任意操作,否则在函数内部只能访问,而不能修改
  • 局部变量
1
2
3
4
5
6
7
8
9
10
11
def zui():#定义一个函数相当于局部环境
#定义局部变量
mzj = '局部麻醉剂'
#调用局部变量
print('在局部环境中调用变量mzj',mzj)
print('在嘴巴中拔牙')

#1.在函数外部调用变量看看是否可以使用 -> 不可以访问
#print(mzj)
#2.在函数内部调用变量查看是否可以使用 ->可以访问
zui()
  • #将局部变量提升为全局变量
1
2
3
4
5
6
7
8
9
10
11
12
def zui():
#提升局部变量为全局变量
global mzj
#定义局部变量mzj
mzj = '麻醉剂'
#在局部环境中调用mzj
print('局部环境中调用变量',mzj)

#1.测试函数内部调用
zui()
#2.测是外部环境调用
print('在函数外部调用变量',mzj)

nonlocal

  • 局部变量的局部变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#定义一个函数
def outer():
#定义一个变量
var = 55
#定义一个内部函数
def inner():
#声明外部变量
nonlocal var#当前变量var 不是全局变量也不是局部变量
#在此处使用outer内部定义的var变量
#在此处进行 +1 操作
var = var + 1
print(var)

#调用inner函数
inner()

#调用outer函数
outer()

#递归函数

1
2
3
4
5
6
7
8
9
10
11
12
def digui(num):
#1.打印num变量
print(num)
#2.检测num是否大于0
if num > 0:
#将num -1 传递给函数
digui(num - 1)
else:
#输出一行横线
print('----------')
#3.再次打印num变量
print(num)

lambda表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#定义一个求和的函数
def getsum(no1,no2):
result = no1 + no2
return result

#调用函数
var = getsum(5,9)
print(var)
#lambda表达式(汽车)
getsum2 = lambda no1,no2 : no1 + no2 #lambda表达式自带return

#调用lambda表达式(函数)
var = getsum2(33,55)
print(var)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#带有分支结构的lambda表达式
def getsex(sex):
#检测性别返回单词
if sex == '男':
return 'man'
else:
return 'woman'

#调用函数~
result = getsex('女')
print(result)

getsex2 = lambda sex : 'man' if sex == '男' else 'woman'
#调用函数
result = getsex2('女')
print(result)

偏函数

偏函数:python中偏函数作用是为了修改一个函数的默认值,而设置的一种特殊函数。
作用:修改函数的默认值,产生一个新的函数,功能和原函数一样,只有默认值不一样!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#使用偏函数修改函数的默认值
#必须导入额外的模块
import functools #函数工具模块

#定义一个偏函数
print2 = functools.partial(print,end = '')
#注意 print2函数和print函数功能完全一致,end的默认值不一样
print('#########')
print('@@@@@@@@@')
print('&&&&&&&&&')

print2('#########')
print2('@@@@@@@@@')
print2('&&&&&&&&&')