目录
1、基础语法和基本数据类型.py
2、python中的运算符和类型详解
3、逻辑控制循环遍历自定义函数
4、堆栈、队列、元素操作
5、模块和包
6、输入和输出、序列化和反序列化、文件读写操作
7、异常处理
8、面向对象
9、作用域和常用模块
10、正则表达式、CGI、Mysql操作
??????????????????11、网络编程、发送邮件、多线程
12、xml解析、json解析、日期和时间、urllib库
1、基础语法和基本数据类型.py
? ? ?详细看这里
????????变量:变量名第一个字符必须为字母或者下划线,变量对大小写敏感,python中的保留字 不能作为变量名使用:
? ? ? ? 不通过的变量名:
????????
1c = 3
!1 = 1
*2 = 1
# 查看python中的保留字
print(keyword.kwlist)
单行注释:
? ? ? ? 在代码前加#
多行注释:
? ? ? ? 三个单引号或者三个双引号包住的
????????
'''
多行注释
'''
"""
多行注释
"""
pd = True
"""
其他:
# 键盘输入
input("请输入:")
# 多个变量赋值:
a = b = c = 1
2、python中的运算符和类型详解
详细看这里
算数运算符:
# 算数运算符 + - * / % ** //
# 2**3 为2的3次方 = 2*2*2
a = 2
b = 3
print(a ** b)
# //为除,不同的是返回的结果为整数
print(b // a)
比较运算符
== != > < >= <=
# 是否等于
print(a == b)
#是否不等于
print(a != b)
#是否大于
print(a > b)
#是否小于
print(a < b)
#是否大于等于
print(a >= b)
成员运算符
in 包含 not in 不包含
print("Python成员运算符-----------------")
list = [1, 2, 3, 4, 5]
print(1 in list)
print(9 in list)
print(9 not in list)
Python身份运算符
# is 同一个对象 is not 不同对象
print("Python身份运算符-----------------")
list2 = [5, 4, 3, 2, 1]
print(list is list2)
print(list is not list2)
Python3 数字(Number)
"""
刚开始入门可能用不到,可以跳过
但是:需要掌握一些比较常用的,比如说:
abs()绝对值
max(v1,v2,v3)最大值
min(v1,v2,v3)最小值
random() 随机数
"""
转义字符
# 转义符 \
print('单引号', '\'')
print('双引号', '\"')
print('响铃', '\a')
print('退格(Backspace)', '\b')
print('空', '\000')
print('换行', '\n')
print('纵向制表符', '\v')
print('横向制表符', '\t')
print('回车', '\r')
print('换页', '\f')
3、逻辑控制循环遍历自定义函数
详细看这里
逻辑控制
if else if else
'''
print("\n\n----逻辑控制-----------------------------------")
# 分别为:春(3、4、5月),夏(6、7、8月),秋(9、10、11月),冬(12、1、2月)
# 月份
month = 0
if month > 2 and month < 6:
print('春天')
elif month < 9 and month > 5:
print('夏天')
elif month > 8 and month < 12:
print('秋天')
elif month < 13:
print('冬天')
else:
print('未知天气')
循环
# 说10次我爱你
# while执行完成后,就会执行else中的语句
i = 0
while i < 10:
i += 1
print('我爱你,', '这是我第', i, '次说了!')
else:
print('我已经说完了,该你了。')
面向对象:
封装、继承、抽象、重载、重写等等;
4、堆栈、队列、元素操作
详情看这里
列表:
列表是通常意义中的数组,也就是顺序存取元素的结果集
queue_list = [1, 2, 3, 4, 5]
print(derivation_list)
set集合:
元素不可重复,与列表无其他区别
zoo = {'老虎'}
zoo.add('狮子')
zoo.add('大象')
zoo.add('长颈鹿')
zoo.add('狮子')
print(zoo)
字典
key,value像是,一个key对应一个value
map = {'name': 'shp', 'age': 18}
print('姓名:', map['name'], ',年龄:', map['age'])
5、模块和包
详情看这里
# import 语句 可用于导入源文件,例如导入自己的工具类
# 也可以导入源文件并给这个文件命名
# 导入Common.py文件的common类,带哦用common类的方法
from com.shp.dev.utils.Common import common
common.forEach([1, 2, 3, 4])
# 直接导入Common文件的println方法,然后执行调用
from com.shp.dev.utils.Common import println
6、输入和输出、序列化和反序列化、文件读写操作
详细看这里
输入和输出
#输出:
s = '啦啦啦啦啦'
print(s)
list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for l in list:
print('{0:10} ===> {1:10d}'.format(l, l))
#输入
str = input("请输入:");
print("你输入的内容是: ", str)
文件读写
# 输出文本到本地
f = open('hello.txt', 'w') # 打开文件
f.write("是的\n我也更加相信自己了。") # 输出的内容
f.close() # 关闭流
# 打开一个文件
f = open("hello.txt", "r")
str = f.read()
f.close() # 关闭流
print(str)
# 序列化并输出
pickle.dump(list, output)
output.close()
import pprint
# 读取文件
output = open('data.pkl', 'rb')
# 反序列化
data1 = pickle.load(output)
pprint.pprint(data1)
output.close()
文件操作
f = open("hello.txt", "w")
f.write('我是write输出的') # 输出
f.writelines('输出行\n我是writelines输出的')
f.flush() # 刷新缓冲
f.close() # 关闭流
import os, sys
# 第一个参数为路径,第二个参数为权限
#创建单个目录
os.mkdir('/tmp/')
# 创建多层目录目录
os.makedirs('/tmp/text/', 0o777)
7、异常处理
try/except ?相当于Java中的try/cach try中是可能会发生异常的代码,except后接的是可能会发生的异常类型,except是发生异常后执行的代码 except 后接else 如果异常没有捕获到会执行else中的代码 ,后接finally 是否有异常都会执行,通常关闭流等操作使用 raise 触发异常 类似java中的throw 手动抛出异常
详细看这里
try:
x = int(input("请输入一个数字: "))
except ValueError:
print("您输入的不是数字,请再次尝试输入!")
import sys
try:
f = open('hello.txt')
s = f.readline()
i = int(s.strip())
list = [1]
print(list[0]) # 造成角标越界异常
except OSError as err: # io异常
print("OS error: {0}".format(err))
except ValueError: # 值错误异常
print("Could not convert data to an integer.")
except: # 其他异常
print("Unexpected error:", sys.exc_info()[0])
raise
8、面向对象
详细看这里
类
class c():
i = 1
# 类中的方法 self为方法的参数
def f(self):
return 'hello world'
# 构造方法 __init__() 和java对比,有些不太习惯,在类被实例化之后会调用
def __init__(self):
print('调用了构造方法')
def prt(self):
print(self)
print(self.__class__)
继承
class people(parent):
# 需要调用父类的构造方法
def __init__(self):
# 调用父类的构函
parent.__init__(self)
# 覆写父类的方法
def speak(self):
print('获取到父母的给你筹备的:', self.money, '自己再攒钱买辆车')
try:
print('获取父母的知识', self.__know)
except:
print('服务的知识是获取不到的')
s = people()
s.speak()
9、作用域和常用模块
详细看这里
作用域 最外层的变量是全局变量,修改全局变量需要使用global关键字声明 修改上级作用域的变量需要使用nonlocal关键字
python的作用域真的太奇葩了,从java过来的人觉得, 在java的作用域所有的方法都可以改变和读取全局变量,并不需要加关键字来修改, 不过写法不能方法里写方法,方法中调用方法是可以的。 python既然可以这么写,在改变其他作用域的变量的时候就得加关键字了。 ?
# 全局变量
var1 = 5
def some_func():
# 局部变量
var2 = 6
def some_inner_func():
# var3 内嵌的局部变量
var3 = 7
10、正则表达式、CGI、Mysql操作
详细看这里
正则表达式
# re.match函数 匹配开头为某字符串,如果有则返回坐标,如果没有则返回None
import re
print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配
print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配
cgi编程
# 进入此文件的目录,执行python -m http.server --cgi 8080
# 然后访问 http://localhost:8080/该文件的文件名
print("Content-type:text/html")
print() # 空行,告诉服务器结束头部
print('<html>')
print('<head>')
print('<meta charset="utf-8">')
print('<title>Hello Word - 我的第一个 CGI 程序!</title>')
print('</head>')
print('<body>')
print('<h2>Hello Word! 我是来自菜鸟教程的第一CGI程序</h2>')
print('</body>')
print('</html>')
print("Content-type:text/html")
print() # 空行,告诉服务器结束头部
print('<html>')
print('<head>')
print('<meta charset="utf-8">')
print('<title>Hello Word - 我的第一个 CGI 程序!</title>')
print('</head>')
print('<body>')
print('<h2>Hello Word! 我是来自菜鸟教程的第一CGI程序</h2>')
print('</body>')
print('</html>')
python mysql
# 安装mysql的驱动
# python -m pip install mysql-connector
import mysql.connector
print(' ----安装mysql的驱动--------------------')
# 创建数据库连接
mydb = mysql.connector.connect(
host="192.168.0.102", # 数据库主机地址
user="root", # 数据库用户名
passwd="@aA123456", # 数据库密码
database="runoob_db", # 执行数据库
buffered=True # 创建buffered游标,设置buffered 参数为"True"
)
# 连接mysql
mycursor = mydb.cursor()
pd = True
# 查看所有库
mycursor.execute("SHOW DATABASES")
for x in mycursor:
if x[0] == 'runoob_db': pd = False
11、网络编程、发送邮件、多线程
详细看这里
发送邮件
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from_addr = '3511647118@qq.com' # 邮件发送账号
to_addrs = '2948299576@qq.com' # 接收邮件账号
qqCode = 'flmdhazaiguqchhb' # 授权码(这个要填自己获取到的)
smtp_server = 'smtp.qq.com' # 固定写死
smtp_port = 465 # 固定端口
# 配置服务器
stmp = smtplib.SMTP_SSL(smtp_server, smtp_port)
stmp.login(from_addr, qqCode)
# 组装发送内容
# 如果发送html内容使用: message = MIMEText(mail_msg, 'html', 'utf-8')
message = MIMEText('我是发送的内容', 'plain', 'utf-8') # 发送的内容
message['From'] = Header("Python邮件预警系统", 'utf-8') # 发件人
message['To'] = Header("管理员", 'utf-8') # 收件人
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8') # 邮件标题
# 发送邮件,由于测试多线程,防止过多邮件发送先注释掉
# try:
# stmp.sendmail(from_addr, to_addrs, message.as_string())
# except Exception as e:
# print('邮件发送失败--' + str(e))
# print('邮件发送成功')
多线程
import time
import threading
exitFlag = 0
print('--多线程争抢资源----------------')
class myThread(threading.Thread):
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self):
print("开始线程:" + self.name)
print_time(self.name, self.counter, 5)
print("退出线程:" + self.name)
def print_time(threadName, delay, counter):
while counter:
if exitFlag:
threadName.exit()
time.sleep(delay)
print("%s: %s" % (threadName, time.ctime(time.time())))
counter -= 1
# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# 开启新线程
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print("退出主线程")
12、xml解析、json解析、日期和时间、urllib库
详细看这里
xml解析
import xml.sax
print('-----sex解析---------------')
class MovieHandler(xml.sax.ContentHandler):
def __init__(self):
self.CurrentData = ""
self.type = ""
self.format = ""
self.year = ""
self.rating = ""
self.stars = ""
self.description = ""
# 元素开始调用
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag == "movie":
print("*****Movie*****")
title = attributes["title"]
print("Title:", title)
# 元素结束调用
def endElement(self, tag):
if self.CurrentData == "type":
print("Type:", self.type)
elif self.CurrentData == "format":
print("Format:", self.format)
elif self.CurrentData == "year":
print("Year:", self.year)
elif self.CurrentData == "rating":
print("Rating:", self.rating)
elif self.CurrentData == "stars":
print("Stars:", self.stars)
elif self.CurrentData == "description":
print("Description:", self.description)
self.CurrentData = ""
# 读取字符时调用
def characters(self, content):
if self.CurrentData == "type":
self.type = content
elif self.CurrentData == "format":
self.format = content
elif self.CurrentData == "year":
self.year = content
elif self.CurrentData == "rating":
self.rating = content
elif self.CurrentData == "stars":
self.stars = content
elif self.CurrentData == "description":
self.description = content
if (__name__ == "__main__"):
# 创建一个 XMLReader
parser = xml.sax.make_parser()
# 关闭命名空间
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
# 重写 ContextHandler
Handler = MovieHandler()
parser.setContentHandler(Handler)
parser.parse("movies.xml")
json解析
import json
print('-----json解析---------------')
data = {
'no': 1,
'name': 'Runoob',
'url': 'http://www.runoob.com'
}
json_str = json.dumps(data)
print("Python 原始数据:", repr(data))
print("JSON 对象:", json_str)
# 将 JSON 对象转换为 Python 字典
data2 = json.loads(json_str)
print("data2['name']: ", data2['name'])
print("data2['url']: ", data2['url'])
urllib库
from urllib.request import urlopen, quote, unquote, Request
myURL = urlopen("https://www.runoob.com/")
# 设置读取长度
print(myURL.read(300))
# 读取一行
print(myURL.readline())
# 读取全部
print(myURL.read())
try:
myURL1 = urlopen("https://www.runoob.com/")
print(myURL1.getcode()) # 200
# urlopen("https://www.runoob.com/no.html")
except urlopen.error.HTTPError as e:
if e.code == 404:
print(404) # 404
# 读取网址内容,写到本地
print('------读取网址内容,写到本地--------------------------')
myURL = urlopen("https://www.runoob.com/")
f = open("runoob_urllib_test.html", "wb")
content = myURL.read() # 读取网页内容
f.write(content)
f.close()
|