python之路——10

王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594

复习

    a.函数可读性强,复用性强
def 函数名()
函数体
return 返回值
函数先定义后执行,
b.返回值
1.没有返回值
2.返回一个值
3.返回多个值:多个值用逗号隔开;可用一个或多个等量变量接受
c.参数
1.形参:定义函数
位置参数:必须传
*args 动态参数,接受任意多个,按位置传入的参数
默认参数:可不传
**kwargs 动态参数,可接受任意多,按关键字传入的参数
2.实参:调用函数
按照位置传参数
按照关键字传参数 :可以混用,顺序:位置+关键字
3.默认参数陷阱
如果默认参数的值是一个可变数据类型,那么每次调用函数,如果不传值,就公用一个数据类型资源

学习内容

    1.命名空间
内置命名空间
python解释器一启动就可以使用的名字就存储在内置命名空间
内置的名字在启动解释器的时候就加载进内存
全局命名空间
程序从上之下被执行的过程中依次加载进内存
放置了我们设置的所有变量名和函数名
局部命名空间
函数内部定义的名字
调用函数时,才会产生这个名称空间,函数执行结束,则命名空间消失
规则:
1.局部:可以使用全局和内置
全局:使用内置,不能使用局部
内置:不能使用全局和局部
2.全局定义与内置名字冲突时,会使用全局的名字
如果有,就不找上级;如果自己没有,就找上级;上级没有,找上上级
多个函数,拥有多个独立的局部名字空间,不共享
2.作用域
全局作用域 globals
作用于全局,内置和全局名字空间的名字都属于全局作用域
局部作用域 locals
作用于局部,函数(局部命名空间)
#对于不可变数据类型,局部可查看不可修改; 若要修改, 函数内global声明
3.函数的嵌套定义与调用
nonlocal
4.函数的本质
1.函数名是内存地址
2.函数名可以赋值
3.函数名可以作为容器类型的元素
4.函数名可以作为函数的参数,返回值
5.闭包

代码区

函数嵌套与调用
def outer():
    a = 2

    def inner():
        b = 3

        def inner2():
            nonlocal a
            a += 1
            print('inner2', a)
        inner2()
        print('inner', a)
    inner()
    print(a)


outer()
print(a)

闭包

def outer():
    a = 1

    def inner():
        print(a)
        print(inner.__closure__)
    return inner


inn = outer()
'''
'''
def wrapper():
    money = 1000
    def func():
        name = 'eva'
        print(func.__closure__)
        def inner():
            print(name,money)
            print(inner.__closure__)
        return inner
    return func

f = wrapper()
i = f()
i()
print(wrapper.__closure__)

 作业

#2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
# def func(l):
#     return l[1::2]
# print(func([1,2,3,4,5,6,7,8,9]))

# 3、写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5。
# def func(l):
#     if len(l) > 5:
#         return '大于5啦'
#     else:
#         return '没有大于5啦'
# print(func('sd'))


# 4、写函数,检查传入列表的长度,如果大于2,
# 那么仅保留前两个长度的内容,并将新内容返回给调用者。
# def func(l):
#     if len(l) > 2:
#         return l[0:2]
# print(func([1,1,1,1]))

# 5、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。
# def func(l):
#     dic = {'digit': 0, 'letter': 0, 'space': 0, 'other': 0, }
#     for i in l:
#         if i.isdigit():
#             dic['digit'] += 1
#         elif i.isalpha():
#             dic['letter'] += 1
#         elif i == ' ':
#             dic['space'] +=1
#         else:
#             dic['other'] +=1
#     return dic
# print(func('a'))


# 6、写函数,检查用户传入的对象(字符串、列表、元组)
# 的每一个元素是否含有空内容,并返回结果。
# def func(l):
#     for i in l:
#         if i == ' ':
#             return '存在空内容'
# print(func(''))

#7、写函数,检查传入字典的每一个value的长度,如果大于2,
# 那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
for i in dic:
    print(i)
#    PS:字典中的value只能是字符串或列表

# def func(l):
#     a = []
#     for i in l.keys():
#         a.append(i)
#     for j in a:
#         l[j] = l[j][:2]
#     return l
# print(func({"k1": "v1v1", "k2": [11,22,33,44]}))
#################################################
# def func(dic):
#     for k in dic:
#         if len(dic[k]) > 2:
#             dic[k] = dic[k][:2]
#     return dic
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# print(func(dic))

# 8、写函数,接收两个数字参数,返回比较大的那个数字。
# def func(a,b):
#     if a > b:
#         return a
#     elif a < b:
#         return b
#     else:
#         return '相等'
# print(func(2,2))

# 三元运算
# 变量 = 条件返回True的结果 if 条件 else 条件返回False的结果
#必须要有结果
#必须要有if和else
#只能是简单的情况
# a = 1
# b = 5
# c = a if a>b else b   #三元运算
# print(c)

# 9、写函数,用户传入修改的文件名,与要修改的内容,
# 执行函数,完成整个文件的批量修改操作(进阶)。
# def func(filename, old, new):
#     with open(filename, encoding='utf-8') as f, open('%s.bak'%filename,'w',encoding='utf-8') as f1:
#         for line in f:
#             if old in line:
#                 line = line.replace(old,new)
#             f1.write(line)
#     import os
#     os.remove(filename)
#     os.rename('%s.bak'%filename, filename)
# func('lod', '大家', '你')


# 2、写函数,接收n个数字,求这些参数数字的和。
# def func(*l):
#     sum = 0
#     for i in l:
#         sum = sum + i
#     return sum
# print(func(1,2,3,1,3))
# 3、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
# a=10
# b=20
# def test5(a,b):
#     print(a,b)
# c = test5(b,a)
# # print(c)

# 4、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
# a=10
# b=20
# def test5(a,b):
#     a=3
#     b=5
#     print(a,b)
# c = test5(b,a)
# print(c)
View Code

 

posted @ 2019-03-24 15:05  王二被占用  阅读(132)  评论(0)    收藏  举报