文章目录

  • 前言
  • Day 01
    • 一、python的历史和种类
    • 二、安装python解释器以及配置环境变量
    • 三、变量、常量和注释
  • Day 02
  • Day 03
  • Day 04
  • Day 05
  • Day 06
    • 一、初识函数
    • 二、函数的结构与调用
    • 三、函数的返回值
    • 四、函数的参数
  • Day07
    • 今日内容大纲
    • 昨日内容回顾
    • 今日总结
  • Day08
    • 今日内容大纲
    • 昨日内容回顾
    • 今日总结
  • Day09
  • Day 10
  • 前情回顾
    • 今日内容
    • 今日总结
  • day11
  • day12

前言

前期贴了很多代码,后期我会全部push到我的码云仓库以及github上,随时更新。有需要的可以fork到你们本地。仓库地址https://gitee.com/libo-sober/learn-python
GitHub地址 https://github.com/libo-sober/LearnPython


Day 01

一、python的历史和种类

今日内容大纲:

  1. cpu 内存 硬盘 操作系统
    cpu: 计算机的运算和计算中心,相当于人类的大脑。飞机。
    内存:暂时存储数据,临时加载数据以及应用程序,8G,16G, 32G。速度快,高铁。断电即消失。造价很高。
    硬盘: 磁盘,长期存储数据。D盘,E盘,文件,片儿,音频等等。500G, 1T。汽车。造价相对低。
    操作系统:一个软件,连接计算机的硬件与所有软件之间的一个软件。

  2. python的发展与应用

    参考老男孩教育讲师太白金星的博客。
    传送门

  3. python的历史

    python崇尚优美、清晰、简单。
    python2x, python3x源码区别:
    python2x:C、Java大牛贡献,重复代码多;代码不规范。
    python3x:源码规范,清晰,简单。

  4. python的编程语言分类(重点
    编译型:
    将代码一次性全部编译成二进制,然后再执行。
    优点:执行效率高。
    缺点:开发效率低,不能跨平台。
    代表语言:C。
    解释型:
    逐行解释成二进制,逐行运行。
    优点:开发效率高,可以跨平台。
    缺点:执行效率低。
    代表语言:python。

  5. python的优缺点
    见上部分。

  6. python的种类
    Cpython:官方推荐解释器。可以转换成C语言能识别的字节码。
    Jpython:可以转换成Java语言能识别的字节码。
    Ironpython:可以转换成.net语言能识别的字节码。
    PyPy:动态编译。

二、安装python解释器以及配置环境变量

安装python解释器流程

  1. 官网查找版本
    https://www.python.org
  2. 选择版本
    选择你的版本

  1. 安装

  1. 默认

  1. 改路径

  1. 点击 install

  1. 测试

win + R 键入cmd

在命令行中输入 python

  1. 手动添加环境变量



点击环境变量后双击path

把你安装的路径加上,然后点击所有打开的窗口的确定键。

三、变量、常量和注释

  1. 运行第一个python代码
    print(‘Hello world!’) 保存为.py文件
  2. 变量

这一节全是基础 就不再重复了,可以去B站观看。
python基础变量传送门

Day 02

主要讲了 pycharm 的安装和使用
运算符、while循环和格式化输出等。
原视频传送门

也可以去python菜鸟教程参考学习
python基础菜鸟教程传送门

Day 03

主要为基础数据类型学习

  • int
  • bool
  • str
  • for循环
    这里可以重点学习一下str字符串的操作
    菜鸟教程字符串操作

Day 04

python的三大数据类型

  • 列表
  • 元组
  • 字典

Day 05

  1. 文件操作的初识
    利用python代码写一个很low的软件去操作文件。
    需求:
    文件路径:path。 打开方式:读,写,追加,读写…。 编码方式:utf-8,gbk…。
f1 = open('d:\你想看的都在这.txt', encoding='utf-8', mode='r')
content = f1.read()
print(content)
f1.close()
"""
open 内置函数,open底层调用的是操作系统的接口。
f1 变量 f 文件句柄。 对文件进行的任何操作,都要通过文件句柄.操作函数()的方式。
encoding:参数可以默认不写,默认编码本为操作系统默认的编码。
widows:gbk。
Linux:utf-8。
mac:utf-8。
f1.close() 关闭文件
"""
"""
文件操作三部曲:
1.打开文件
2.对文件句柄进行相应的操作
3.关闭文件C:\Users\libo\AppData\Local\Programs\Python\Python36\python.exe D:/WorkSpace/Pycharm/fullstack/day05/文件的操作.py
详情请查看:
https://me.csdn.net/blog/qq_31910669Process finished with exit code 0
"""

报错原因:
UnicodeDecodeError:文件存储时与文件打开时编码本运用不一致。
路径分隔符产生的问题:r’d:\你想看的都在这.txt’,加r后不会产生。

  1. 文件操作的读
    r, rb, r+,…
    r: read(), read(n), readline(), readlines().
    rb:操作的是非文本文件。图片、视频、音频。
f1 = open('d:\你想看的都在这.txt', encoding='utf-8', mode='r')
content = f1.read()
print(content)
f1.close()
"""
open 内置函数,open底层调用的是操作系统的接口。
f1 变量 f 文件句柄。 对文件进行的任何操作,都要通过文件句柄.操作函数()的方式。
encoding:参数可以默认不写,默认编码本为操作系统默认的编码。
widows:gbk。
Linux:utf-8。
mac:utf-8。
f1.close() 关闭文件
"""
"""
文件操作三部曲:
1.打开文件
2.对文件句柄进行相应的操作
3.关闭文件
"""
  1. 文件的写
    w, wb,w+, w+b
# f = open('文件的写', encoding='utf-8', mode='w')
# f.write('随便写一点')
# f.close()# 如果文件存在,先清空原文件内容,再写入新内容
# f = open('文件的写', encoding='utf-8', mode='w')
# f.write('木子李呢')
# f.close()# wb
f = open('头像.png', mode='rb')
content = f.read()
# b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00H\x00H\x00.......
# print(content)
f.close()
f1 = open('头像2.png', mode='wb')
f1.write(content)
f1.close()
  1. 文件的追加
    a, ab, a+ , a+b
# 没有文件创建,追加内容
# f = open('文件的追加', encoding='utf-8', mode='a')
# f.write('nihao')
# f.close()
# 有文件时,在原文件的最后边追加
f = open('文件的追加', encoding='utf-8', mode='a')
f.write('李波')
f.close()
  1. 文件操作的其他模式
# 先读后写 若无文件不会创建新文件
# 读并追加,顺序不能反
f = open('文件的读写', encoding='utf-8', mode='r+')
content = f.read()
print(content)
f.write('人的一切痛苦,都是对自己无能的愤怒!')
f.close()
  1. 打开文件的另一种方式
    with … as …
# 优点1:不用手动关闭文件句柄
# with open('文件的读', encoding='utf-8') as f1:
#     print(f1.read())# 优点2: 一个with可以打开多个open
with open('文件的读', encoding='utf-8') as f1,\open('文件的写', encoding='utf-8', mode='w') as f2:print(f1.read())f2.write('dasdasd a')# 缺点:待续.
  1. 文件的修改
"""
1.以读的模式打开原文件.
2.以写的模式创建一个新文件.
3.将原文件的内容读出来修改成新内容,写入新文件.
4.将原文案金删除.
5.将新文件重命名成原文件.
"""# low版
import oswith open('alex自述', encoding='utf-8') as f1,\open('alex自述.bak', encoding='utf-8', mode='w') as f2:old_content = f1.read()new_content = old_content.replace('分手', '恋爱')f2.write(new_content)os.remove('alex自述')
os.rename('alex自述.bak', 'alex自述')
分手第1次,第21天后,你找到我说还是喜欢我。我相信了,继续牵着你的手走过校园的每一个角落。分手第2次,第32天后,你还是回来了,我还笑着跟朋友说“不是我忘不掉,而是人家忘不掉”。分手第3次,第5天,我们终于不再联系,我拉黑你的QQ,删掉你的号码和相片,丢掉你送的礼物,从此陌路。分手第3次,第10天,我整理日记,丢掉专门为你写的那本,想着以前我送你的那些日记,现在你还留着吗?
恋爱第1次,第21天后,你找到我说还是喜欢我。我相信了,继续牵着你的手走过校园的每一个角落。恋爱第2次,第32天后,你还是回来了,我还笑着跟朋友说“不是我忘不掉,而是人家忘不掉”。恋爱第3次,第5天,我们终于不再联系,我拉黑你的QQ,删掉你的号码和相片,丢掉你送的礼物,从此陌路。恋爱第3次,第10天,我整理日记,丢掉专门为你写的那本,想着以前我送你的那些日记,现在你还留着吗?
"""
1.以读的模式打开原文件.
2.以写的模式创建一个新文件.
3.将原文件的内容读出来修改成新内容,写入新文件.
4.将原文案金删除.
5.将新文件重命名成原文件.
"""# 进阶版
import oswith open('alex自述', encoding='utf-8') as f1,\open('alex自述.bak', encoding='utf-8', mode='w') as f2:for line in f1:# 第一次循环 恋爱第1次,第21天后,你找到我说还是喜欢我。我相信了,继续牵着你的手走过校园的每一个角落。# old_line = line.strip() # 去除两边空格new_line = line.replace('恋爱', 'alex')f2.write(new_line)
os.remove('alex自述')
os.rename('alex自述.bak', 'alex自述')# 有关清空问题:
# 不关闭文件句柄的情况下多次写入是不会清空之前的内容的
alex第1次,第21天后,你找到我说还是喜欢我。我相信了,继续牵着你的手走过校园的每一个角落。alex第2次,第32天后,你还是回来了,我还笑着跟朋友说“不是我忘不掉,而是人家忘不掉”。alex第3次,第5天,我们终于不再联系,我拉黑你的QQ,删掉你的号码和相片,丢掉你送的礼物,从此陌路。alex第3次,第10天,我整理日记,丢掉专门为你写的那本,想着以前我送你的那些日记,现在你还留着吗?

Day 06

一、初识函数

# s1 = 'dsadasdasdasdasasd'
# # pyhton没有len()的话
# count = 0
# for i in s1:
#     count += 1
# print(count)
#
# count = 0
# l1 = [1, 2, 3, 4, 5, 6]
#
# for i in l1:
#     count += 1
# print(count)# 代码重复太多
# 代码可读性差
# 函数式编程def my_len(s):count = 0for i in s:count += 1print(count)s1 = 'dsadasdasdasdasasd'
l1 = [1, 2, 3, 4, 5, 6]my_len(s1)
my_len(l1)# 函数:以功能(完成一件事)为导向,登录,注册,len。一个函数就是一个功能。随调随用
# 减少代码重复性,增强代码的可读性

二、函数的结构与调用

def meet():print('打开探探')print('左滑一下')print('右滑一下')print('找美女')print('悄悄话')print('约 ....  走起 ...')
"""
结构:def 关键字,定义函数。meet 函数名:与变量设置相同,具有可描述性。函数体:缩进。函数中尽量不要出现print。
"""
# 函数什么时候执行?
# 当遇到函数名加括号时执行。
meet()

三、函数的返回值

# 函数的返回值
def meet():print('打开探探')print('左滑一下')print('右滑一下')print('找美女')print('悄悄话')print('约 ....  走起 ...')# return '妹纸'return '妹子', 123, [22, 33]
# return :在函数中遇到return直接结束函数。
# return:将数据返回给函数的执行者,调用者meet()。
# return饭hi多个元素是以元组的形式返回给函数的执行者。
# ret = meet()
# print(ret)
print(type(meet()))  # <class 'tuple'>
"""
retuen 总结:1.在函数中,终止函数。2.return 可以给函数的执行者返回值。1)return 单个值   单个值2)return 多个值   (多个值,)
"""

四、函数的参数

# 函数的参数
# def meet(sex):  # 函数的定义:接受的参数是形式参数。
#     print('打开探探')
#     print('进行筛选:性别:%s' % sex)
#     print('左滑一下')
#     print('右滑一下')
#     print('找美女')
#     print('悄悄话')
#     print('约 ....  走起 ...')# 函数的传参:让函数的封装的这个功能,盘活。
# 实参,形参。
# meet('男')
# meet('女')  # 函数的执行传的参数:实际参数。
# 函数的传参:实参,形参。
# 实参角度:
# 1.位置参数。从左到右一一对应。
# def meet(sex, age, skill, voice):  # 函数的定义:接受的参数是形式参数。
#     print('打开探探')
#     print('进行筛选:性别:%s,年龄:%s,python: %s, 声音:%s' % (sex, age, skill, voice))
#     print('左滑一下')
#     print('右滑一下')
#     print('找美女')
#     print('悄悄话')
#     print('约 ....  走起 ...')
# meet('女', '18~40', 'python技术好的', '萝莉音')  # 函数的执行传的参数:实际参数。# 写一个函数,只接受两个int的函数,函数的功能是将较大的数返回。
# def max_num(a, b):
#     # if a > b:
#     #     return a
#     # else:
#     #     return b
#     return a if a > b else b  # 三元运算符# c = max_num(100, 1000)
# print(c)
# 2. 关键字参数
# 一一对应,顺序可以不打乱
# def meet(sex, age, skill, hight, weight):  # 函数的定义:接受的参数是形式参数。
#     print('打开探探')
#     print('进行筛选:性别:%s,年龄:%s,技术: %s, 身高:%s, 体重: %s' % (sex, age, skill, hight, weight))
#     print('左滑一下')
#     print('右滑一下')
#     print('找美女')
#     print('悄悄话')
#     print('约 ....  走起 ...')
# meet('女', '25', 'python技术好的', 174, 130)  # 函数的执行传的参数:实际参数。
# meet(sex='女', age='25', weight=100, hight=174, skill='python技术好的')
# # 函数:传入两个字符串参数,将两个参数拼接完成后形成的结果返回
# def func(s1, s2):
#     return s1 + s2
# print(func(s1='Hello', s2='libo!'))
# 混合参数
# 位置参数一定要在关键字参数前边
# def meet(sex, age, skill, hight, weight):  # 函数的定义:接受的参数是形式参数。
#     print('打开探探')
#     print('进行筛选:性别:%s,年龄:%s,技术: %s, 身高:%s, 体重: %s' % (sex, age, skill, hight, weight))
#     print('左滑一下')
#     print('右滑一下')
#     print('找美女')
#     print('悄悄话')
#     print('约 ....  走起 ...')
#     return '筛选结果:性别:%s, 体重: %s' % (sex, weight)
# # print(meet(25, weight=100, '女', hight=174, skill='python技术好的')) 位置参数未在关键字参数前边 报错
# print(meet('女', 25, weight=100, hight=174, skill='python技术好的'))
"""
实参角度:1.位置参数 按照顺序,一一对应2.关键字参数,一一对应3.混合参数:位置参数一定要在关键字参数的前边
"""
# 形参角度
# 1.位置参数 与实参角度的位置参数是一种
# 写一个函数,检测传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# def func(l1):
#     # l2 = l1
#     # if len(l1) > 2:
#     #     l2 = l1[0:2]
#     # return l2
#     # return l1[0:2] if len(l1) > 2 else l1
#     return l1[0:2]
# print(func([1,2,3,4,5]))
# print(func([1,]))# 默认参数
# 默认参数一定得在最后。
# 默认参数设置的意义:普遍经常用的。
# def meet(age, skill='python技术好的', sex='女'):  # 函数的定义:接受的参数是形式参数。
# #     print('打开探探')
# #     print('进行筛选:性别:%s,年龄:%s,技术: %s' % (sex, age, skill))
# #     print('左滑一下')
# #     print('右滑一下')
# #     print('找美女')
# #     print('悄悄话')
# #     print('约 ....  走起 ...')
# # # print(meet(25, 'pytohn技术好的'))
# # # print(meet(25,'pytohn技术好的', sex='男'))
# # print(meet(25,'运维技术好的', sex='男'))# 形参角度:
# 1.位置参数
# 2.默认参数 经常用的参数

Day07

今日内容大纲

1.如何在工作中不让别人看出来你是培训出来的?

  • 第一天环境安装等等,小白各种问。
  • 项目需求不清晰,也不敢问。
  • 一定要学会自主学习,有自己解决问题的能力。
    2.形参角度
  • 万能参数
    • 的魔性用法
  • 仅限关键字参数
  • 形参 的最终顺寻
    3.名称空间
  • 全局名称空间
  • 加载顺序,取值顺序。
  • 作用域
    4.函数的嵌套(高阶函数)
    5.内置函数(globals locals)
    6.关键字:nonlocal global

昨日内容回顾

1.函数是以功能为导向,减少重复代码,提高代码的可读性。
2.函数结构

def func():函数体

3.函数的调用:func()

func()
func()
func()
# 写一次执行一次

4.函数的返回值

  • 终止函数
  • return单个值
  • return多个之:(1,2,3,‘alex’)
    5.函数的参数
  • 实参角度:位置参数,关键字参数,混合参数。
  • 形参角度:位置参数,默认参数。
    今日内容学习记录
    https://github.com/libo-sober/LearnPython/tree/master/day07

今日总结

  1. 参数:万能参数,仅限关键字参数,参数的顺序,*的魔性用法:聚合和打散。
  2. 名称空间,作用域,取值 顺序,加载顺序。
  3. globals() locals()
  4. 高阶函数:执行顺序。
  5. 以上全是重点。

Day08

今日内容大纲

  1. global nonlocal
  2. 函数名的运用
  3. 新特性:格式化输出。
  4. 迭代器:
    • 可迭代对象
      字面意思:对象?python中一切皆对象。一个实实在在存在的值,对象。
      可迭代?:更新迭代。重复的,循环的一个过程,更新迭代每次都要新的内容。
      可以进行循环更新的以恶搞是实实在在的值。
      专业角度:可迭代对象?内部含有”iter“方法的对象,可迭代对象。
      目前学过的可迭代对象?str list tuple set dict range 文件句柄
    • 获取对象的所有方法并且以字符串的形式表现出来
# 获取一个对象的所以方法:dir()
s1 = 'sdsdasasdas'
print(dir(s1))
l1 = [1,2,3]
print(dir(l1))
print('__iter__' in dir(l1))  # True
- 判断一个对象是否是可迭代对象
- 小结
字面意思:对象?python中一切皆对象。一个实实在在存在的值,对象。
专业角度:可迭代对象?内部含有”__iter__“方法的对象,可迭代对象。
优点:1.存储的数据直接能显示,比较直观。2.拥有的方法比较多,操作很方便。
缺点:1.占用内存。2.不能直接通过for循环,不能直接取值。
- 迭代器
- 迭代器的定义字面意思:更新迭代,器:工具:可更新迭代的工具。专业角度:内部含有内部含有”__iter__“方法并且含有"__next__"方法的对象就是迭代器。可以判断是否是迭代器:有”__iter__“ and "__next__"方法在不在dir(对象)文件句柄`with open('wenjian', encoding='utf-8', mode='w') as f1:
print('__iter__' in dir(f1) and '__next__' in dir(f1))` 输出True。- 判断一个对象是否是迭代器
- 迭代器的取值
s1 = 'dasdasdas'
obj = iter(s1)  # s1.__iter__()
# print(obj)  # <str_iterator object at 0x0000022770E5EB70>
print(next(obj))  # d
print(obj.__next__())  # al1 = [11,22,33,44,55]
obj = l1.__iter__()
print(obj.__next__())
print(obj.__next__())
print(obj.__next__())
print(obj.__next__())
print(obj.__next__())
- 可迭代对象如何转化成迭代器
- while循环模拟for循环机制
# while循环模拟for循环机制
l1 = [1,2,3,4,5,6,7,8]
# for i in l1:  # 先转换成迭代器
#     print(i)
# 将可迭代对象转换成迭代器
obj = l1.__iter__()
while True:try:print(next(obj))except StopIteration:break
- 小结字面意思:更新迭代,器:工具:可更新迭代的工具。专业角度:内部含有内部含有”__iter__“方法并且含有"__next__"方法的对象就是迭代器。可以判断是否是迭代器:有”__iter__“ and "__next__"方法在不在dir(对象)优点:1.节省内存。2.惰性机制,next一次,去一个值。缺点:速度慢。以时间换空间。2.不走回头路。
- 可迭代对象与迭代器的对比可迭代对象是一个操作方法比较多,比较直观,存储数据相对小的一个数据集。对数据灵活处理,内存足够。迭代器:节省内存,可以记录位置。数据量过大。

昨日内容回顾

  1. 函数的参数:

    • 实参角度:位置参数,关键字参数,混合参数。
    • 形参角度:位置参数,默认参数,仅限关键字参数,万能参数。
    • 形参角度参数顺序:位置参数–>*args–>默认参数–>仅限关键字参数–>**kwargs
  2. *的魔性用法:
    • 函数定义时:代表聚合。
    • 函数调用时:代表打散。
  3. python中存在三种空间:
    • 内置名称空间:存储的时内置函数:print、input…
    • 全局名称空间:py文件存放的时py文件(出去函数,类内部的)变量,函数名与函数的内存地址的关系。
    • 局部名称空间:存放的是函数内部的变量与值的对应关系。
  4. 加载顺序:内置名称空间–>全局名称空间–>局部名称空间(执行函数的时候)
  5. 取值顺序:就近原则即LEGB原则。
    • 局部作用域只能引用全局变量,不能修改。
name = 'alex'
def func():name = name + 'sb'  # 报错
  1. 作用域:

    • 全局作用域:内置名称空间+全局名称空间。
    • 局部作用域:局部名称空间。
  2. 函数的嵌套
  3. gloabls() (获取全部的变量 ) locals()(获取当前的变量)
    今日学习代码记录
    https://github.com/libo-sober/LearnPython/tree/master/day08

今日总结

  1. 默认参数的坑,作用域的坑(重点
  2. 格式化输出
  3. 函数名的应用
  4. 对比:迭代器是什么?迭代器的优缺点。(重点可迭代对象如何转化成迭代器。

Day09

  1. 今日内容大纲

    1. 毒鸡汤课

      坚持、努力!

    2. 生成器

      • yield
      • yeild return
      • yeild from
    3. 生成器表达式

    4. 内置函数I

  2. 昨日内容回顾作业讲解

    1. 可迭代对象

      • 可以更新得带的 实实在在的值。
      • 内部含有’_iter()'方法的。
      • str list tuple sict set range
      • 优点:操作方法多,操作灵活,直观。
      • 缺点:占用内存。
    2. 迭代器
      • 可以更新迭代的一个工具(数据结构)。
      • 内部含有iter() 且含有 __next(0)_方法的。
      • 文件句柄。
      • 优点:节省内存。惰性机制。
      • 缺点:不直观,速度相对慢,操作方法单一,不走回头路。
    3. 格式化输出。
    4. 函数名的运用。
    5. 默认参数是可变的数据类型坑,作用域的坑。
  3. 今日内容

    • 生成器

      • 什么是生成器?:python社区,生成器与迭代器看成是一种。生成器的本质就是迭代器。唯一的区别:生成器是我们自己用python代码构建的数据结构。迭代器都是提供的,或者转化得来的。

        • 获取生成器的三种方式:

          • 生成器函数。
          • 生成器表达式。
          • python内部提供的一些。
      • 生成器函数获得的生成器。
      • yield
      • yeild return
      • yeild from
    • 生成器表达式,列表推导式

      • 用一行代码去构建一个比较复杂有规律的列表。
      • 列表推导式:
        • 循环模式:[变量(加工后的变量) for 变量 in iterable]
        • 筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]
        • 循环模式
        • 今日内容笔记:https://github.com/libo-sober/LearnPython/tree/master/day09
  4. 今日总结

    1. 生成器
      2. 生成器函数yield
      3. yield与return区别。 yield from
      4. 列表推导式,生成器表达式。(重点
      5. 内置函数:今天讲的内置函数,了解。
  5. 预习内容

    1. lambda表达式。
    2. 内置函数II。
    3. 闭包。

Day 10

  1. 今日内容大纲

    • 如何学习?
    • 一定要把预习加上!
    • 分配比例:
      • 1/3总结
  2. 昨日内容回顾作业讲解

    • 生成器:生成器就是迭代器,生成器是自己用python代码写的。

      • 生成器函数
      • 生成器表达式
      • python内部提供的
    • 如何判断你的函数,还是生成器函数?
      • yield
      • yield return区别
    • 吃包子。(重点
    • yield from 将一个可迭代对象,编程一个生成器。
    • 列表推导式,生成器表达式。
      • 循环模式:[变量(加工和的变量)for 变量 in iterable]
      • 筛选模式:[变量(加工和的变量)for 变量 in iterable if 条件]
    • 内置函数?68.
  3. 今日内容

    https://github.com/libo-sober/LearnPython/tree/master/day10

  4. 今日总结

    • 匿名函数。

    • 内置函数。

    • 闭包

      # 闭包:  多用于面试题:什么是闭包?闭包有什么作用?
      # 1. 闭包只能存在嵌套函数中。
      # 2. 内层函数对外层函数非全局变量的引用(使用),就会形成闭包。
      # 被引用的非全局变量也称作自由变量,这个自由变量就会与内层函数产生一个绑定关系,
      # 自由变量不会在内层中消失。
      # 闭包的作用:保证程序的安全性。
      
  5. 预习内容

前情回顾

今日内容

https://github.com/libo-sober/LearnPython/tree/master/day04

  1. while循环

    • why: 大气循环,吃饭上课睡觉,日复一日,因果轮回。程序中也有输入用户密码。

    • what:while无限循环。

    • how:怎样使用?

      1. 基本结构:

        while 条件:循环体
        
      2. 初始循环体

        while True:print('我们不一样')print('狼爱上羊')print('庐州月')print('人间')
        
      3. 终止循环

        break

        条件

  2. for 循环

    # for 循环
    """
    有限循环for 变量 in iterable:pass
    """
    for i in s1:print(i)# break continue
    # for else:  while else: 用法一样
    
  3. 字符串操作

  4. 代码块

    • # 代码块
      # 我们所有的代码都需要以来代码块执行
      # 一个文件就创建一个代码块
      # 交互式命令下一行就是一个代码块
      
    • 两个规则:同一个代码块下,有一个机制,不同的代码块下,遵循另一个机制。

    • 同一个代码块下的缓存机制。

      • 前提条件:同一个代码块内。
      • 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1、i2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即:id相同。
      • 优点:节省内存,提升性能。
      • 使用的对象:int,bool,str
    • 不同代码块下的缓存机制。

      • 小数据池

      • Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。

        python会将一定规则的字符串在字符串驻留池中,创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象, 而是使用在字符串驻留池中创建好的对象。

        其实,无论是缓存还是字符串驻留池,都是python做的一个优化,就是将~5-256的整数,和一定规则的字符串,放在一个‘池’(容器,或者字典)中,无论程序中那些变量指向这些范围内的整数或者字符串,那么他直接在这个‘池’中引用,言外之意,就是内存中之创建一个。

    • 总结:

      • 面试题考。
      • 回答的时候一定要分清楚:同一个代码块下适用一个缓存机制,不同代码块下适用于另一个缓存机制(小数据池)。
      • 小数据池:数据范围是-5~256
      • 缓存机制的优点:提升性能,节省内存。
  5. python基础数据类型只集合:set。容器型的数据类型,它要求里面的元素是不可变的数据,但是它本身是可变的数据类型。集合是无序的。{}。

    • 集合的作用:

      • 列表的去重。
      • 关系测试:交集,并集,差集,…。
      • pass
  6. 深浅copy(面试会考)

    • 浅copy

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mwsr4Nox-1599472804554)(C:\Users\libo\AppData\Roaming\Typora\typora-user-images\image-20200907161008553.png)]

    • 深copy

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tH93bS0J-1599472804557)(C:\Users\libo\AppData\Roaming\Typora\typora-user-images\image-20200907165332618.png)]

今日总结

  1. is id == 三个方法会用。
  2. 缓存机制优点。
  3. 深浅copy:理解什么是浅copy和深copy,课上练习题。
  4. 集合:列表去重,关系测试。

day11

  1. 今日内容大纲

    1. 装饰器:本质就是闭包。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OuCIVubg-1599568281033)(C:\Users\libo\AppData\Roaming\Typora\typora-user-images\image-20200908194149735.png)]

    2. 标准版装饰器执行流程:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OvF3znDc-1599568281036)(C:\Users\libo\AppData\Roaming\Typora\typora-user-images\image-20200908195335638.png)]

    3. 最标准版装饰器

      def wrapper(f):def inner(*args, **kwargs):"""添加额外的功能:执行被装饰函数之前的操作"""ret = f(*args, **kwargs)"""添加额外的功能:执行被装饰函数之后的操作"""return retreturn inner
      
  2. 昨天内容回顾以及作业讲解

    1. 匿名函数:一句话函数。多余内置函数,列表推导式结合。

    2. 内置函数:*** 加Key的。min max sorted map reduce filter

    3. 闭包:

      1. 内层函数对外层函数非全局变量的使用。
      2. 一定要存在于嵌套函数中。
      3. 保证数据安全。自由变量不会在内存中消失,而且全局还引用不到。
  3. 今日内容

    https://github.com/libo-sober/LearnPython/tree/master/day11

  4. 今日总结

  5. 预习内容

day12

  1. 今日内容大纲

  2. 昨日内容回顾作业讲解

    • 装饰器:完美的呈现了开放封闭原则。装饰器的本质:闭包。

    • def wraper(f):def inner(*args, **kwargs):"""执行被装饰函数之前的操作"""ret = f(*args, **kwargs)"""执行被装饰函数之后的操作"""return retreturn inner
      
  3. 今日内容

    1. 自定义模块:

      • 什么是模块:本质就是一个.py文件,封装语句的最小单位。
      • 自定义模块:实际上就是定义.py文件,其中可以包含,变量定义,可执行语句,for循环,函数定义等等,它们统成为模块的成员。
    2. 模块的运行方式:

      • 脚本方式:直接用解释器执行,或者pycharm中右键运行。
      • 模块方式:被其他的模块导入。为导入它的模块提供资源(函数定义,类定义,变量等)。
    3. __name__的使用:

      • 在脚本方式运行时,_name__是固定的字符串:_main
      • 在义模块方式导入时,__name__就是本模块的名字。
    4. 系统导入模块时的路径

      • 内存中:如果之前成功导入模块,直接使用已经存在的模块
      • 内置路径中:安装路径下:Lib
      • PYTHONPATH:import时寻找模块的路径。(一般不用。)
      • sys.path:是一个路径的列表。

      如果都找不到,就报错。

      动态修改sys.path。

      os.path.dirname()获取某个路径的父路径。通常用于获取当前模块的相对路径。

      import sys
      import os
      # print(os.path.dirname((__file__)) + '/aa')
      sys.path.append(os.path.dirname((__file__)) + '/aa')
      
    5. 导入模块的多种方式:

      • import xxx:导入一个模块的所有成员。
      • import aaa, bbb:一次性导入多个模块的成员。不推荐这种写法,分开写。import os,sys 这俩是黄金搭档可以一起写。
      • from xxx import a:从某个模块中导入指定的成员。
      • from xxx import a,b,c:从某个模块中导入多个成员。
      • form xxx import *:从一个模块中导入所以的成员。
    6. import xxx 和 form xxx import *的区别

      • 第一种方式在使用其中成员时,必须使用模块名作为前缀。不容易产生命名冲突。
      • 第二种方式在使用其中成员时,不用使用模块名作为前缀,直接使用成员名即可。容易产生命名冲突。在后面定义的成员名生效(把前面的覆盖了)。
      • 怎么解决名称冲突问题?
        • 改用 import xxx。
        • 自己避免使用同名。
        • 使用别名解决冲突
      • 使用别名:alias
        • 给成员起别名,避免名称冲突。from my_modul import age as a
        • 给模块器别名,目的简化书写。import my_modul as m
    7. form xxx import *默认控制成员被导入

      1. 默认情况下,所以的成员都会被导入。
      2. __all__是一个列表,用于表示本模块可以被外界使用的成员。元素时成员名组成的字符串。
      3. 使用__all__控制哪些成员可以被外界使用 只对于 from import 起作用
    8. 相对导入

      1. 针对某个项目中的不同模块之间进行导入,叫做相对导入。

      2. 只有一种格式:from 相对路径 import xxx

        1. 相对路径:包含了待你好的一个相对路径。
        2. .表示的是当前的路径。
        3. …表示的是父路径
        4. …表示的是父路径的父路径
        # 相对导入同项目下的模块
        # from ..z import zz    # 容易象外界暴露zz模块
        from ..z.zz import *
        
        # 不使用相对导入的方式,导入本项目中的模块
        # 通过当前文件的路径找到你想导入的z的路径
        import os,sys
        sys.path.append(os.path.dirname(os.path.dirname(__file__)) + '/z')
        from zz import *
        
    9. 常用模块:time,datatime,random

      1. random

        1. 此模块提供了随机数获取的相关的方法。官方文档(C:\Users\libo\AppData\Local\Programs\Python\Python36\Doc)
        2. random.random():获取[0.0,1.0)范围内的浮点数。
        3. random.randint(a,b):获取[a,b]范围内的一个整数。
        4. random.uniform(a,b):获取[a,b)范围内的浮点数。
        5. random.shuffle(x):把参数指定的数据中的元素混洗,其中参数为变的数据类型。
        6. random.sample(x,k):从x中随机抽取k个数据,组成一个列表返回。
  4. 今日总结

    函数总结思维导图
    这个思维导图是在ProcessOn中画的有想用的可以点击此链接注册并绑定微信号免费克隆
    GitHub仓库
    https://github.com/libo-sober/LearnPython/tree/master/day12

  5. 预习内容

Python全栈工程师系列学习之学习记录相关推荐

  1. python全栈工程师 pdf_python全栈工程师项目开发实例实战入门教程百度云

    python全栈工程师项目开发实例实战入门教程百度云 课程目录: 开学典礼 pycharm的基本使用 Python基本语法 数值类型数据及运算 字符串的基本操作 字符串的常用方法 列表的基本使用 列表 ...

  2. Python 全栈工程师必备面试题 300 道(2020 版)

    2020元旦巨献,面试升级必备!献给正在学习Python的同学! Python 全栈工程师必备面试题 300 道(2020 版) Python 面试不仅需要掌握 Python 基础知识和高级语法,还会 ...

  3. python全栈工程师薪水_不止 20K,Python 工程师薪资再飙升(内附转型指南)

    原标题:不止 20K,Python 工程师薪资再飙升(内附转型指南) Python 诞生之初就被誉为最容易上手的编程语言.进入火热的 AI 人工智能时代后,它也逐渐取代 Java,成为编程界的头牌语言 ...

  4. 大龄开发者究竟该何去何从?2019年Python全栈工程师,都是开发人员改怎么转向高收入?

    是继续做技术还是"强迫"自己转型做管理? 作者 | Petr Zemek 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: 很多人因为喜欢 ...

  5. python全栈工程师薪水_python全栈+爬虫+自动化+AI=python全能工程师-挑战年薪30W+

    如果你想选择一种语言来入门编程,那么Python绝对是首选! Python非常接近自然语言,精简了很多不必要的分号和括号,非常容易阅读理解.编程简单直接,更适合初学编程者,让其专注于编程逻辑,而不是困 ...

  6. python全栈工程师薪水_Python工程师薪资待遇是多少?老男孩Python周末班

    从目前市场上的发展情况来说,Python是一门非常流行的编程语言,随着近几年的发展,Python这门语言变得更加流行了,也越来越火了,根据数据显示,Python发展已经翻了好几倍,是人工智能的头牌语言 ...

  7. 2017最新整理python全栈工程师系统培训之路精品课程(全套)

    百度搜索"一起自学吧"做大数据专家,不做第一,只做唯一. 课程介绍: 本课程由一起自学吧论坛打造,目的是给想成为Python全栈工程师的同学提供一套完整,全面而系统的培训课程,课程 ...

  8. Python全栈工程师-第1周-韦玮-专题视频课程

    Python全栈工程师-第1周-1583人已学习 课程介绍         Python全栈工程师-第1周 课程收益     Python全栈工程师培养课程 讲师介绍     韦玮 更多讲师课程    ...

  9. Python全栈工程师-第14周-韦玮-专题视频课程

    Python全栈工程师-第14周-136人已学习 课程介绍         Python全栈工程师 课程收益     Python全栈工程师 讲师介绍     韦玮 更多讲师课程     企业家,IT ...

  10. Python全栈工程师-第4周-韦玮-专题视频课程

    Python全栈工程师-第4周-490人已学习 课程介绍         Python全栈工程师-第4周 课程收益     Python全栈工程师培养 讲师介绍     韦玮 更多讲师课程     企 ...

最新文章

  1. easyui前端实现多选框_前端:Element UI 多选框组用法笔记
  2. 后台管理系统怎么实现操作日志原理_springboot角色权限后台管理系统脚手架实战开发教程包含完整源码...
  3. 算法 | 尺度不变特征变换匹配算法 Scale Invariant Feature Transform (SIFT)
  4. 第一次使用Linux服务器所栽之坑
  5. 吴玉禄他的机器人_中国人— 我们村的机器人
  6. 微信WeixinJSBridge API
  7. Python set list dict tuple 区别和相互转换 - Python零基础入门教程
  8. 如果用户计算机已接入,01计算机基础知识题(50道)
  9. SpringBoot——实现WebService接口服务端以及客户端开发
  10. laravel实现第三方qq一键登录
  11. srsLTE源码学习:度量中心:metrics_hub.h
  12. 全球最大的NFC 交易平台OpenSea严重漏洞可使黑客窃取钱包密币
  13. pyhive 安装sasl
  14. TCP AIMD Algorithm (copy)
  15. 【设计模式】模板模式
  16. excel随机数_EXCEL随机数函数rand、randbetween
  17. 将网站上的web字体base,woff2转换成.ttf系统字体
  18. php网站恶意注册表,突破封锁 解决注册表被恶意锁定的方法
  19. 强大的 Stream 函数式编程
  20. java调adobe打印_Java报表工具打印方案集锦 | 改变自己

热门文章

  1. Mac Photoshop CS6 安装教程
  2. 继电器学习笔记(一)继电器概念
  3. 【工科数学分析】2021-10-01-工科数学分析叒复习(一)
  4. OA系统新流程创建与管理办法
  5. 应用安全迁移实施方案
  6. 独立按键与蜂鸣器的c语言编写,生产实习报告--单片机电子琴.doc
  7. MTK6589双卡卡1或是卡2拨出电话
  8. Django模板 render_to_string与render
  9. SAN:存储区域网络及其协议
  10. 如何申请MSN帐号和所有MSN后缀邮箱申请