题外话
📢 博客主页:❤布小禅❤📢 作者专栏:❤Python❤❤Java❤
前言
现在不是一直都在吹 Python 吗,说什么小学都要出 Python 的教材了,搞得好像这年头不会个 Python 还不如小学生一样!
既然如此,那么?你会 Python 吗?
不会?不要紧!一篇文带你入门 Python!一篇文带你疏通 Python 基础语法!
会?行吧,别急着走嘛!看看吧。毕竟,温故而知新,可以为师矣!
Python 作为一门高级编程语言吗,最大的特点就是简单易学
来看看 Python 是如何在 C/C++,Java 等语言中脱颖而出的吧
1. Python 能用来干嘛
由于 Python 的第三方类库实在是太多了,因此它能做的事情也是极多的,甚至你也可以自己做一些类库放在网上让别人使用。
这其一呢,Python 可以做我们的 PC 客户端,也就是 PC 端的 QQ,百度网盘之类的需要下载安装的软件
这其二呢,Python 还能做点 PC 端的小游戏,比如什么植物大战僵尸,魂斗罗,飞机大战的
这其三呢,Python 还能搭建网站,做我们经常用的类似于百度,CSDN,华为云社区这些
这其四呢,Python 还可以做网络爬虫,就是不需要我们手动的去网络上下载数据,代码一键把 所有数据拿下来(当然也很有风险)
这其五呢,Python 可以做数据分析,就是把我们从网络上爬取的数据进行分类,放在一起,便于查询,把我们不需要的数据丢掉之类的
这其六呢,Python 还可以做 AI,也就是人工智能
这其七呢,Python 可以做自动化办公,也就是自动填写表格,自动处理数据之类的
这其八呢,Python 还可以做自动化运维
当然除了这些,还能做些别的,我就不一一道来了,因为一个人精力有限,也是没法全部学完的,就说这么多吧
.......
2. 安装 Python 和 HelloWorld
2.1 下载
可以去官网下载——官网
下载后傻瓜式安装,不过有一步需要注意的是:Add to path 的地方需要勾一下
不勾选的话需要手动配置环境,异常麻烦
2.2 shell 命令
安装好以后,我们Ctrl + R输入cmd打开命令行
在命令行输入我们所学语言的名字:python
会看到这个符号:>>> 这个就是 Python 自带的交互模式
2.3 第一个程序
而我们只需要输入print("HelloWorld")
就能让计算机给我们显示一个 HelloWorld 出来
而在括号里面,引号里面,我们可以进行修改,来改变屏幕显示的内容
引号的意思:引号在 Python 里面是有字符串的意思
当然,你也可以在括号里面输入 1+1 等运算来让计算机给你计算结果
3. 输入输出
顾名思义,输入就是你用键盘输入,输出就是计算机输出给你内容
3.1 输入
输入我们需要用到一个内置函数:input()汉语意思也是输入,在 Python 中的作用也是输出
觉得不好理解可以这么理解:
input()表示我对电脑说的话
3.2 输出
输出我们需要用到一个内置函数:print()汉语意思是打印,就是打印内容到你的屏幕上
而这个 print 函数,也是我们 HelloWorld 入门实战的函数
print()表示电脑对我说的话
3.3 使用
设计一个小程序实现输入什么内容就输出什么内容
代码:
print(input()) # 意思是在输出函数里面使用输入函数
复制代码
看着很简单,但是其实还设计了函数返回值的知识,这里就只提一下
在 input()函数的括号里可以像 print()函数一样写东西,他会在你运行代码之后显示
你可以用这个来设置输入的提示信息
4. 基本语法
每个语言都有自己的语法,不同语言的语法也不尽相同
4.1 缩进
在别的语言中使用大括号来表示一个代码块
而在 Python 中使用缩进来规定一个代码块
缩进一般以四个空格为标准
缩进错误会报错显示语法错误
错误缩进:
正确缩进:
4.2 注释
给自己的程序添加注释是很有必要的
俗话说得好:
程序员最讨厌给自己的代码写注释,更讨厌别人的代码不写注释
单行注释
# 我是单行注释
多行注释
"""多行注释"""
'''多行注释'''
两种多行注释都能当字符串使用
一定要养成写注释的好习惯,这很重要
4.3 标识符
程序员自己命名的
有自己的规范
包含数字,字母,下划线
不能以数字开头
大小写敏感
一般采用驼峰命名法
首字母小写,其他单词首字母大写
peopleName 这样
类名建议首字母大写
一定要遵循规范,这很重要
4.4 保留字
官方规定的具有某种特定意义的单词
标识符不能用保留字
Python 有 33 个保留字
也叫关键字
所有符号都用英文半角符号
诸如 def class 等不是内置函数的单词
def class if for while 等等等
复制代码
5. 常量变量运算符
5.1 常量
值无法改变的量
例如数字 1
例如字符串"hello world"
等等
5.2 变量
值能改变的量
名字为标识符
使用赋值符号 = 给变量复制
a = 1 这样
a = 1b = "www"print(a,b)# 1www
复制代码
5.3 运算符
5.3.1 算术运算符
print(1+1) # 2print(10-2) # 8print(10*2) # 20print(10/2) # 5
复制代码
5.3.2 比较运算符
print(1==2) # Falseprint(1>2) # Falseprint(10>=5) # Trueprint(5<=1) # Fasle
复制代码
5.3.3 赋值运算符
直接赋值:=
相加赋值:+=
相乘赋值:*=
.....
i = 10 # 给i赋值为10print(i+=1) # 让i加1print(i*=2) # 让i乘2
复制代码
6. 数据类型
6.1 基本数据类型
整型
1
100
浮点型
1.1
10.1
布尔型
True
False
复数类型
5j+1
1+3j
6.2 高级数据类型
6.2.1 字符串
"hello"
'hello'
'''hello'''
"""hello"""
"""例子:给出一个变量a = 1 怎么让输出的结果为:“a的值为:1”
第一个方法:print(“a的值为:”, a)第二个方法:print(“a的值为:{}”.format(a))第三个方法:print(“a的值为:%d”%a)第四个方法:print(f"a的值为:{a}")其实就是让我们的字符串中可以添加变量,而第一种的方法在处理一个字符串中的多个变量时是较为麻烦的,这时候就需要用到下面三个,比较简单,我最喜欢的是第四个方法。因为写出来简单"""a = 1print(“a的值为:”, a)print(“a的值为:{}”.format(a))print(“a的值为:%d”%a)print(f"a的值为:{a}")# 原生字符串和非原生字符串# 看代码看差异# 1. 原生字符串print(r'\n\t')# 2. 非原生print('\n\t')
复制代码
6.2.2 列表
[1, 2, 3, 4]
['a', 'b', 'c', 'd']
[True, False, False]
增删改查:
li = [1, 2, 3, 4]li.append(5) # [1, 2, 3, 4, 5]li.remove(5) # [1, 2, 3, 4]li[0] = 10 # # [10, 2, 3, 4]print(li[0], li[1])
复制代码
6.2.3 元组
(1, 2, 3, 4)
('a', 'b', 'c', 'd')
增删:
tu = (1, 2, 3, 4)tu1 = (5,)tu2 = tu+tu1 # (1, 2, 3, 4, 5)del tu # 全部删除
复制代码
6.2.4 字典
{'a': 1, 'b': 2}
{1: 'a', 2:'b'}
增删改查:
dic = {'a': 1, 'b': 2}dic['c'] = 3 # {'a': 1, 'b': 2, 'c': 3}del dic['c'] # {'a': 1, 'b': 2}dic['a'] = 10 # {'a': 10, 'b': 2}print(dic['a']) # 10
复制代码
6.2.5 集合
(1, 2, 3, 4)
('a', 'b','c')
增删:
se = {1, 2, 3, 4}se.add(5) # {1, 2, 3, 4, 5}se.remove(5) # {1, 2, 3, 4}se.clear() # 全部删除
复制代码
6.2.6 下标
下面的可以用下标来访问该下标的值,下标从 0 开始
print("hello"[0]) # hprint([1, 2, 3, 4][1]) # 2print({1, 2, 3, 4}[2]) # 3print((1, 2, 3, 4)[3]) # 4# 下标:0 1 2 3print({'a': 1, 'b': 2}['a']) # 1# 字典以键取值,前面是键,后面是值
复制代码
6.2.7 切片,步长
对这些类型取某些值,而不是单一的值
print("hello"[0:2]) # 切片出heprint([1, 2, 3, 4][0:3:2]) # 从下标0到3每二个取[1, 3]# print({1, 2, 3, 4}[0:1] # 会报错,因为集合具有无序性print((1, 2, 3, 4)[3])
复制代码
7. 分支控制语句
7.1 循环控制语句
7.1.1 for 循环
for i in range(10): print(i)# 也可以对高级数据类型进行这样的操作a = "Hello World!"for i in range(10): print(a)
复制代码
7.1.2 while 循环
i = 0while i<10: print(i)# 也可以对高级数据类型进行这样的操作a = "Hello World!"i = 0while i<10: print(a[i]) i+=1
复制代码
7.2 条件控制语句
7.2.1 if 单支
a = int(input("请输入一个整数"))b = int(input("请输入一个整数"))c = a+bif c<10: print("两数之和小于10")
复制代码
7.2.2 if......else......
a = int(input("请输入一个整数"))b = int(input("请输入一个整数"))c = a+bif c<10: print("两数之和小于10")else: print("两数之和大于10")
复制代码
7.2.3 if......elif......elif......else......
a = int(input("请输入一个整数"))b = int(input("请输入一个整数"))c = a+bif c<10: print("两数之和小于10")elif c==10: print("两数之和等于10")else: print("两数之和大于10")
复制代码
7.3 break
while True: a = input() if a == "q": break else: print(a + " 输入成功,输入 'q' 退出程序")
复制代码
7.4 continue
for i in range(10): if i % 5 == 0: continue else: print(i)
复制代码
8. 函数式编程
8.1 作用
8.2 定义
使用关键字:def 定义
8.2.1 无参函数
# 定义def Qinghua(): print("我爱你") print("我要给你生猴子") print("啊啊啊,好喜欢你")# 调用Qinghua()def fun(): print("我是无参函数")fun()
复制代码
8.2.2 有参函数
def PinJie(a, b): str_ = str(a)+str(b) print(str_) for i in str_: print(i)
PinJie("sasa", 4564)#也可以这么写"""PinJie(a="sasa",b=4564)这样写的好处是就算你的位置写错了参数传递的也还是对的也就是说,参数传递的位置不固定就像这样PinJie (b=4564, a='sasa')是完全一样的"""
复制代码
8.3 返回值
return 用于将函数变成变量使用
函数名字(参数)就是返回的值
def PinJie(a, b): str_ = str(a)+str(b) return str_
p = PinJie("sasa", 4564)print(p)
复制代码
8.4 优点
8.5 缺点
9. 面向对象编程
9.1 作用
9.2 使用
9.3 定义
使用 class 关键字定义
class Person1: pass
class Person2(): pass
class Person3(object): pass# 使用实例化对象p1 = Person1()p2 = Person2()p3 = Person3()
复制代码
9.4 构造方法
def __init__(self): pass# 给类传参class Person3(object): def __init__(self, name, age): passp3 = Person3('a', 12)
复制代码
9.5 封装
在构造方法里 self.属性 = 属性
在属性名前面加 _
在方法名前面加 _
# 在构造方法里self.属性 = 属性class Person1(object): def __init__(self, name, age): self.name = name self.age = age
Menger = Person("萌杰尔", 20)
name = Menger.nameage = Menger.ageprint("姓名:{} \n年龄:{}".format(name, age))# 在属性名前面加 _class Person2(object): _weight = 70 def __init__(self, name, age, height): self.name = name self.age = age self.height = height def weightPrint(self): print("我的体重是:", self._weight)
person = Person("布小禅", 20, 180)person.weightPrint()# 在方法名前面加 _class Person3(object): def _love(self): print("我暗恋Xxx") def speakLove(self): self._love()
复制代码
9.6 继承
class Person(object):
def __init__(self, name, age): self.name = name self.age = age def speak(self): print(f"{self.age}岁的{self.name}会说话")class Boy(object,Person): passboy = Boy ("Menger", 20)boy.speak()
复制代码
9.7 魔术方法
_init_ 构造方法
_str_ 使实例化对象变成字符串
_new_ 先于构造方法被执行
_call_ 使实例化对象拥有函数性质
_del_ 实例化对象被删除时执行
class Person(object): def __str__(self): return "我是__str__方法的返回值,显示在打印实例化对象时" def __del__(self): print("我没用了,我被删除了") def __new__(cls): print("我是__new__方法") return super().__new__(cls) def __call__(self): print("执行了__call__方法") return "我是返回值"
p = Person()print(p)
复制代码
10. 进阶操作
10.1 异常处理
try: print(a)except: print("小伙子,我不认识什么是a啊")finally: print("好好写代码,不要老是报错了啊")
复制代码
10.2 文件操作
内置函数 open()
open("文件名", "读取方式")
w 只写
r 只读
w+读写
wb 以二进制写
rb 以二进制读
wa 追加写入
"""测试文件为text.txt内容为:我是text.txt我的作用是测试文件操作"""f = open('text.txt', 'r', encoding='utf-8')# 用变量接收,以便于后面的操作ree = f.read() # 读取全部li = f.readlines() # 按行读取全部行rre = f.readline() # 只读取一行# 测试三个函数,运行的时候,记得把别的注释掉# 原因是第一个函数已经把文件的指针挪到最后了,第二个函数就读不到东西print(ree)f.close()# 使用完记得关闭文件,免得消耗资源,使得程序报个内存溢出的错f = open('text.txt', 'w', encoding='utf-8')f.write("我是使用write函数写入的")f.close()# 这个方法会覆盖原来的,想继续写,只能使用追加方式f = open('text.txt', 'wa', encoding='utf-8')f.write("我是使用write函数写入的")f.write("我是使用write函数写入的")f.write("我是使用write函数写入的")f.write("我是使用write函数写入的")f.close()
复制代码
10.3 常用模块
10.3.1 os 模块
路径,文件,sys
参考我之前的博客:os模块的简单使用
10.3.2 time 模块
计时,时间
import timestart = time.time() # 当前时间戳a = 1000**100000end = time.time() # 获取计算完成的时间戳runTime = end - start # 计算所花的时间print("本次计算耗时:{}".format(runTime))
复制代码
10.3.3 random 模块
随机数
import random# 生成10个0-10的证书for i in range(10): print(random.randint(0,10))
# 生成10个0-1的数for i in range(10): print(random.random())
复制代码
10.3.4 re 模块
正则表达式
"""正则表达式用于提取字符串中的某些数据"""import re# 定义一个字符串a = "大连科技动拉网红豆味"# 提取科技两个字print(re.findall("大连(.*?)动", a))
复制代码
10.4 多线程
要先了解进程,线程的区别
拿电脑举例子的话,进程就是 QQ,微信等不同的程序
拿 py 文件举例子的话,就是你的多几个 py 文件
拿电脑举例子的话,就是 QQ,微信里你能和好多人一起聊天
拿 py 文件举例子的话,就是你在 py 文件里的许多函数
10.4.1 无序性
多线程具有无序性:
既任务不会按顺序完成
代码:
import threadingdef speak(a=list): for i in a: print("我是",i,"\n")
li = [1, 2, 3, 4, 5, 6, 7]li2 = ['1', '2', '3', '4', '5', '6', '7']
s1 = threading.Thread(target=speak, args=(li,))s2 = threading.Thread(target=speak, args=(li2,))s1.start()s2.start()
复制代码
运行结果:
"""我是 1 我是 我是1 2
我是 我是2 3
我是 3
我是 我是4 4
我是5 5
我是 我是6 6
我是 我是7 7
"""
复制代码
10.4.1 自定义线程类
class MyThead(threading.Therad): def __init__(self,n): super(MyThread,self).__init__() #重构run函数必须写 self.n = n def run(self) -> None: speak(li) speak(li2) return super().run() def speak(a=list): for i in a: print("我是",i,"\n")
li = [1, 2, 3, 4, 5, 6, 7]li2 = ['1', '2', '3', '4', '5', '6', '7']s1 = MyThead('1')s2 = MyThead('2')s1.start()s2.start()
复制代码
10.4.3 守护线程
如果不设置守护线程,那么主线程退出后,其他线程仍会执行直到执行完毕才会退出
线程默认不是守护线程,设置守护线程的方法是设置线程函数的参数 daemon=True
import threadingdef speak(): print("aaa") t1 = threading.Thread(target=speak, daemon=True)t2 = threading.Thread(target=speak)t3 = threading.Thread(target=speak)
复制代码
10.5 pymysql
使用 Python 链接数据库
import pymysqlpymsql.connect(host='127.0.0.1',port=3306, user='你自己的账号', passwd='你自己的密码', db='你的数据库')
复制代码
执行语句:
# 获取游标cos = con.cursor(pm.cursors.DictCursor)sql = cos.execute("select * from 你自己的数据表")# 查看查询结果print(sql)
复制代码
关闭连接:
10.6 模块与包
10.6.1 模块
模块是一个 py 文件
我们自己创建一个 py 文件就是一个模块
我们可以对他进行导入的操作,然后使用
自定义模块:textmodel.py
另一个 py 文件:模块.py
导入的时候记得要让两个文件同路径
我们导入自定义模块,然后使用自定义函数
# 第一种方法 import textmodel textmodel.print_f("第一种方法:直接导入 测试成功") # 第二种方法 from textmodel import print_f print_f("第二种方法:精确导入某函数 测试成功") # 第三种方法 import textmodel as tm tm.print_f("第三种方法:导入起别名 测试成功")
复制代码
导入别人的模块和内置模块也可以这样
项目文件夹:
10.6.2 包
包就是一个含有__init__.py的文件夹
我们在项目目录下创建一个文件夹text,然后在里面放一个__init__.py的文件
这样就是一个包了
在 text 文件夹新建一个textpackage.py
和 text 同目录的模块.py文件
from text import textpackeg textpackeg.print_f("包测试成功")
复制代码
项目文件夹:
text 文件夹:
评论