Python 基础中的基础例子
纯菜鸟笔记,目录:
- 一、
配置Python环境
- 二、
IDE
- 三、
简略语法
- 四、
代码例子
- 五、
创建库/模块
前言:
Python是一种面向对象的动态类型跨平台的计算机程序设计语言,优点开源,库多。
主要应用于:
1、Web应用
例如网站:youtube、instagram
2、 AI人工智能与机器学习
AI人工智能的官方标配程序语言
3、网络爬虫
在网上搜索数据,爬虫框架:scrapy,HTTP请求库:Requests
4、数据分析
分析从网上得来的数据,常用可视化库:seaborn,回归计算:pandas、numpy、scipy
5、等等
。。。
这里主要记录最简单的步骤实现写起步操作,安装与简单语法规则。
一、配置Python环境
当前测试环境为最基础的搭建环境,Python3.8 +自带的 IDLE编辑器
Python3.8 windows配置环境下载:python-3.8.1.exe
下载安装,安装时勾上自动配置path环境(否则得自己配置),安装完成后,在命令行cmd里输入python
既可以测试是否安装成功。
二、IDE
IDLE
:上一步安装时,是附带了个原版简单的IDLE
编辑器的(简单得像极了纯净的爱情),所以可以在开始里找到IDLE
打开。然后新建文件,就可以开始写代码了,这是最快的方式不到2分钟。。。- 正常开发推荐的IDE:
VS code
、WingIDE
、PyCharm
、Vim IDE
三、简略语法
1、Python 的代码结构的是需要首字母缩进4个空格(不是Tap键),与java和c等在编辑上第一大区别,缩进格式错误则编译错误。
2、控制语句:
if
,当条件成立时运行语句块。经常与else, elif(相当于else if) 配合使用。in
,判断一个对象是否在一个字符串/列表/元组里。- for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。
while
,当条件为真时,循环运行语句块。try
,与except,finally
配合使用处理在程序运行中出现的异常情况。class
,用于定义类型。def
,用于定义函数和类型的方法。pass
,表示此行为空,不运行任何操作。assert
,用于程序调试阶段时测试运行条件是否满足。with
,Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加密,然后在语句块运行退出后解密。yield
,在迭代器函数内使用,用于返回一个元素。自从Python 2.5版本以后。- 这个语句变成一个运算符。raise
,制造一个错误。import
,导入一个模块或包。from import
,从包导入模块或从模块导入某个对象。import as
,将导入的对象赋值给一个变量。
3、表达式:
- 运算符: - +, -,*, /, //, **, ~, %
表示加,减,负、乘、除、整除、乘方、补(非)、余。
>>, <<表示右移和左移。
&, |, ^表示二进制的AND, OR, XOR运算。
>, <, ==, !=, <=, >=`表示大于、小于、等于、不等于、小于等于、大于等于。在这些运算符里面,~, |, ^, &, <<, >>只应用于整数。 - 列表
List
:[1,2,3],支持列表切割如:list[1,2] ,意思为截取列表1到2 - 元组
tuple
:(1,2,3),赋值:x,y=1,2 ,交换:x,y = y,x - 双引号和单引号效果一样都是括字符,它们可以彼此互相包裹区分
- 列表推导式:
num = sum(x * x for x in range(10))
(0-9的平方和)结果:num = 285 - 逻辑运算:and, or, not
- 条件表达式 : f =
y if cond else x
释义:cond为真时f=y,为假时f=x - 判断对象是否相等:
is, is not
,判断是否属于对象:in, not in
- 匿名函数:add=
lambda
x, y : x + y 则后面可以引用:add(1+2) - Python函数支持递归、默认参数值、可变参数,但不支持函数重载。
四、代码例子
- 这里记录的是IDLE就可以编写的小例子,注意缩进格式:
1、输出函数,就一句,按F5
编译
print("Hello Python! \r\n ") #打印输出
2、引用turtle库,画几个圆
import turtle #引用turtle库\模块,可以画画的库
'''
画个两个圆圈
'''
turtle.pensize(2) #线条大小
turtle.circle(40) #画圆
turtle.circle(20) #画圆
turtle.done() #关闭turtle
3、画个循环圈线的图
import turtle as t #引用turtle库/模块
'''
画个循环圈线的图
'''
t.color('red') #颜色
for i in range(100): #循环次数
t.fd(i) #长度为i
t.left(70) #角度左偏角度
t.done();
4、画一个实心红色五角星
from turtle import* #引用turtle库/模块
'''
绘画一个实心红色五角星
'''
color('red','red') #颜色
begin_fill() #实心填充起点
for i in range(5): #for循环5次
fd(200) #线长200
rt(144) #转角角度右偏144度
end_fill() #实心填充终点
done() #关闭turtle
5、循环检测键入数值,判断并输出
'''
简单判断输入数值类型,输出
'''
print("提示:输入“exit”退出!\r\n")
while(1): #while死循环
mun=input("请输入数字:")
if mun=="exit":
print("已退出!\r\n")
break
if mun.replace(".","").isdigit(): #判断是否全为数字
if mun.count(".")!=0: #判断是否存在点 .
print("这是个float数!"+mun+"\r\n")
else:
print("这是个int数!"+mun+"\r\n")
else:
print("输入的格式错误!"+mun +"\r\n")
5、创建一个学生class类
'''
创建class类,保持文件名与类名相同
'''
class student(object):
def __init__(self, n, a): #__init__魔法函数,(self相当于this)定义构造方法,
self.name = n; # 设置属性name
self.age = a; #设置属性age
def __str__(self): # __str__魔法函数,初始化定义时调用的print()从此返回数据
return "name:%s age:%d"%(self.name, self.age);
def pt(self): #自定义的一个方法
print ("name:%s age:%d"%(self.name, self.age));
marry = student("玛丽",18);
print(marry);
6、新建个外部文件调用上面例子5的student class类
'''
调用student.py,并且两个.py文件保存在同个文件夹下
'''
from student import student #引用student class类,同文件夹中引用
f=student("lili",20) #实例化新的student
f.pt(); #调用student的pt()方法
7、网络请求
创建模块httpget.py,本身无输出功能,创建了inface抽象类接口,将在第8例调用
import urllib.parse,urllib.request
import _thread,time,traceback,sys,json
from urllib import request
from abc import ABCMeta,abstractmethod
fileaddr=r"C:\Users\Hesiod\Desktop\test1.html"
'''-----------定义接口------------'''
class inface(metaclass=ABCMeta):
#__metaclass__ = ABCMeta #指定这是一个抽象类
@abstractmethod #抽象方法
def reshtml(self,htmltxt):
pass
@abstractmethod #抽象方法
def resjson(self,jsontxt):
pass
@abstractmethod #抽象方法
def myprint(self,msg):
pass
'''---------初始化方法-----------'''
def initurl(tag):
# 定义请求数据,并且对数据进行赋值
url = "http://www.kuaidi100.com/query"
values={}
values['type']= 'yuantong'
values['postid']= '11111111111'
data = urllib.parse.urlencode(values) #对请求数据进行编码
#data为字符:type=yuantong&postid=11111111111 (GET)
#data = urllib.parse.urlencode(values).encode('utf-8')
#data为字节:b'type=yuantong&postid=11111111111' (POST)
reqkd = url + '?' + data # 拼接,将返回快递测试号的json数据
reqbd = "https://huiyi.youkuaiyun.com/" #返回优快云活动html,这里只能保存小网页
reqhao = "https://www.hao123.com" #返回hao123的首页html
if (tag==0):
return reqkd
elif(tag==123):
return reqhao
else:
return reqbd
#开启线程方法
def start_get(self,geturl):
_thread.start_new_thread(httputil,(self,geturl,))
def start_out(self,htmltxt):
#f_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
_thread.start_new_thread(output,(self,htmltxt,))
'''--------------数据获取,线程方法函数------------------'''
#定义一个向Web请求数据的线程方法
def httputil(self,geturl):
try:
response = urllib.request.urlopen(geturl) # 打开请求,获取对象
self.myprint(response.status) # 打印Http状态码,成功为200
if(response.status==200):
#读取服务器返回的数据,对HTTPResponse类型数据进行读取操作
restype = response.headers['Content-Type']
if "text/html" in restype:
the_page = response.read()
res = the_page.decode("utf-8")
if (ck_json(res)):
self.resjson(res)
else:
self.reshtml(res)
self.myprint(geturl+"\r接收成功!\r\n")
else:
self.myprint("收到一个文件:"+restype )
else:
self.myprint("get返回失败!\r\n")
except:
self.myprint("get请求异常!\r\n")
traceback.print_exc(file=sys.stdout)
finally:
self.myprint("end\r\n")
#判断是否为json数据
def ck_json(data):
try:
json.loads(data)
except:
return False
return True
#输出txt文本方法
def output(self,htmltxt):
try:
with open(fileaddr,"w") as f:
f.write(htmltxt) #写完自动执行close()
self.myprint("输出文本成功!\r\n")
except:
self.myprint("输出文本异常!\r\n")
finally:
self.myprint("输出线程结束!\r\n")
8、网络请求,调用第7例:网络模块,要和第7例放在同个文件夹里,或者按第五点说的创建模块。
from httpget import *
import json
fileaddr=r"C:\Users\Hesiod\Desktop\test1.html" #重写保存位置:fileaddr
class my_face(inface): #重写抽象继承inface接口类
def __init__(self,geturl): #重写的inface四个方法都要写上
print("start")
start_get(self,geturl)
#如果接收的是html
def reshtml(self,htmltxt):
print("收到html:\r\n",htmltxt)
start_out(self,htmltxt)
#如果接受的是json
def resjson(self,jsontxt):
mjson = json.loads(jsontxt)
sjson = json.dumps(mjson,sort_keys=True,ensure_ascii=False,indent = 1,)
print("收到json:\r\n"+sjson)
#打印
def myprint(self,msg):
print("提示:",msg)
#----------主函数-----------
f=my_face(initurl(0)) #实例化,0为json,其他为csdn活动.html,123为hao123.html
f.myprint("my_face")
五、创建库/模块
一、最简单的本地通用模块:
- 1、 把前面例子5中的student例子,拷贝到安装包目录的Lib\site-packages下,文件名可以改为:people.py(不改也可以),就和库一样哪里都可以调用了。
- 2、调用的方法
import people #调用自定义的people库
s = people.student("kimi",22) #实例化库里面的student类
s.pt(); #调用类里面的pt()方法
二、创建本地库包:
在当前文件夹中,新建个myku文件夹,底下:
1、 创建 __init__.py
文件,python3.3后可以不创建:
__all__=['man'] #指向所有声明的文件,这里man(.py)在下一步创建
2、 把前面例子5的student例子拷贝进来,改名为man.py
(不改也行);
3、 调用方法,在与myku文件夹同一层目录
创建的.py
,调用如下:
from myku import man as m
s=m.student("Bob",24)
s.pt()
三、开源库
新手就先不要学开源了,不仅占资源,还给可能大伙添麻烦!