内容全干货,不说废话。代码讲解都在注释哦。希望挨个看着敲一遍,不要复制粘贴哦。
本基础分为十个部分:
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)#返回一个值