作用域的定义: 就是变量可以使用的范围
1.全局变量
# 第一种: a = 100 #全局变量 作用域:从定义开始到整个文件结束都可以使用 print(a) #>>>100 # 第二种: if True: b = 200 #这也是全局变量,如果if条件为假,则会报错 print(b) #>>>200 # 注意:当前这个语句是否能执行 # 第三种: flag = True while flag: c = 300 #这也是全局变量 flag = False print(c) #>>>300 # 总结:选择结构和循环结构不会影响变量的作用域
2.局部变量--->定义在函数里面
# 第一种: def foo(): print('hello') d = 400 #局部变量 foo() # print(fa) #>>>报错 fa未定义 # 总结:a.函数中定义的变量的作用域就是整个函数.从定义开始到函数结束 # b.函数是不会产生作用域的 # 第二种: e = 500 def foo_1(): print('hello') e = 600 print(e) #>>>600 foo_1() print(e) #>>>500 # 总结:如果全局变量和局部变量同名,局部变量作用域内使用的是局部变量 # 第三种: #如果想在函数内的局部变量升级为全局变量,就加关键字global def foo_2(): global f f = 700 #f是全局变量 print(f) #>>>700 foo_2() print(f) #>>>700 # 第四种: # f通过global升级为了全局变量,在其他函数里面照样可以调用. def foo_3(): print(f) foo_3() #>>>700
3.将函数作为变量
# 第一种: # 定义一个函数 def foo_4(): print('hello hanbo') # 直接调用函数 foo_4() # 可以将函数名作为值传给一个变量赋值.赋值后就可以使用变量去调用函数 g = foo_4 g() # 第二种: def foo_5(name): return 'Hi'+ name h = foo_5 # 使用函数名给变量赋值后,通过变量去调用函数和直接通过函数名调用函数是一样的 print(h('hanbo'))
4.将函数作为函数的参数
# 例如:写一个函数计算两个数的结果,怎么计算由调用者决定 def cacul(num1, num2, fn): return fn(num1, num2) def sum(*numbers): sum = 0 for x in numbers: sum += x return sum def mul(*numbers): sum = 1 for x in numbers: sum *= x return sum print(cacul(10, 20, mul)) # 用处:这个主要用到对数据的操作不确定,怎么操作由用户决定的时候
5.函数作为返回值
# 例如:输入两个数,如果参数是+,返回求和的操作,如果参数是-,就返回求差的操作. def operation(char): def diff(*nums): #可以在函数中定义函数,在函数里面定义的函数不能在外面直接调用 sum = nums[0] for x in range(1, len(nums)): sum -= nums[x] return sum def sum1(*nums): #可以在函数中定义函数,在函数里面定义的函数不能在外面直接调用 sum = nums[0] for x in range(1, len(nums)): sum += nums[x] return sum if char == '-': return diff if char == '+': return sum1 print(operation('-')(10, 5, 2)) #>>>3 print(operation('+')(10, 5, 2)) #>>>17 # diff(10, 5, 2) >>>报错 不能在外面调用
6.匿名函数
(1) 定义匿名函数: 作为函数的参数和函数的返回值的时候来用的.
注意: 匿名函数只有函数的声明 没有函数的实现.
(2) 匿名函数的格式
lambda 形参列表: 返回值表达式
# 例如: fn = lambda x, y:x + y print(fn(10, 20)) # 练习1:写一个数的平方 fx = lambda x:x ** 2 print(fx(6)) # 练习2:写一个匿名函数去获取指定列表下指定索引的值. foo = lambda list1,index:list1[index] print(foo([2, 3, 4, 5],1))
(3)使用匿名函数
a. 将匿名函数作为函数的参数
def cacul(num1, num2, fn): return fn (num1, num2) result = cacul(10, 20, lambda x, y:x+y) print(result)
b. 将匿名函数作为返回值
def operation(char): if char == '+': return lambda x, y:x+y if char == '-': return lambda x, y:x-y if char == '*': return lambda x, y:x*y if char == '/': return lambda x, y:x/y result = operation('+')(9, 3) print(result)