首页 > 编程语言 > 详细

Python之第十七天的努力--内置函数2,闭包

时间:2020-06-17 20:47:40      阅读:75      评论:0      收藏:0      [点我收藏+]

01 内置函数2

# int
# print(int(3.6))     # 3



# float
# print(float(3.6),type(3.6))     # 3.6 <class ‘float‘>



# complex   复数
# print(complex(1,2))             # (1+2j)



# divmod    计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。***
# print(divmod(10,3))             # (3, 1)



# round     保留浮点数的小数位数  **
# print(round(3.1415926535,3))    # 3.142



# pow       求x的y次幂.(三个参数为x**y的结果对z取余)**
# print(pow(2,3))                   # 8
# print(pow(2,3,3))                 # 2



# bytes ***
# s1 = ‘哈哈‘
# b = s1.encode(‘utf-8‘)
# print(b)                            # b‘\xe5\x93\x88\xe5\x93\x88‘
# b = bytes(s1,encoding=‘utf-8‘)
# print(b)                            # b‘\xe5\x93\x88\xe5\x93\x88‘



# ord:输入字符找该字符编码的位置
# ascil Unicode
# print(ord(‘a‘))                     # 97
# print(ord(‘中‘))                     # 20013



# chr:输入位置数字找出其对应的字符
# print(chr(97))                      # a
# print(chr(20013))                   # 中



# repr   返回一个对象的string形式(原形毕露)。***
# s1 = ‘hhhh‘
# print(s1)                           # hhhh
# print(repr(s1))                     # ‘hhhh‘
# msg = ‘我叫%r‘%(s1)
# print(msg)                          # 我叫‘hhhh‘



# all:可迭代对象中,全都是True才是True
# l1 = [1,2,3,‘hhh‘,True,[1,2],‘‘]
# print(all(l1))                      # False



# any:可迭代对象中,有一个True 就是True
# s1 = [0,‘hhh‘,[],False,‘‘]
# print(any(s1))                      # True




# print(self, *args, sep=‘ ‘, end=‘\n‘, file=None)
# print(1,2,3,4)
# print(1,2,3,4,sep=‘_‘)              # 1_2_3_4
#
# print(1,end=‘ ‘)
# print(2)
# # 1 2



# list
# l1 = [1,2,3,4]
# l2 = list()



# dict 创建字典的几种方式
# 直接创建
# 元组的结构
# dic = dict([(1,‘one‘),(2,‘two‘),(3,‘three‘)])
# print(dic)
#
# dic = dict(one=1,two=2)
# print(dic)

# fromkeys

# updata



# abs  绝对值  ***
# print(abs(-6))              # 6



# sum  求和   ***
# l1 = [i for i in range(10)]
# print(sum(l1))              # 45
#
# print(sum(l1,100))          # 145



# reversed  返回翻转的迭代器    ***
# l1 = [i for i in range(10)]
# l1.reverse()    # 翻转
# print(l1)

# l1 = [i for i in range(10)]
# obj = reversed(l1)
# print(obj)
# print(list(obj))



# zip 拉链方法          ***
# l1 = [1,2,3,4,5]
# tu1 = (‘zs‘,‘ls‘,‘ww‘)
# s1 = ‘abcd‘
# obj = zip(l1,tu1,s1)
# print(obj)
# for i in obj:
#     print(i)
# # (1, ‘zs‘, ‘a‘)
# # (2, ‘ls‘, ‘b‘)
# # (3, ‘ww‘, ‘c‘)

# print(list(obj))                # [(1, ‘zs‘, ‘a‘), (2, ‘ls‘, ‘b‘), (3, ‘ww‘, ‘c‘)]



# ************** 以下最最最重要
# min max
l1 = [11,2,-1,55,100,-3]
# print(min(l1))                  # -3

# 以绝对值的方式求最小值
# l2 = []
# func = lambda a:abs(a)
# for i in l1:
#     l2.append(func(i))
# print(min(l2))

# def abss(a):
#     return abs(a)
# print(min(l1,key=abss))         # -1

# dic = {‘a‘:3,‘b‘:2,‘c‘:1}
# 求出值最小的键
# print(min(dic))     # a         # min默认会按照字典的键去比较大小
# def func(args):
#     ‘‘‘
#     第一次:
#     args:    ‘a‘     返回值:dic[‘a‘]    记录:3
#     第二次:
#     args:    ‘b‘     返回值:dic[‘b‘]    记录:2
#     第一次:
#     args:    ‘c‘     返回值:dic[‘c‘]    记录:1
#     ‘‘‘
#     return dic[args]
# print(min(dic,key=func))
# 优化
# print(min(dic,key=lambda args:dic[args]))

# l2 = [(‘zs‘,18),(‘ls‘,33),(‘ww‘,22),(‘kk‘,30)]
# print(min(l2))                                # (‘kk‘,30)
# print(min(l2,key=lambda x:x[-1]))             # (‘zs‘, 18)



# sorted
# l1 = [11,22,33,1,5,8,7]
# l2 = sorted(l1)
# print(l1)                   # [11, 22, 33, 1, 5, 8, 7]
# print(l2)                   # [1, 5, 7, 8, 11, 22, 33]

# l2 = [(‘zs‘,18),(‘ls‘,33),(‘ww‘,22),(‘kk‘,30)]
# print(sorted(l2))           # [(‘kk‘, 30), (‘ls‘, 33), (‘ww‘, 22), (‘zs‘, 18)]
# print(sorted(l2,key=lambda x:x[-1]))    # 返回列表 [(‘zs‘, 18), (‘ww‘, 22), (‘kk‘, 30), (‘ls‘, 33)]
# print(sorted(l2,key=lambda x:x[-1],reverse=True))   # [(‘ls‘, 33), (‘kk‘, 30), (‘ww‘, 22), (‘zs‘, 18)]



# filter   类似列表推导式的筛选模式
# l1 = [2,3,4,1,6,7,8]
# print([i for i in l1 if i > 3])       # [4, 6, 7, 8]      # 返回列表
# ret = filter(lambda x:x > 3,l1)                           # 返回的是迭代器
# print(list(ret))                        # [4, 6, 7, 8]



# map    列表推导式的循环模式
# l1 = [1,4,9,16,25]
# print([i**2 for i in range(1,6)])       # [1, 4, 9, 16, 25]   # 返回列表
# ret = map(lambda x:x**2,range(1,6))                           # 返回的是迭代器
# print(list(ret))                        # [1, 4, 9, 16, 25]



# reduce
from functools import reduce
def func(x,y):
    ‘‘‘
    第一次: x  y: 11  2     x + y =     记录:13
    第二次: x = 13  y = 3   x + y =     记录:16
    第三次: x = 16  y = 4   x + y =     记录:20


    ‘‘‘
    return x + y
l = reduce(func,[11,2,3,4])
print(l)

02 闭包

  1. 整个历史中的某个商品的平均收盘价。什么叫平局收盘价呢?就是从这个商品一出现开始,每天记录当天价格,然后计算他的平均值:平均值要考虑直至目前为止所有的价格。

? 比如大众推出了一款新车:小白轿车。

? 第一天价格为:100000元,平均收盘价:100000元

? 第二天价格为:110000元,平均收盘价:(100000 + 110000)/2 元

? 第三天价格为:120000元,平均收盘价:(100000 + 110000 + 120000)/3 元

# 方案一
l1 = []     # 全局变量   数据不安全
def make_averager(new_value):
    l1.append(new_value)
    total = sum(l1)
    averager = total/len(l1)
    return averager
print(make_averager(100000))
print(make_averager(110000))
# 很多代码。。。。可能受影响
print(make_averager(120000))
print(make_averager(90000))
# 方案二:数据安全,  l1 不能是全局变量
# 闭包

def make_averager():
    l1 = []
    def averager(new_value):
        l1.append(new_value)
        total = sum(l1)
        return total/len(l1)
    return averager
avg = make_averager()       # averager
print(avg(100000))
print(avg(110000))

技术分享图片

技术分享图片

  1. # 闭包
    # 1.闭包只能存在嵌套函数中
    # 2.内层函数对外层的非全局变量的引用,就会形成闭包
    # 被引用的非全局变量也称作自由变量,这个自由变量会与内层函数产生一个绑定关系
    # 自由变量不会在内存中消失。
    
    # 闭包的作用:保证数据安全。
    
  2. 如何判断一个嵌套函数是不是闭包

    1.闭包只能存在嵌套函数中

    2.内层函数对外层的非全局变量的引用,就会形成闭包

    # # 例一:
    # def wrapper():
    #     a = 1
    #     def inner():
    #         print(a)
    #     return inner
    # ret = wrapper()
    # # 是闭包
    
    # # 例二:
    # a = 2
    # def wrapper():
    #     def inner():
    #         print(a)
    #     return inner
    # ret = wrapper()
    # # 不是闭包
    
    # # 例三:
    # 
    # def wrapper(a,b):
    #     def inner():
    #         print(a)
    #         print(b)
    #     return inner
    # a = 2
    # b = 3
    # ret = wrapper(a,b)
    # # 是闭包
    

    如何用代码获取闭包:

    # 如何用代码获取闭包
    # 函数名.__code__.co_freevars 查看函数的自由变量
    
    # def wrapper(a,b):
    #     def inner():
    #         print(a)
    #         print(b)
    #     return inner
    # a = 2
    # b = 3
    # ret = wrapper(a,b)
    # print(ret.__code__.co_freevars)     # (‘a‘, ‘b‘)
    
  3. 重点:什么是闭包?闭包有什么作用?

Python之第十七天的努力--内置函数2,闭包

原文:https://www.cnblogs.com/szheng/p/13154589.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!