暑假爆肝整理这篇python基础教程,全是干货,学完基础就过关(收藏加好评吧)(上)

简介: 暑假爆肝整理这篇python基础教程,全是干货,学完基础就过关(收藏加好评吧)

内容全干货,不说废话。代码讲解都在注释哦。希望挨个看着敲一遍,不要复制粘贴哦。

本基础分为十个部分:
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//3
# print(a)
# a=5*3+2
# print(a)
'''幂运算  **'''
# a=4**2
# b=2**3
# print(a,b)

第二部分:字符串

"""
作者:川川
时间:2021/7/27
"""
'''单引号和双引号效果相同  反斜杠 \ 用于转义'''
# a='spam eggs'
# b='doesn\'t'
# c="\"Yes,\" they said."
# print(a)
# print(b)
# print(c)
'''如果不希望前置 \ 的字符转义成特殊字符,可以使用 原始字符串,在引号前添加 r '''
#比如说我们路径问题
# c=r'C:\some\name'
# print(c)
# print(r'C:\some\name')
'''三引号使用'''
# print("""\
# Usage: thingy [OPTIONS]
#      -h                        Display this usage message
#      -H hostname               Hostname to connect to
# """)
'''字符串可以用 + 合并(粘到一起),也可以用 * 重复'''
# a='how are '+'you'
# b='zhu'
# c=b*3
# print(a)
# print(c)
'''相邻的两个或多个 字符串字面值 (引号标注的字符)会自动合并'''
# a= 'Py'     'thon'
# print(a)
'''拆分长字符串'''
# text = ('Put several strings within parentheses '
#         'to have them joined together.')
# print(text)
    ######### 切片#########
'''字符串支持 索引 (下标访问),第一个字符的索引是 0。'''
# word = 'Python'
# print(word[0],word[2])
'''索引还支持负数,用负数索引时,从右边开始计数'''
# print(word[-1],word[-2])
# text='s'
# print(text[0])
'''除了索引,字符串还支持 切片。输出结果包含切片开始,但不包含切片结束'''
# print(word[0:2])
# print(word[0:5])
'''省略开始索引时,默认值为 0,省略结束索引时,默认为到字符串的结尾'''
# print(word[:2])
# print(word[4:])
# print(word[-2:])
'''切片会自动处理越界索引'''
# print(word[4:42])
# print(word[42:])
''' 字符串不能修改'''
# word[0] = 'J'#错误
'''要生成不同的字符串,应新建一个字符串'''
# z='J' + word[1:]
# print(z)
'''内置函数 len() 返回字符串的长度,一个空格也算一个长度'''
# s = 'supercalifragilisticexpia lidocious'
# print(len(s))

第三部分:列表

"""
作者:川川
时间:2021/7/27
"""
# squares = [1, 4, 9, 16, 25]
# print(squares)
'''支持索引和切片'''
# print(squares[1])
# print(squares[-1])
# print(squares[-3:])
'''列表还支持合并操作'''
# c=squares + [36, 49, 64, 81, 100]
# print(c)
'''列表内容可修改'''
# cubes = [1, 8, 27, 65, 125]
# cubes[3] = 64
# print(cubes)
'''append() 方法 可以在列表结尾添加新元素'''
# cubes.append(216)
# cubes.append(7 ** 3)
# print(cubes)
'''切片赋值可以改变列表大小,甚至清空整个列表'''
# letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
# print(letters)
# letters[2:5] = ['C', 'D', 'E']
# print(letters)
# letters[2:5] = []
# print(letters)
# letters[:] = []
# print(letters)
'''内置函数 len() 也支持列表'''
# letters = ['a', 'b', 'c', 'd']
# print(len(letters))
'''还可以嵌套列表(创建包含其他列表的列表)'''
# a = ['a', 'b', 'c']
# n = [1, 2, 3]
# x = [a, n]
# print(x)
# print(x[0])#索取
# print(x[0][1])
#while
'''斐波纳契数列,使得每个数字是两个前述者的总和,选自0和1。'''
# a, b = 0, 1
# while a < 10:
#     print(a)
#     a, b = b, a + b
'''print'''
# i = 256*256
# print('The value of i is', i)
'''end 可以取消输出后面的换行, 或用另一个字符串结尾'''
# a, b = 0, 1
# while a < 1000:
#     print(a, end=',')
#     a, b = b, a + b

第四部分:控制流

"""
作者:川川
时间:2021/7/27
"""
'''if语句固定搭配'''
# x = int(input("Please enter an integer: "))
# if x < 0:
#     x = 0
#     print('Negative changed to zero')
# elif x == 0:
#     print('Zero')
# elif x == 1:
#     print('Single')
# else:
#     print('More')
'''if ... elif ... elif ... 序列看作是其他语言中 switch 或 case 语句的替代品。'''
'''for语句'''
# words = ['cat', 'window', 'defenestrate']
# for w in words:
#     # print(w, len(w))
''' range() 函数用于遍历数字序列'''
# for i in range(5):
#     print(i)
'''range包左不包右'''
# for i in range(5, 10):
#     print(i)
'''range 可以不从 0 开始,还可以按指定幅度range(起点,终点,步长)'''
# for i in range(0, 10, 3):
#     print(i)
# for j in range(-10, -100, -30):
#     print(j)
'''range() 和 len() 组合在一起,可以按索引迭代序列'''
# a = ['Mary', 'had', 'a', 'little', 'lamb']
# for i in range(len(a)):
#     print(i, a[i])
'''使用sum和range求连加和'''
# print(sum(range(5)))    #0 + 1 + 2 + 3+4
'''range 生成列表解决'''
# print(list(range(4)))
'''质数判断'''
#仔细看:else 子句属于 for 循环,不属于 if 语句。
# for n in range(2, 10):
#     for x in range(2, n):
#         if n % x == 0:
#             print(n, 'equals', x, '*', n // x)
#             break
#     else:
#         print(n, 'is a prime number')
'''continue 语句也借鉴自 C 语言,表示继续执行循环的下一次迭代:'''
# for num in range(2, 10):
#     if num % 2 == 0:
#         print("Found an even number", num)
#         continue
#     print("Found an odd number", num)
#pass
'''pass 语句不执行任何操作'''
# while True:
#     pass
'''下面这段代码创建了一个最小的类'''
# class MyEmptyClass:
#     pass
'''pass 还可以用作函数或条件子句的占位符'''
# def initlog(*args):
#     pass

第五部分:函数

"""
作者:川川
时间:2021/7/27
"""
'''def 定义函数  斐波那契数列函数'''
# def fib(n):
#     a, b = 0, 1
#     while a < n:
#         print(a, end=' ')
#         a, b = b, a + b
#     print()
# fib(100)    #传参
#返回列表
# def fib2(n):
#     result = []
#     a, b = 0, 1
#     while a < n:
#         result.append(a)
#         a, b = b, a + b
#     return result
# f100 = fib2(100)
# print(f100)
'''默认值在 定义 作用域里的函数定义中求值'''
# i = 5
# def f(arg=i):
#     print(arg)
# i = 6
# f()#输出5而不是6
'''默认值为列表、字典或类实例等可变对象时,会产生与该规则不同的结果。'''
# def f(a, L=[]):
#     L.append(a)
#     return L
# print(f(1))
# print(f(2))
# print(f(3))
'''不想在后续调用之间共享默认值时,应以如下方式编写函数'''
# def f(a, L=None):
#     if L is None:
#         L = []
#     L.append(a)
#     return L
# print(f(10))
# print(f(11))
"""关键字参数"""
# def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
#     print("-- This parrot wouldn't", action, end=' ')
#     print("if you put", voltage, "volts through it.")
#     print("-- Lovely plumage, the", type)
#     print("-- It's", state, "!")
# # parrot(5)
# '''该函数接受一个必选参数(voltage)和三个可选参数(state, action 和 type)'''
# parrot(1000)                                          # 1 positional argument
# parrot(voltage=1000)                                  # 1 keyword argument
# parrot(voltage=1000000, action='VOOOOOM')             # 2 keyword arguments
# parrot(action='VOOOOOM', voltage=1000000)             # 2 keyword arguments
# parrot('a million', 'bereft of life', 'jump')         # 3 positional arguments
# parrot('a thousand', state='pushing up the daisies')  # 1 positional, 1 keyword
'''*name 必须在 **name 前面'''
# def cheeseshop(kind, *arguments, **keywords):
#     print("-- Do you have any", kind, "?")
#     print("-- I'm sorry, we're all out of", kind)
#     for arg in arguments:
#         print(arg)
#     print("-" * 40)
#     for kw in keywords:
#         print(kw, ":", keywords[kw])
# cheeseshop("Limburger", "It's very runny, sir.",
#            "It's really very, VERY runny, sir.",
#            shopkeeper="Michael Palin",
#            client="John Cleese",
#            sketch="Cheese Shop Sketch")
'''some example'''
# def standard_arg(arg):
#     print(arg)
# def pos_only_arg(arg, /):
#     print(arg)
# def kwd_only_arg(*, arg):
#     print(arg)
# def combined_example(pos_only, /, standard, *, kwd_only):
#     print(pos_only, standard, kwd_only)
#来看看区别
#第一个对调用方式没有任何限制,可以按位置也可以按关键字传递参数
# print(standard_arg(2))
# print(standard_arg(arg=2))
#第二个  函数定义中有 /,仅限使用位置形参
# print(pos_only_arg(1))
# print(pos_only_arg(arg=1))#就会报错
#第三个 函数定义通过 * 表明仅限关键字参数
# print(kwd_only_arg(3))#就会报错
# print(kwd_only_arg(arg=3))
#第四个kwd_only_arg(arg=3)
# print(combined_example(1, 2, 3))#报错
# print(combined_example(1, 2, kwd_only=3))
# print(combined_example(1, standard=2, kwd_only=3))
# print(combined_example(pos_only=1, standard=2, kwd_only=3))#报错
'''加上 / (仅限位置参数)后,就可以了。此时,函数定义把 name 当作位置参数,'name' 也可以作为关键字参数的键'''
# def foo(name, /, **kwds):
#     return 'name' in kwds
# print(foo(1, **{'name': 2}))#返回tuue
# def foo(name, **kwds):
#     return 'name' in kwds
# print(foo(name=5))#返回false,实际这name没用到,所以哟弄个上面那个方法
'''解包实参列表'''
# print(list(range(3, 6)))
# args = [3, 6]
# print(list(range(*args)))#用 * 操作符把实参从列表或元组解包出来
'''字典可以用 ** 操作符传递关键字参数'''
# def parrot(voltage, state='a stiff', action='voom'):
#     print("-- This parrot wouldn't", action, end=' ')
#     print("if you put", voltage, "volts through it.", end=' ')
#     print("E's", state, "!")
# d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
# parrot(**d)
"""Lambda 表达式"""
'''lambda a, b: a+b 函数返回两个参数的和'''
# def make_incrementor(n):
#     return lambda x: x + n
# f = make_incrementor(42)
# print(f(0))
# print(f(1))

第六部分:数据结构

"""
作者:川川
时间:2021/7/27
"""
"""5.1 列表详解"""
# fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
'''
list.count(x)
返回列表中元素 x 出现的次数
'''
# print(fruits.count('apple'))
'''
list.index(x[, start[, end]])
返回列表中第一个值为 x 的元素的零基索引位置,第一个!
'''
# print(fruits.index('banana'))
# print(fruits.index('banana', 4,7))
'''
list.reverse()
反转列表中的元素。
'''
# fruits.reverse()
# print(fruits)
'''
list.append(x)
在列表末尾添加一个元素
'''
# fruits.append('grape')
# print(fruits)
'''
list.sort(*, key=None, reverse=False)
就地排序列表中的元素
'''
# fruits.sort()
# print(fruits)
'''
list.pop([i])
删除列表中指定位置的元素,并返回被删除的元素。未指定位置时,a.pop() 删除并返回列表的最后一个元素。
'''
# fruits.pop()#默认删除最后一个
# print(fruits)
# fruits.pop(0)#删除第一个
# print(fruits)
'''
list.copy()
返回列表的浅拷贝,复制
'''
# fruits.copy()
# print(fruits)
'''
list.clear()
删除列表里的所有元素,相当于 del a[:] 。
'''
# fruits.clear()
# print(fruits)
'''
list.remove(x)
从列表中删除第一个值为 x 的元素。未找到指定元素时,触发 ValueError 异常。
'''
# fruits.remove('apple')
# print(fruits)
'''
list.insert(i, x)
在指定位置插入元素。第一个参数是插入元素的索引,因此,a.insert(0, x) 在列表开头插入元素
'''
# fruits.insert(1, 'nana')
# print(fruits)
'''用列表实现堆栈'''
'''
特点:“后进先出” 把元素添加到堆栈的顶端,使用 append() 。从堆栈顶部取出元素,使用 pop() ,不用指定索引。
'''
# stack = [3, 4, 5]
# stack.append(6)
# stack.append(7)
# print(stack)
# stack.pop()
# print(stack)
# stack.pop()
# print(stack)
'''用列表实现队列'''
'''特点:“先进先出” 实现队列最好用 collections.deque,可以快速从两端添加或删除元素'''
# from collections import deque
# queue = deque(["Eric", "John", "Michael"])
# queue.append("Terry")
# queue.append("Graham")
# print(queue)
# print(queue.popleft())#第一个
# print(queue.popleft())#第二个
# print(queue)
''''列表推导式'''
'''创建平方值的列表'''
# squares = []
# for x in range(10):
#     squares.append(x ** 2)
# print(squares)
# b=squares = [x**2 for x in range(10)]
# print(b)
# a=squares = list(map(lambda x: x**2, range(10)))
# print(a)#同上
'''列表推导式将两个列表中不相等的元素组合起来'''
# a=[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
# print(a)
'''等价如下'''
# combs = []
# for x in [1,2,3]:
#     for y in [3, 1, 4]:
#         if x != y:
#             combs.append((x, y))
# print(combs)
'''some example'''
# vec = [-4, -2, 0, 2, 4]
# print([x*2 for x in vec])
# print([x for x in vec if x >= 0])
# print([abs(x) for x in vec])#abs求绝对值
# freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
# a=[weapon.strip() for weapon in freshfruit]
# print(a)
'''!!!!表达式是元组(例如上例的 (x, y))时,必须加上括号'''
# b=[(x, x**2) for x in range(6)]
# print(b)
'''列表推导式可以使用复杂的表达式和嵌套函数'''
# from math import pi
# a=[str(round(pi, i)) for i in range(1, 6)]
# print(a)
'''嵌套的列表推导式'''
# matrix = [
# [1, 2, 3, 4],
# [5, 6, 7, 8],
# [9, 10, 11, 12],
#     ]
# a=[[row[i] for row in matrix] for i in range(4)]
# print(a)
#等价如下
# transposed = []
# for i in range(4):
#     transposed.append([row[i] for row in matrix])
# print(transposed)
'''5.2del 语句 移除元素'''
# a = [-1, 1, 66.25, 333, 333, 1234.5]
# del a[1]
# print(a)
# del a[2:4]
# print(a)
# del a[:]
# print(a)
'''del 也可以用来删除整个变量'''
# del a[:]
# print(a)
'''5.3元组和序列'''
'''元组由多个用逗号隔开的值组成'''
# t = 12345, 54321, 'hello!'#输入时,圆括号可有可无,不过经常是必须的
# print(t[0])
# print(t)    #输出时,元组都要由圆括号标注,这样才能正确地解释嵌套元组
# empty = ()
# singleton = 'hello',    #注意不加逗号就成了字符串了
# print(len(empty))
# print(len(singleton))
# print(singleton)
'''5.4集合'''
'''创建空集合只能用 set(),不能用 {},{} 创建的是空字典'''
# basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
# print(basket)
# print('orange' in basket)
# a = set('abracadabra')
# b = set('alacazam')
# print(a)
# print(a-b)
# print(a|b)#并集  letters in a or b or both
# print(a & b)#交集  etters in both a and b
# print( a ^ b)# # letters in a or b but not both
'''集合也支持推导式'''
# a = {x for x in 'abracadabra' if x not in 'abc'}
# print(a)
'''5.5字典'''
# tel = {'jack': 4098, 'sape': 4139}
# tel['guido'] = 4127 #添加
# print(tel)
# print(tel['jack'])#索取
# del tel['sape']
# tel['irv'] = 4127
# print(tel)
# print(list(tel))#转换为列表
# print('guido' in tel)
'''dict() 构造函数可以直接用键值对序列创建字典'''
# a=dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
# print(a)
# print(a['sape'])
'''字典推导式可以用任意键值表达式创建字典'''
# a={x: x**2 for x in (2, 4, 6)}#lamda
# print(a)
'''关键字是比较简单的字符串时,直接用关键字参数指定键值对更便捷'''
# c=dict(sape=4139, guido=4127, jack=4098)
# print(c)
# print(c['jack'])
'''5.6循环的技巧'''
'''在字典中循环时,用 items() 方法可同时取出键和对应的值'''
# knights = {'gallahad': 'the pure', 'robin': 'the brave'}
# for k, v in knights.items():
#     print(k,v)
'''在序列中循环时,用 enumerate() 函数可以同时取出位置索引和对应的值'''
# for i, v in enumerate(['tic', 'tac', 'toe']):
#     print(i,v)
'''同时循环两个或多个序列时,用 zip() 函数可以将其内的元素一一匹配'''
# questions = ['name', 'quest', 'favorite color']
# answers = ['lancelot', 'the holy grail', 'blue']
# for q, a in zip(questions, answers):
#     print('What is your {0}?  It is {1}.'.format(q, a))#0和1只是占位,不起作用,可以空着
'''逆向循环序列时,先正向定位序列,然后调用 reversed() 函数'''
# for i in reversed(range(1, 10, 2)):
#     print(i)
'''按指定顺序循环序列,可以用 sorted() 函数,在不改动原序列的基础上,返回一个重新的序列'''
# basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
# for i in sorted(basket):
#     print(i)
'''使用 set() 去除序列中的重复元素。使用 sorted() 加 set() 则按排序后的顺序,循环遍历序列中的唯一元素'''
# basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
# for f in sorted(set(basket)):
#     print(f)
'''一般来说,在循环中修改列表的内容时,创建新列表比较简单,且安全'''
# import math
# raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8]
# filtered_data = []
# for value in raw_data:
#     if not math.isnan(value):
#         filtered_data.append(value)
# print(filtered_data)#筛选出数字
'''5.7. 深入条件控制¶'''
'''布尔运算符 and 和 or 也称为 短路 运算符:其参数从左至右解析,一旦可以确定结果,解析就会停止。'''
# string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
# non_null = string1 or string2 or string3
# print(non_null)#返回一个值
相关文章
|
6天前
|
存储 Python
SciPy 教程 之 SciPy 稀疏矩阵 4
SciPy 教程之 SciPy 稀疏矩阵 4:介绍稀疏矩阵的概念、类型及其在科学计算中的应用。SciPy 的 `scipy.sparse` 模块提供了处理稀疏矩阵的工具,重点讲解了 CSC 和 CSR 两种格式,并通过示例演示了如何创建和操作 CSR 矩阵。
25 3
|
2天前
|
Python
SciPy 教程 之 SciPy 图结构 7
《SciPy 教程 之 SciPy 图结构 7》介绍了 SciPy 中处理图结构的方法。图是由节点和边组成的集合,用于表示对象及其之间的关系。scipy.sparse.csgraph 模块提供了多种图处理功能,如 `breadth_first_order()` 方法可按广度优先顺序遍历图。示例代码展示了如何使用该方法从给定的邻接矩阵中获取广度优先遍历的顺序。
11 2
|
2天前
|
算法 Python
SciPy 教程 之 SciPy 图结构 5
SciPy 图结构教程,介绍图的基本概念和SciPy中处理图结构的模块scipy.sparse.csgraph。重点讲解贝尔曼-福特算法,用于求解任意两点间最短路径,支持有向图和负权边。通过示例演示如何使用bellman_ford()方法计算最短路径。
12 3
|
2天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
9 1
|
7天前
|
存储 Python
SciPy 教程 之 SciPy 稀疏矩阵 2
SciPy教程之SciPy稀疏矩阵2:介绍稀疏矩阵的概念、应用场景及scipy.sparse模块的使用。重点讲解CSC和CSR两种稀疏矩阵类型及其常用方法,如data属性和count_nonzero()方法。
31 4
|
14天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
14 6
|
11天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
14 1
|
13天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
11 1
|
13天前
|
Python
SciPy 教程 之 SciPy 模块列表 8
SciPy教程之常量模块单位类型介绍。该模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例展示了部分长度单位的转换值,例如英寸、英尺、海里等。
13 1
|
4天前
|
算法 索引 Python
SciPy 教程 之 SciPy 图结构 3
SciPy 图结构教程:介绍图的基本概念、节点和边的定义,以及如何使用 SciPy 的 `scipy.sparse.csgraph` 模块处理图结构。重点讲解 Dijkstra 最短路径算法及其在 SciPy 中的应用,包括 `dijkstra()` 方法的参数设置和使用示例。
8 0