day10__回顾和作业

一、昨天内容回顾

​ 1、函数的参数

​ 1)实参角度:位置参数、关键字参数、混合参数

​ 2)形参角度:位置参数、默认参数、仅限关键字参数,万能参数

​ 3)形参角度参数顺序:位置参数,*args,默认参数,仅限关键字参数,**kwargs

​ 2、*的魔性用法:

​ 1)函数的定义时:代表聚合

​ 2)函数的调用时:代表打散

​ 3、python中存在的三个空间:

​ 内置名称空间:存储的内置函数:print, input.....

​ 全局名称空间:py文件,存放的是py文件(除去函数,类内部的)的变量,函数名与函数的内存地址的关系

​ 局部名称空间:存放的函数内部的变量与值的对应关系

​ 4、加载顺序:内置名称空间------->全局名称空间------>局部名称空间(执行函数时候)

​ 5、调取顺序:就近原则。 局部名称空间------>全局名称空间----->内置名称空间

​ 1) 局部作用域只能引用全局变量,不能修改。

​ 6、作用域:

​ 1)全局作用域 :内置名称空间+全局名称空间

​ 2)局部作用域:局部名称空间

二、作业:

1、看代码写结果

def func():
    return 1, 2, 3

val = func()
print(val)
print(type(val) == tuple)
print(type(val) == list)


# 输出结果:True   False

2、看代码写结果

def func(*args, **kwargs):
    print(args)
    print(kwargs)
# a. 请将执行函数,并实现让args的值为 (1,2,3,4)
func(1, 2, 3, 4)
func(*[1,2,3,4])
# b. 请将执行函数,并实现让args的值为 ([1,2,3,4],[11,22,33])
func([1,2,3,4],[11,22,33])
# c. 请将执行函数,并实现让args的值为 ([11,22],33) 且 kwargs的值为{'k1':'v1','k2':'v2'}
func([11,22],33,k1='v1',k2='v2')
# d. 如执行 func(*{'武沛齐','金鑫','女神'}),请问 args和kwargs的值分别是?
func(*{'武沛齐','金鑫','女神'})
# e. 如执行 func({'武沛齐','金鑫','女神'},[11,22,33]),请问 args和kwargs的值分别是?
func({'武沛齐','金鑫','女神'},[11,22,33])
# f. 如执行 func('武沛齐','金鑫','女神',[11,22,33],**{'k1':'栈'}),请问 args和kwargs的值分别是?
func('武沛齐','金鑫','女神',[11,22,33],**{'k1':'栈'})

3、看代码写结果

def func(name,age=19,email='123.qq.com'):
    print(name,age,email)
#a执行func('mrxiong'),判断是否可执行,请可以访问name、age、email的值分别是什么?
func('mrxiong')
#b执行func('mrxiong',20),判断是否可执行,请可以访问name、age、email的值分别是什么?
func('mrxiong',20)
#c执行func('mrxiong',20,30),判断是否可执行,请可以访问name、age、email的值分别是什么?
func('mrxiong',20,50)
#d执行func('mrxiong,email='x@qq.com'),断是否可执行,请可以访问name、age、email的值分别是什么?
func('mrxiong',email='x@qq.com')
#e执行func('mrxiong,email='x@qq.com',age=99),断是否可执行,请可以访问name、age、email的值分别是什么?
func('mrxiong',email='x@qq.com',age=99)
#f执行func(name='mrxiong',99),断是否可执行,请可以访问name、age、email的值分别是什么?
func(name='mrxiong',99)
#g执行func(name='mrxiong',99,'111@qq.com'),断是否可执行,请可以访问name、age、email的值分别是什么?
func(name='mrxiong',99,'111@qq.com')

4、看代码写结果

def func(users,name):
    users.append(name)
    return users
result = func(['mrxiong','张三'],'alex')
print(result)
#返回结果:
#['mrxiong', '张三', 'alex']

5、看代码写结果

def func(users,name):
    users.append(name)
    return users
result = func(['mrxiong','张三'],'alex')
print(result)
输出结果:
    ['mrxiong', '张三', 'alex']

6、看代码写结果

a = 10
b = 20
def test(a,b):
    return a ,b
c = test(b,a)
print(c)
输出结果:
    (20, 10)

7、看代码写结果

def a(*args):
    count = 0
    for i in args:
        count += i
    return count
c = a(1,2,3,4,5)
print(c)
输出结果:
15

三、补坑(默认参数的坑,作用域的坑)

1、如果你的默认参数指向的是可变的数据类型,那么你无论调用多少次这个默认参数,都是指向同一个

def func(a,list=[]):
    list.append(a)
    return list
print(func(10,))
print(func(20,))
输出结果:
 [10]
[10, 20]   

2、在函数中,如果你定义了一个变量,但是在定义这个变量之前对其引用了,那么解释器认为语法问题。
你应该在使用之前先定义

count = 1
def func():
    print(count)
    count = 3
func()
输出结果:
UnboundLocalError: local variable 'count' referenced before assignment

3、global 全局

​ 1)、在局部作用域 声明一个全局变量

name = 'alex'
def func():
    global name
    name = 'mrxiong'
print(name)
func()
print(name)
输出结果:
alex
mrxiong

2)可以修改一个全局变量

count = 1
def func1():
    global count
    count += 1
print(count)
func1()
print(count)
输出结果:
    1
    2

4、nonlocal

不能够操作全局于变量。局部作用域,内层函数对外层函数的局部变量进行修改

def wrapper():
    count = 1
    def inner():
        nonlocal count
        count += 1
    print(count)
    inner()
wrapper()
输出结果:
    1
原文地址:https://www.cnblogs.com/mr-xiong/p/13201169.html