Python基础学习6

函数学习要点:
4、函数闭包
5、装饰器
6、内建函数
7、自定义上下文管理器
实践操作代码:
函数闭包(定义:外部函数当中变量被内部函数引用)

#常规函数方式
def func():
   a = 1
   b = 2
   return a+b

#闭包函数
def sum(a):
    def add(b):
      return  a+b    
    return add#用return返回时,要用内部函数名称返回

# add:函数名称或函数的引用
# add() :函数的调用

num1 =  func()
print(num1)
3#输出结果

num2 =  sum(2)#初始化
print(num2(4))# 传递add函数参数值
6#输出结果

#闭包实现计数器
def counter(FIRST=0):
      cnt = [FIRST]
      def add_one():
            cnt[0] +=1
            return cnt[0]    
      return add_one

num5 = counter(5)
num10 = counter(10)
print(num5())
print(num5())
print(num5())
print(num10())
print(num10())
#输出结果
6
7
8
11
12

# a * x + b = y
def a_line(a,b):
    def arg_y(x):
        return a*x+b
    return arg_y

def a_line(a,b):
        return lambda x: a*x+b
    return arg_y

# a=3 b=5
# x=10 y=?
# x=20 y =?

line1 = a_line(3, 5)
print (line1(10))
print (line1(20))

# a=5 b=10,变换a、b值
line2 = a_line(5,10)

def func1( a,b, x)#常规函数需要传递更多参数

摘录闭包函数答疑计数器例子为何用list:

  1. list (因为是内建函数,所以他)的作用域默认是全局。无论哪里进行了操作、处理,都是本身数据变更了。
    2-1. 整型等数据,需要先定义,然后才能使用;且默认的作用域是当前的局部。
    2-2. 如果想用整型进行“计数器”的实现,需要声明成 global 类型的变量。而且需要在函数外面就定义出来,不然就无法重置。
    成功code :
aCounter = 0
def counter(): 
      def add_one():
            global aCounter
            aCounter += 1
            return aCounter
      return add_one

装饰器

import time

print( time.time())# 1970年1月1日到现在走了多少秒
1543722129.949802#输出结果

def timmer(func):
    def wrapper():
        start_time = time.time()
        func()
        stop_time = time.time()
        print("运行时间是 %s 秒 " % (stop_time - start_time))
    return wrapper

@timmer#timmer(i_can_sleep)把函数作为参数传递
def i_can_sleep():
    time.sleep(3)

#start_time = time.time()
i_can_sleep()
#stop_time = time.time()
#print('函数运行了 %s 秒' %(stop_time-start_time))

#装饰器带参数
def new_tips(argv):
    def tips(func):
        def nei(a, b):
            print('start %s %s' % (argv, func.__name__))#func.__name__取函数名字
            func(a, b)
            print('stop')
        return nei
    return tips

@new_tips('add_module')#装饰器带参数
def add(a, b):
    print(a + b)

@new_tips('sub_module')#装饰器带参数
def sub(a, b):
    print(a - b)

print(add(4, 5))
print(sub(7, 3))

内建函数:两种方式查找使用方法(1、help(函数名);2、查看官网文档例如:filter

# filter() map() reduce() zip()

help(filter)#help方法查看函数定义
a=[1,2,3,4,5,6,7]
list(filter(lambda x:x>2 , a))#filter需强制为list类型输出
[3, 4, 5, 6, 7]#输出结果
 
help(map)#help方法查看函数定义
a=[1,2,3]
list(map(lambda x:x ,a))
[1, 2, 3]#输出结果
list(map(lambda x:x+1 ,a))
[2, 3, 4]#输出结果
b=[4,5,6]
list(map(lambda x,y:x+y ,a,b))
[5, 7, 9]#输出结果

help(reduce)#reduce函数不能直接调用,
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'reduce' is not defined
from functools import reduce#要用模块导入才能使用
reduce(lambda x,y: x+y ,[2,3,4],1 )# 参数为:函数、输入值、初始值
10#输出结果
((1+2)+3)+4#计算过程为初始值与列表第一个值开始相加,然后用相加结果继续相加

for i in zip((1,2,3),(4,5,6)):#实现两个元组按顺序俩俩合并
print(i)
#输出结果
(1, 4)
(2, 5)
(3, 6)
dicta = {'a':'aa' , 'b':'bb'}
dicta = zip(dicta.values(),dicta.keys())#实现字典key和value互换
print(dict(dictb))
{'aa' :'a', 'bb'':b'}#输出结果

自定义上下文管理器

fd = open('name.txt')
try:
    for line in fd:
        print (line)
finally:
    fd.close()

with open('name.txt') as f:#精简上面文件打开方法
    for line in f:
        print(line)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,713评论 2 9
  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 3,793评论 0 27
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,068评论 1 32
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,757评论 1 10
  • 今天是2018年5月19日,周六,继续今天的捡拾垃圾,一个纸盒、两个牛奶包、还有一个饮料袋,弯下腰认真地捡起...
    星空_666阅读 141评论 0 0