python note 10 函数变量

1、命名空间

#内置命名空间 —— python解释器
  # 就是python解释器一启动就可以使用的名字存储在内置命名空间中
  # 内置的名字在启动解释器的时候被加载进内存里
#全局命名空间 —— 我们写的代码但不是函数中的代码
  # 是在程序从上到下被执行的过程中依次加载进内存的
  # 放置了我们设置的所有变量名和函数名
#局部命名空间 —— 函数
  # 就是函数内部定义的名字
  # 当调用函数的时候 才会产生这个名称空间 随着函数执行的结束 这个命名空间就又消失了

#在局部:可以使用全局、内置命名空间中的名字
#在全局:可以使用内置命名空间中的名字,但是不能用局部中使用
#在内置:不能使用局部和全局的名字的

2、作用域

# 全局作用域 —— 作用在全局 —— 内置和全局名字空间中的名字都属于全局作用域 ——globals()
# 局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域) ——locals()

# 对于不可变数据类型 在局部可是查看全局作用域中的变量
# 但是不能直接修改
# 如果想要修改,需要在程序的一开始添加global声明
# 如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将对全局的变量有效

 3、全局变量和局部变量

a = 10
def func():
    a = 20
    print(a)
func()
#输出10

4、global用法

1. 可以把全局中的内容引入到函数内部

2. 如果没有则在全局创建一个变量

a = 10 # 全局变量本身就是不安全的, 不能随意修改, 闭包
def func():
    global a  
    a = 20
   print(a)
func()
#输出20

5、nonlocal用法(没找到会报错)

def outer():
    a = 10
    def inner(): # 在inner中改变a的值
        nonlocal a # 寻找外层函数中离他最近的那个变量
        a = 20
    inner()
    print(a)
outer()

6、案例说明

a = 1
def fun_1():
    a = 2
    def fun_2():
        nonlocal a
        a = 3
        def fun_3():
            a = 4
            print(a)
        print(a)
        fun_3()
        print(a)
    print(a)
    fun_2()
    print(a)
print(a)
fun_1()
print(a)
#输出1
#2
#3
#4
#3
#3
#1

7、例题

1、此题需注意是个大坑

def extendlist(val,list=[]):
    list.append(val)
    return list

list1 = extendlist(10)
list2 = extendlist(123,[])
list3 = extendlist('a')

print('list1=%s' %list1)
print('list2=%s' %list2)
print('list3=%s' %list3)
#输出
# list1=[10, 'a']
# list2=[123]
# list3=[10, 'a']

2、

def func():
    result = []
    hua = ["红心","草花","黑桃","方块"]
    shuzi = [2,3,4,5,6,7,8,9,10,'J','Q','K','A']
    for i in hua:
        for j in shuzi:
            result.append([i,j])
    return result
print(func())

3、

def calc(a,b,c=2,d=4):
    return (a+b)*(c-d)
print(calc(1,2,5,d=4))
print(calc(1,2,c=5,4))#会报错需注意

4、

def func(*args):
    sum = 0
    for i in args:
        sum = sum + i
    print(sum)
func(1,2,3)

5、

def func(*args):#打散
    print(args)
func(*[1,2,3,4],*"你好啊")
#输出(1, 2, 3, 4, '你', '好', '啊')

 6、九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print("%sx%s=%s" %(i,j,i*j),end=" ")
    print()
原文地址:https://www.cnblogs.com/P-Z-W/p/10584638.html