Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计,作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言, 随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
优点:
缺点:慢
Python3 中有六个标准的数据类型:
Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
首先 Python不需要分号,用换行来代替分号。
python 的print十分简单,默认是自动换行的。
print(1)
print(2)
print(3)
如果不要换行,可以用end自行调整
print(1,end="")
print(2,end="")
print(3,end="")
print()
print(1,end=" ")
print(2,end=" ")
print(3,end=" ")
print()
print(1,end=",")
print(2,end=",")
print(3,end=",")
print()
print(1,end="我是间隔")
print(2,end="我是间隔")
print(3,end="我是间隔")
a, b = 1, 2
print(a," ",b)
Python 定义变量时不需要显式地标明数值类型,变量的数值类型与你的赋值有关
a, b, c, d= 1, 2.0, 2.1, 3.2
print(type(a)," ",type(b))
强制类型转换(只有四种数值类型)
a, b, c, d= float(a), int(b), bool(c), complex(d)
print(type(a)," ",type(b)," ",type(c)," ",type(d))
数字运算,加减乘除,次方,取余
a, b = 3,4
print(a+b," ",a-b," ",a*b," ",a/b," ",a**b," ",a%b)
可以通过“+”号连接字符串
a, b = "你好", "世界"
print(type(a))
a = a + b
a += "!"
print(a)
但String不能更改
错误:a[1] = “好”
一定不需要大括号,小括号随意
必须有冒号,必需要换行,必须要缩进四个空格键
a = 1
if(a == 1):
print(a)
if a == 2:
print(a+1)
else:
print(a+2)
if a == 2:
print(a+3)
elif a == 1: #else if 语句
print(a+4)
一般用while循环,或者for循环
a = 1
while(a<10):
a += 1
print(a,end=" ")
print()
for i in range(10):
a -= 1
print(a,end=" ")
print()
break语句也和c语言一样
a = 1
while(a<1000):
a += 1
print(a,end=";")
if a > 10:
print("break了")
break
for i in range(1000):
a += 1
print(a,end=";")
if a > 20:
print("break了")
break
mylist = [1,2,3,4]
print(mylist," \n长度:",len(mylist))
list可以在其末尾加上新的元素,并且对其类型没有要求
mylist = []
mylist.append(1)
mylist.append(1.0)
mylist.append("我是字符串")
mysublist = []
mylist.append(mysublist)
print(mylist)
可以用索引来访问list的内容
mylist = [1,2,3,4,5,6,7,8,9,10]
print(mylist)
print(mylist[1])
for循环
有一个东西叫遍历
mylist = [1,2,3,4,5,6,7,8,9]
for dongxi in mylist:
print(dongxi,end="。")
python里没有数组,一般把list当作数组用
例如需要一个长5,每个数为0的数组:
array = []
for i in range(5):
array.append(0)
print(array)
例如需要一个长2*3的数组:
array = []
for i in range(2):
subarray = []
for j in range(3):
subarray.append(i*3+j)
array.append(subarray)
print(array)
了解一下
#python 还有字典
mydict = {1:12,3:21}
print(mydict[1])
#python 还有集合
myset = {12,21}
print(myset)
#python 还有元组
mytuple = (1,2)
print(mytuple[1])
同样不能有大括号,用冒号加缩进来表示范围
def hanshu1():
print("我是函数")
hanshu1()
有参数的函数
def hanshu2(canshu):
print("我是",canshu,"的函数")
hanshu2("有参数")
函数的参数可以设默认值
def hanshu3(canshu="默认参数"):
print("我的参数是:",canshu)
hanshu3()
hanshu3("你给我的参数")
#递归的函数
例子:斐波那契数列
def digui(n):
if n == 1:
return 1
if n == 0:
return 1
return digui(n-1) + digui(n-2)
for i in range(10):
print(f(i),end=";")
随便写的求素数的函数
python相对比较慢,建议输入不要超过1000万
数很多的话,就不要print了(:_:)
import math
def getPrimeNumber(n,printOutPut=False):
recoder = [0 for i in range(n+1)];
recoder[0] = 1
recoder[1] = 1
for i in range(1,int(math.sqrt(n))+1):
if recoder[i] == 0:
j = i + i
while(j <= n):
recoder[j] = 1
j += i
out = []
for i in range(1,n+1):
if recoder[i] == 0:
out.append(i);
if printOutPut:
print(i)
return out
primeNumbers = getPrimeNumber(1000000,False)
print("素质个数:",len(primeNumbers))
for primeNumber in primeNumbers:
print(primeNumber)
随便写的排序函数
python比较慢,建议排序的数的个数不要超过100万
同上,数很多的话,就不要print了(:_:)
def Sort(array):
def mergeSort(lo,hi):
if hi-lo<=1:
return 0
mid = int((lo+hi)/2)
mergeSort(lo,mid)
mergeSort(mid,hi)
temp = []
p1, p2 = lo, mid
while(p1<mid or p2<hi):
if p1 >= mid:
temp.append(array[p2])
p2 += 1
elif p2 >= hi:
temp.append(array[p1])
p1 += 1
elif(array[p1]<array[p2]):
temp.append(array[p1])
p1 += 1
else:
temp.append(array[p2])
p2 += 1
array[lo:hi] = temp[:]
l = len(array)
mergeSort(0,l)
def getRandomArray(length=100):
import random
Array = []
for i in range(length):
Array.append(random.randint(0,1000))
return Array
def check(array):
p = array[0]
for i in array:
if i < p:
print("错了,wwww")
return 0
p = i
print("正确,你真棒,666,太强了")
def printArray(array,end=" "):
for i in array:
print(i,end=end)
Array = getRandomArray(length=100000)
Sort(Array)
check(Array)
# printArray(Array,";")
for循环遍历的原理
for循环遍历的原理就是迭代,in后面必须是可迭代对象
对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器。
有__iter__
法的对象,都是可迭代对象,有以下6种
可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象
可迭代的对象执行__iter__
方法得到的返回值是迭代器对象。
迭代器对象指的是即内置有__iter__
又内置有__next__
方法的对象
list=[1,2,3,4]
for x in list:
print (x, end=" ") #两者都可以被for循环迭代
print("\n")
it = list.__iter__()
for x in it:
print (x, end=" ")
print("\n")
print(type(list)) #对比两者的类型
print("\n")
print(type(it))
it = list.__iter__()
# print(list.__next__+"\n") #可迭代对象不能用next()方法
print(it.__next__)
open('a.txt').__iter__()
open('a.txt').__next__()
总之,迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象
这里放一篇讲的很通俗易懂的文章
python迭代器生成器-迭代器和list区别 - zx125 - 博客园 (cnblogs.com)
Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
**注意:**使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
open(file, mode='r')
参数说明:
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
这里只是部分的组合,感兴趣的可以自己再去做了解
一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
以下是和file对象相关的所有属性的列表:
属性 | 描述 |
---|---|
file.closed | 返回true如果文件已被关闭,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。
当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。
# 打开文件
fo = open("esta.txt", "w")
print("文件名为: ", fo.name)
# 关闭文件
fo.close()
read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。
参数
返回值
返回从字符串中读取的字节。
# 打开文件
fo = open("esta1.txt", "rt",encoding='utf-8')
# 在python中默认的编码方式是 “ gbk ”,
# 而Windows中的文件默认的编码方式是 “ utf-8 ” ,
#所以导致python编译器无法成功读取或写入文件内容。
print("文件名为: ", fo.name)
#line = fo.read(10)
line = fo.read(13)
print("读取的字符串: %s" % (line))
# 关闭文件
fo.close()
readline() 方法用于从文件读取整行,包括 “\n” 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符。
参数
返回值
返回从字符串中读取的字节。
# 打开文件
fo = open("esta1.txt", "r+",encoding='utf-8')
print("文件名为: ", fo.name)
line = fo.readline()
print("读取第一行 %s" % (line))
line = fo.readline(4)
# line = fo.readline(6)
print("读取的字符串为: %s" % (line))
# 关闭文件
fo.close()
seek() 方法用于移动文件读取指针到指定位置。
语法
seek() 方法语法如下:
fileObject.seek(offset[, whence])
参数
返回值
如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。
# 打开文件
fo = open("esta2.txt", "rb+")
#在文本文件中,没有使用b模式选项打开的文件,
#只允许从文件头开始计算相对位置,从文件尾计算时就会引发异常。
#所以这里以二级制模式打开‘b’
print("文件名为: ", fo.name)
line = fo.read(5)
print("读取的数据为: %s" % (line))
# 重新设置文件读取指针到开头
fo.seek(4, 0)
line = fo.read(5)
print("读取的数据为: %s" % (line))
# 关闭文件
fo.close()
概述
tell() 方法返回文件的当前位置,即文件指针当前位置。
语法
tell() 方法语法如下:
fileObject.tell()
参数
返回值
返回文件的当前位置。
# 打开文件
fo = open("esta2.txt", "r+")
print ("文件名为: ", fo.name)
line = fo.read(5)
print ("读取的数据为: %s" % (line))
# 获取当前文件位置
pos = fo.tell()
print ("当前位置: %d" % (pos))
# 关闭文件
fo.close()
概述
write() 方法用于向文件中写入指定字符串。
在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
如果文件打开模式带 b,那写入文件内容时,str (参数)要用 encode 方法转为 bytes 形式,否则报错:TypeError: a bytes-like object is required, not ‘str’。
语法
write() 方法语法如下:
fileObject.write( [ str ])
参数
返回值
返回的是写入的字符长度。
# 打开文件
fo = open("esta3.txt", "w+")
print ("文件名为: ", fo.name)
str = "esta666\nesta666"
fo.write( str )
fo.seek(0,0)
line = fo.read()
print ("读取的数据为: %s" % (line))
# 关闭文件
fo.close()
库的概念是具有相关功能模块的集合。这也是Python的一大特色之一,即具有强大的标准库、第三方库以及自定义模块。
python模块:包含并且有组织的代码片段为模块。
表现形式为:写的代码保存为文件。这个文件就是一个模块。sample.py 其中文件名smaple为模块名字。
名称 | 作用 |
---|---|
datetime | 为日期和时间处理同时提供了简单和复杂的方法 |
zlib | 直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile |
random | 提供了生成随机数的工具 |
math | 为浮点运算提供了对底层C函数库的访问 |
sys | 工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量 |
glob | 提供了一个函数用于从目录通配符搜索中生成文件列表 |
os | 提供了不少与操作系统相关联的函数 |
urlib | 获取网页源码 |
名称 | 作用 |
---|---|
Scrapy | 爬虫工具常用的库 |
Requests | http库 |
PIL | 图像处理 |
matplotlib | 绘制数据图的库。对于数据科学家或分析师非常有用 |
OpenCV | 计算机视觉 |
numpy | 科学计算 |
tkinter | GUI库 |
Pygame | 2D游戏 |
打开cmd命令窗口,通过命令 pip install 包名 进行第三库安装,此方法简单快捷。
#导入一个模块import somemodule(模块)
somemodule.somefunction() #调用该模块的某个函数
#从模块中导入(一些)函数
from somemodule import somefunction[,anotherfunction,...]
somefunction()
#给模块指定别名
import somemodule as mm.somefunction()
#导入模块中的一切函数
from somemodule import *somefunction()
#导入一个函数并指定别名
from somemodule import somefuntion as ff()
import time
#1.0获得当前时间戳,是从1970年某一个时刻到今天的秒数
print(time.time())
#1.1易于阅读的时间:(被保存为字符串形式)
print(time.ctime())
#1.2易于计算机阅读的时间(保存为struct结构)
print(time.gmtime())
# 此外,python还提供了时间的标准化输出。
t = time.gmtime()
strtime = time.strftime("%Y-%m-%d %H:%M:%S",t)
# time库通过time.perf_counter来获得当前时间戳,保存为浮点型
start = time.perf_counter()
# 用这个函数,我们可以计算程序执行的过程中的时间
#time.sleep(2)
end = time.perf_counter()
print(end - start)
import numpy as np
#或
from numpy import *
x=np.array([[1.0,0.0,0.0],[0.,1.,2.]])
a = np.random.randn(10)
b = np.random.normal(0, 1, (2,4))
c = np.random.rand(2,3)
d = np.random.uniform(-1,1,10)