day10-markdown总结

1.匿名函数

函数名 = lambda 参数列表:返回值
函数名(实参)
sum1 = lambda x, y:x*y
def sum1_a(x, y):
return x*y

2.作用域
函数的调用过程是一个全栈的过程
全局变量:函数和类外面声明的变量都是全局变量,作用域:从声明到程序结束
局部变量:在函数/类里面声明的变量时局部变量,作用域:从声明到函数结束
3.递归函数(能不用就不用)

a.找临界值(结束循环)
b.找关系(上次循环和本次循环的关系f(n)和f(n-1)的关系)
c.根据f(n-1)实现f(n)的功能

4.模块的使用
一个py文件就是一个模块

2.函数作为变量

在python中,函数就是一种特殊的类型。声明函数的时候其实就是在声明类型是function个的变量
变量能做的事情,函数都可以做
1.函数给其他变量赋值

def func1():
    print('hello python')
c = func1   #c也是一个函数

2.函数作为列表的函数

list1 = ['a', '0, 100]
list2 = []
list3 = []
for x in range(10):
    def func2():
        print(x+y, end=' ')
        return x+y
    list2.append(func2)
    list3.append(func2(2))
#list2中每个元素的值都是函数
print(list2)
print(list3)
list2[0]就是一个函数
func = list2[0]
print(func(100))
直接将函数作为列表的元素
funcs = [func1]
funcs[0]()

3.将函数作为字典的值

operation = {'+':lambda x, y:x+y, '-':lambda x, y:x-y}
result = operation['*'](10, 20)
print(result)

4.函数作为函数的参数(回调函数)

def cleac_kitchen(time):
    print('%s,打扫厨房' % time)
    print('收费200')
    return 200
def clean_floor(time):
    print('在%s,做地板清洁服务' % time)
    print('收费100元')
    return 100
#在指定的时间叫指定的服务
def call_service(time, service):
    service(time)
#将函数作为参数,传给其他函数
call_service('上午十点', cleac_kitchen)

5.函数作为函数的返回值

def operation(operetor:str):
    if operetor == '+':
        def my_sum(*nums):
            sum1 = 0
            for num in nums:
                sum1+=num
            print(sum1)
        #将求和的函数返回
        return my_sum()
#operation('+')函数
operation('+')(1, 3)

3.生成器和生成式

1.可以吧迭代器看成一种容器,类似于列表。生成器就是来生成迭代器。

a是生成器,能够生成0-9中的所有数字
a = (x for x in range(10))
print(a,type(a))

2.生成器和迭代器都是通过next来获取里面的数据

print(next(a))

生成式:产生一个迭代器的表达式
3.通过键生成式产生的迭代器转换成一个列表。

a = (char for char in 'hello python')
a = (char for char in 'he123llo python' if '0'<char<'9' )
print(next(a))
print(next(a))
list1 = [x for x in range(10)]
print(list1, type(list1))

4.将生成器转化成列表

list1 = [(x for x in range(10))]
print(list1)

5.将生成器转换成字典

注意:容器类型的元素是元祖,并且元祖中有且只有两个元素,才能转换成元祖
dict1 =dict([(x, x*2) for x in range(10)])
print(dict1)

练习:用一句代码实现交换一个字典中的key和value的值

dict3 = {'a':1, 'b':2}
dict2 = ((dict3[key],key) for key in {'a':1, 'b':2})
print(dic2)

4.生成器

1.只要函数中有yield关键字,那么这个函数就会变成一个生成器。
a.有yield的函数,在调用函数的时候不再是获取返回值,而是产生一个生成器的对象,生成器对象中保留的是函数体。
b.当通过next获取生成器中的数据的时候,才会执行函数体,执行到yield并且将yield后面的结果作为生成的数据返回。同时记录结束的位置,下次调用next的时候,从上次结束的位置接着往后执行。

def func2():
    print('abc')
    for x in range(10):
        yield x
        print('aaa')
# 注意:函数中只要有yield,不管函数的调用结果,都是生成器
def func3(x):
    print('abc')
    if x > 10:
        yield 100
    return 20
print(func2(), type(func2()), type(func2()))
#这儿的func2()是一个生成器
gen = (func2())
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
gen2 = func3(1000)
print(gen2)

练习:写一个生成器,可以产生斐波那契数列

def fei_bo(n):
    yield 1
    yield 1
    f1 = 1
    f2 = 1
    while True:
        yield f1+f2
        f1,f2 = f2, f1+f2
fei = fei_bo()
for _ in range(6):
    print(next(fei))

生成器和生成式产生的对象就是迭代器

  1. 将列表转换成迭代器对象
    迭代器(iter)
iter1 = iter([1, 2, 3, 4])
print(iter1)
print(next(iter1))
print(next(iter1))
for item in iter1:
    print(item)

5.文件操作

1.程序中不管操作任何文件,不管怎么操作,过程都是:打开文件,然后再操作(读,写) _>关闭文件
2.做数据持久化,本地化,都要使用文件来保存数据。(数据库文件、txt文档、json文件、plist/xml、二进制文件(图片,视频等))。程序中通过变量、列表、字典等保存的数据,在程序结束后都会被销毁

打开文件(open)

open(文件地址,打开方式,encoding=编码方式)
a.文件地址:告诉open函数要打开的是哪个文件,填文件路径(可以填绝对路径,也可以填相对路径)
绝对路径:(一般不用)
相对路径;./相对路径(相对于当前文件所在的目录)
../相对路径(相对于当前文件所在目录的上一级)
b.打开方式:获取文件内容以读的形式打开,往文件中写内容就以写的形式打开
'r'-->读(默认值),读出来的内容以文本(str)的形式返回
'rb/br'-->读,读出来的内容(bytes)以二进制的形式返回。
'w'-->写,写文本到文件中
'wb/bw'-->写,写二进制数据到文件中
'a'-->写,追加
c.编码方式:以文本的 形式读和写的时候才需要设置编码方式。
utf-8:万国码
gbk:只支持中文
d.open函数的返回值是被打开的文件对象

2.关闭文件

文件对象.close()

打开文件,f就是被打开的文件对象

f = open('./files/test2.txt', 'r', encoding='utf-8')
# 获取文件中的所有的内容,将结果返回给content保存
content = f.read()
print(content)
f.close()
# readline 就是读一行
f1 = open('./files/test2.txt', 'r', encoding='utf-8')
# 从文件开始读到第一行结束
content = f1.readline()
print(content)
# 从第二行开始,读到第二行结束
print(f1.readline())
# 从第三上开始,读到第三行结束
print(f1.read())
f1.close()

b.写操作

'w'-->写操作,完全覆盖文件的内容
'a'-->写操作,在原文件的内容后去追加新的内容
f = open('./files/test2.txt', 'w', encoding='utf-8')
f.write('程序员的诗词')
f.close

4.文件不存在的情况

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

推荐阅读更多精彩内容

  • 我居北海君南海,寄燕传书谢不能 春风桃李一杯酒,江湖夜雨十年灯 --------------《寄黄几复》- 我走过...
    污林圣手路公子阅读 395评论 0 0
  • 文/雒宏军 县城里常有店铺开张与关门,这是经济规律,谁也阻挡不了。长盛不衰的的却是“某某辅导中心”或者“某某英语学...
    雒宏军的菜园子阅读 236评论 2 3
  • 每到周五我就会放肆狠刷一下朋友圈,心里有个声音在叫嚣:管它呢,反正明天不上班,想睡多晚都可以…… 于是刷圈的结果就...
    千年一眼阅读 606评论 0 2