python函数 - 15 函数的作用域

函数的作用域

作用域的定义: 就是变量可以使用的范围

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)

你可能感兴趣的:(python函数,python语言基础)