内容全干货,不说废话。代码讲解都在注释哦。希望挨个看着敲一遍,不要复制粘贴哦。
本基础分为十个部分: 1-数字 2-字符串 3-列表 4-控制流 5-函数 6-数据结构 7-模块 8-深层输入与输出 9-异常和错误 10-类 11-标准库简介 12-协程
为懒人准备,如果需要下载这些代码,本项目github链接下载即可: https://github.com/89461561511656/Introduction-to-python3.9.git
为小白准备的交流群:
970353786
为python爱好者准备的项目链接:qq机器人
https://www.cnblogs.com/aisisi/p/15055168.html
mysql数据库入门到精通学习链接:
https://blog.csdn.net/weixin_46211269/article/details/119086242?spm=1001.2014.3001.5501
第一部分:数字
"""
作者:川川
时间:2021/7/27
"""
#加减
# a=2
# b=2
# c=a-b
#d=a-b
# print(c,d)
#乘除
# a=(50-5*6)/4
# print(a)
# a=8/5
# print(a)
'''/返回为float,//返回整数,%返回余数'''
# a=17/3
# print(a)
# a=17
# print(a)
# a=5*3+2
# print(a)
'''幂运算 **'''
# a=4**2
# b=2**3
# print(a,b)
第二部分:字符串
"""
作者:川川
时间:2021/7/27
"""
'''单引号和双引号效果相同 反斜杠 \ 用于转义'''
'''如果不希望前置 \ 的字符转义成特殊字符,可以使用 原始字符串,在引号前添加 r '''
'''三引号使用'''
'''字符串可以用 + 合并(粘到一起),也可以用 * 重复'''
'''相邻的两个或多个 字符串字面值 (引号标注的字符)会自动合并'''
'''拆分长字符串'''
'''字符串支持 索引 (下标访问),第一个字符的索引是 0。'''
'''索引还支持负数,用负数索引时,从右边开始计数'''
'''除了索引,字符串还支持 切片。输出结果包含切片开始,但不包含切片结束'''
'''省略开始索引时,默认值为 0,省略结束索引时,默认为到字符串的结尾'''
'''切片会自动处理越界索引'''
''' 字符串不能修改'''
'''要生成不同的字符串,应新建一个字符串'''
'''内置函数 len() 返回字符串的长度,一个空格也算一个长度'''
第三部分:列表
"""
作者:川川
时间:2021/7/27
"""
'''支持索引和切片'''
'''列表还支持合并操作'''
'''列表内容可修改'''
'''append() 方法 可以在列表结尾添加新元素'''
'''切片赋值可以改变列表大小,甚至清空整个列表'''
'''内置函数 len() 也支持列表'''
'''还可以嵌套列表(创建包含其他列表的列表)'''
'''斐波纳契数列,使得每个数字是两个前述者的总和,选自0和1。'''
'''print'''
'''end 可以取消输出后面的换行, 或用另一个字符串结尾'''
第四部分:控制流
"""
作者:川川
时间:2021/7/27
"""
'''if语句固定搭配'''
'''if ... elif ... elif ... 序列看作是其他语言中 switch 或 case 语句的替代品。'''
'''for语句'''
''' range() 函数用于遍历数字序列'''
'''range包左不包右'''
'''range 可以不从 0 开始,还可以按指定幅度range(起点,终点,步长)'''
'''range() 和 len() 组合在一起,可以按索引迭代序列'''
'''使用sum和range求连加和'''
'''range 生成列表解决'''
'''质数判断'''
'''continue 语句也借鉴自 C 语言,表示继续执行循环的下一次迭代:'''
'''pass 语句不执行任何操作'''
'''下面这段代码创建了一个最小的类'''
'''pass 还可以用作函数或条件子句的占位符'''
第五部分:函数
"""
作者:川川
时间:2021/7/27
"""
'''def 定义函数 斐波那契数列函数'''
'''默认值在 定义 作用域里的函数定义中求值'''
'''默认值为列表、字典或类实例等可变对象时,会产生与该规则不同的结果。'''
'''不想在后续调用之间共享默认值时,应以如下方式编写函数'''
"""关键字参数"""
'''*name 必须在 **name 前面'''
'''some example'''
'''加上 / (仅限位置参数)后,就可以了。此时,函数定义把 name 当作位置参数,'name' 也可以作为关键字参数的键'''
'''解包实参列表'''
'''字典可以用 ** 操作符传递关键字参数'''
"""Lambda 表达式"""
'''lambda a, b: a+b 函数返回两个参数的和'''
第六部分:数据结构
"""
作者:川川
时间:2021/7/27
"""
"""5.1 列表详解"""
'''
list.count(x)
返回列表中元素 x 出现的次数
'''
'''
list.index(x[, start[, end]])
返回列表中第一个值为 x 的元素的零基索引位置,第一个!
'''
'''
list.reverse()
反转列表中的元素。
'''
'''
list.append(x)
在列表末尾添加一个元素
'''
'''
list.sort(*, key=None, reverse=False)
就地排序列表中的元素
'''
'''
list.pop([i])
删除列表中指定位置的元素,并返回被删除的元素。未指定位置时,a.pop() 删除并返回列表的最后一个元素。
'''
'''
list.copy()
返回列表的浅拷贝,复制
'''
'''
list.clear()
删除列表里的所有元素,相当于 del a[:] 。
'''
'''
list.remove(x)
从列表中删除第一个值为 x 的元素。未找到指定元素时,触发 ValueError 异常。
'''
'''
list.insert(i, x)
在指定位置插入元素。第一个参数是插入元素的索引,因此,a.insert(0, x) 在列表开头插入元素
'''
'''用列表实现堆栈'''
'''
特点:“后进先出” 把元素添加到堆栈的顶端,使用 append() 。从堆栈顶部取出元素,使用 pop() ,不用指定索引。
'''
'''用列表实现队列'''
'''特点:“先进先出” 实现队列最好用 collections.deque,可以快速从两端添加或删除元素'''
''''列表推导式'''
'''创建平方值的列表'''
'''列表推导式将两个列表中不相等的元素组合起来'''
'''等价如下'''
'''some example'''
'''!!!!表达式是元组(例如上例的 (x, y))时,必须加上括号'''
'''列表推导式可以使用复杂的表达式和嵌套函数'''
'''嵌套的列表推导式'''
'''5.2del 语句 移除元素'''
'''del 也可以用来删除整个变量'''
'''5.3元组和序列'''
'''元组由多个用逗号隔开的值组成'''
'''5.4集合'''
'''创建空集合只能用 set(),不能用 {},{} 创建的是空字典'''
'''集合也支持推导式'''
'''5.5字典'''
'''dict() 构造函数可以直接用键值对序列创建字典'''
'''字典推导式可以用任意键值表达式创建字典'''
'''关键字是比较简单的字符串时,直接用关键字参数指定键值对更便捷'''
'''5.6循环的技巧'''
'''在字典中循环时,用 items() 方法可同时取出键和对应的值'''
'''在序列中循环时,用 enumerate() 函数可以同时取出位置索引和对应的值'''
'''同时循环两个或多个序列时,用 zip() 函数可以将其内的元素一一匹配'''
'''逆向循环序列时,先正向定位序列,然后调用 reversed() 函数'''
'''按指定顺序循环序列,可以用 sorted() 函数,在不改动原序列的基础上,返回一个重新的序列'''
'''使用 set() 去除序列中的重复元素。使用 sorted() 加 set() 则按排序后的顺序,循环遍历序列中的唯一元素'''
'''一般来说,在循环中修改列表的内容时,创建新列表比较简单,且安全'''
'''5.7. 深入条件控制?'''
'''布尔运算符 and 和 or 也称为 短路 运算符:其参数从左至右解析,一旦可以确定结果,解析就会停止。'''
第七部分:模块
"""
作者:川川
时间:2021/7/27
"""
'''用文本编辑器在当前目录下创建 fibo.py 文件,输入以下内容'''
'''这项操作不直接把 fibo 函数定义的名称导入到当前符号表,只导入模块名 fibo 。要使用模块名访问函数'''
'''如果经常使用某个函数,可以把它赋值给局部变量'''
'''6.1. 模块详解'''
'''import 语句有一个变体,可以直接把模块里的名称导入到另一个模块的符号表'''
'''还有一种变体可以导入模块内定义的所有名称 不建议从模块或包内导入 *, 因为,这项操作经常让代码变得难以理解。'''
'''模块名后使用 as 时,直接把 as 后的名称与导入模块绑定。意思就是改变名称使用,'''
'''from 中也可以使用这种方式'''
第八部分:深层输入输出
"""
作者:川川
时间:2021/7/27
"""
'''在字符串开头的引号/三引号前添加 f 或 F 。在这种字符串中,可以在 { 和 } 字符之间输入引用的变量'''
'''str.format() 该方法也用 { 和 } 标记替换变量的位置a 这种方法支持详细的格式化指令'''
'''只想快速显示变量进行调试,可以用 repr() 或 str() 函数把值转化为字符串。'''
'''7.1.1. 格式化字符串字面值'''
'''格式化字符串字面值 (简称为 f-字符串)在字符串前加前缀 f 或 F,通过 {expression} 表达式,把 Python 表达式的值添加到字符串内'''
'''下例将 pi 舍入到小数点后三位'''
'''在 ':' 后传递整数,为该字段设置最小字符宽度,常用于列对齐'''
'''7.1.2. 字符串 format() 方法'''
'''花括号及之内的字符(称为格式字段)被替换为传递给 str.format() 方法的对象。花括号中的数字表示传递给 str.format() 方法的对象所在的位置。'''
'''使用关键字参数名引用值。'''
'''位置参数和关键字参数可以任意组合'''
'''用方括号 '[]' 访问键来完成'''
'''也可以用 '**' 符号,把 table 当作传递的关键字参数。'''
'''生成一组整齐的列,包含给定整数及其平方与立方'''
'''7.1.3. 手动格式化字符串'''
'''7.1.4. 旧式字符串格式化方法'''
'''7.2. 读写文件?'''
'''最常用的参数有两个: open(filename, mode)'''
'''
第一个实参是文件名字符串第二个实参是包含描述文件使用方式字符的字符串。
mode 的值包括 'r' ,表示文件只能读取;'w' 表示只能写入(现有同名文件会被覆盖);
'a' 表示打开文件并追加内容,任何写入的数据会自动添加到文件末尾。'r+' 表示打开文件进行读写。
mode 实参是可选的,省略时的默认值为 'r'。
'''
'''f.readline() 从文件中读取单行数据'''
'''从文件中读取多行时,可以用循环遍历整个文件对象'''
'''f.write(string) 把 string 的内容写入文件,并返回写入的字符数。'''
'''写入其他类型的对象前,要先把它们转化为字符串(文本模式)或字节对象(二进制模式)'''
'''7.2.2. 使用 json 保存结构化数据'''
'''dumps() 函数还有一个变体, dump() ,它只将对象序列化为 text file '''
第九部分:异常和错误
"""
作者:川川
时间:2021/7/27
"""
'''处理异常搭配:try except'''
'''如果没有异常发生,则跳过 except 子句 并完成 try 语句的执行。'''
'''一个 try 语句可能有多个 except 子句,以指定不同异常的处理程序。'''
'''最后的 except 子句可以省略异常名,以用作通配符'''
'''try ... except 语句有一个可选的 else 子句,在使用时必须放在所有的 except 子句后面'''
'''处理 try 子句中调用(即使是间接地)的函数内部发生的异常。'''
'''raise 语句支持强制触发指定的异常'''
'''异常链'''
'''异常链在 except 或 finally 子句触发异常时自动生成'''
'''定义清理操作'''
'''一个更为复杂的例子'''
def divide(x, y):
try:
result = x / y
except ZeroDivisionError:
print("division by zero!")
else:
print("result is", result)
finally:
print("executing finally clause")
print(divide(2,1))
第十部分:类
"""
作者:川川
时间:2021/7/27
"""
'''实例对象?'''
'''9.3.4. 方法对象'''
''''通常,方法在绑定后立即被调用'''
'''9.3.5. 类和实例变量'''
''''正确的类设计应该使用实例变量:'''
''''迭代器'''
'''生成器'''
'''生成器表达式'''
第十一部分:标准库简介
"""
作者:川川
时间:2021/7/27
"""
'''操作系统接口(个人感觉没啥用)'''
'''文件通配符'''
'''glob 模块提供了一个在目录中使用通配符搜索创建文件列表的函数:'''
'''命令行参数'''
''' 字符串模式匹配'''
'''数学'''
'''互联网访问'''
''' 日期和时间'''
'''数据压缩'''
'''性能测量'''
第十二部分:协程
"""
作者:川川
时间:2021/7/27
"""
'''等待 1 秒后打印 "hello",然后 再次 等待 2 秒后打印 "world"'''
'''asyncio.create_task() 函数用来并发运行作为 asyncio 任务 的多个协程。'''
'''Python 协程属于 可等待 对象,因此可以在其他协程中被等待'''
'''
协程函数: 定义形式为 async def 的函数;
协程对象: 调用 协程函数 所返回的对象。
'''
'''当一个协程通过 asyncio.create_task() 等函数被封装为一个 任务,该协程会被自动调度执行'''
'''运行 asyncio 程序'''
'''asyncio.run(coro, *, debug=False)?'''
'''创建任务'''
'''asyncio.create_task(coro, *, name=None)?'''
'''休眠'''
''' asyncio.sleep(delay, result=None, *, loop=None)?'''
'''以下协程示例运行 5 秒,每秒显示一次当前日期'''
'''并发运行任务'''
''' asyncio.gather(*aws, loop=None, return_exceptions=False)?'''
'''屏蔽取消操作'''
'''asyncio.shield(aw, *, loop=None)保护一个 可等待对象 防止其被 取消'''
'''如果希望完全忽略取消操作 (不推荐) 则 shield() 函数需要配合一个 try/except 代码段'''
'''超时'''
'''asyncio.wait_for(aw, timeout, *, loop=None)?'''
'''简单等待'''
'''syncio.wait(aws, *, loop=None, timeout=None, return_when=ALL_COMPLETED)'''
'''在线程中运行'''
'''asyncio.to_thread(func, /, *args, **kwargs)在不同的线程中异步地运行函数 func。'''
'''这个协程函数主要是用于执行在其他情况下会阻塞事件循环的 IO 密集型函数/方法'''
''':要取消一个正在运行的 Task 对象可使用 cancel() 方法。调用此方法将使该 Task 对象抛出一个 CancelledError 异常给打包的协程'''
'''以下示例演示了协程是如何侦听取消请求的'''
'''基于生成器的协程'''
'''@asyncio.coroutine
用来标记基于生成器的协程的装饰器。
此装饰器使得旧式的基于生成器的协程能与 async/await 代码相兼容
'''
'''队列能被用于多个的并发任务的工作量分配:'''
import asyncio
import random
import time
async def worker(name, queue):
while True:
sleep_for = await queue.get()
await asyncio.sleep(sleep_for)
queue.task_done()
print(f'{name} has slept for {sleep_for:.2f} seconds')
async def main():
queue = asyncio.Queue()
total_sleep_time = 0
for _ in range(20):
sleep_for = random.uniform(0.05, 1.0)
total_sleep_time += sleep_for
queue.put_nowait(sleep_for)
tasks = []
for i in range(3):
task = asyncio.create_task(worker(f'worker-{i}', queue))
tasks.append(task)
started_at = time.monotonic()
await queue.join()
total_slept_for = time.monotonic() - started_at
for task in tasks:
task.cancel()
await asyncio.gather(*tasks, return_exceptions=True)
print('====')
print(f'3 workers slept in parallel for {total_slept_for:.2f} seconds')
print(f'total expected sleep time: {total_sleep_time:.2f} seconds')
asyncio.run(main())
如果你有一定的编程基础,那么你一定会通过本文章查漏补缺,同时领略python基础。由于内容实在过多,本篇文章偏语法介绍,并没有举很多例子,如有不好之处多对见谅。
|