一、python3的数据类型(6种) 10min
1、数字类型
int 整数,仅有的一种整数类型int,表示为长整型(类似于C中各种longlongint的合体)
bool 布尔型,Ture&False
float 浮点型,如1.11、 1.2E-3
complex 复数,如1+2i
2、字符串类型(String)
(1) ' ' 和 " " 没有区别 如:a = 'man' ⇔ a = "man"
(2) +表示直接连接字符串 如:a = 'man' ; b = '666' ; c = a+b ⇔ c = 'man666'
(3) """三引号"""" 可以声明多行字符串 不需要缩进
(4) 字符串不能改变
使用(类似C的字符串数组)
str = 'abcdefg'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始的后的所有字符
print(str * 2) # 输出字符串两次
3、基本数据类型(4种)(很重要)
List 列表
Tuple 元祖
Sets 集合
Dictionary 字典
通常字典和列表用的多一点。(就个人使用情况来说)
①List 列表
特性(3个):可改变,使用[ a , b , .... ]声明,元素支持数字、字符串
list = [ 'abcd', 111 , 1.23, 'man', 19999.11 ]
print (list) # 输出完整列表
print (list[0]) # 输出列表第一个元素
print (list[1:3]) # 从第二个开始输出到第三个元素
print (list[2:]) # 输出从第三个元素开始的所有元素
print (list * 2) # 输出两次列表
list2 = '111'
l = list + list2 # 连接两个list
list内置函数:
len(list) 返回列表元素个数
max(list)/min(list) 返回列表最大/最小值
list(seq) 将元组(Tuple)转化成列表
list内置方法:
list.append(obj) 在列表末添加obj对象
list.extend(seq) 在列表末一次性添加seq序列
list.sort() 给列表排序,前提为同一种数据
list.count(obj) 计算obj在list中出现次数
list.index(obj) 找到obj在列表中第一次出现的索引位置
list.insert(index, obj) 在index处添加obj对象
list.pop(obj = list[-1]) 括号为default值,返回该删除元素
list.remove(obj) 删除列表中第一个匹配项
list.clear()/list.copy() 清空/复制列表
②Tuple 元祖(可理解为不可重写数据的list)
特性(3个):不可改变,使用( a , b , .... )声明,元素支持数字、字符串
tuple = ( 'abcd', 111 , 1.23, 'man', 19999.11 )
基本操作同list
tuple内置函数:
len(tuple) 元组中元素个数
max(tuple)/min(tuple) 元组中最大/最小元素
tuple(seq) 将列表转化为元组
③sets 集合
特性(3个):无序不可重复,使用{ a , b , .... }声明,元素支持数字、字符串
stes = { 'abcd', 111 , 1.23, 'man', 19999.11 }
a = set('abracadabra')
b = set('alacazam')
print(a)
print(a - b) # a和b的差集
print(a | b) # a和b的并集
print(a & b) # a和b的交集
print(a ^ b) # a和b中不同时存在的元素
# 集合如果有重复元素会自动删除
④dictionary 字典
特性(3个):无序,使用{ keya: valuea , keyb: valueb , .... }声明,元素支持数字、字符串
dict = {'name': 'www','code':111, 'site': 'www.google.com'}
基本操作:
print (dict['name']) # 输出键为 'name' 的值
print (dict[2]) # 输出键为 2 的值
print (dict) # 输出完整的字典
print (dict.keys()) # 输出所有键
print (dict.values()) # 输出所有值
二、python3运算符 5min
1、注释(两种):
单行注释
# 这是一个注释
多行注释(单引号和双引号在py里相同)
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
2、算术运算符
+ - * / 加减乘除
% mod运算
x**y 幂运算,返回x的y次幂
// 取整除,返回商的整数部分
3、比较运算符(同C、JAVA、R)
> < 大于/小于
>= / <= 大于等于/小于等于
!= / == 不等于/等于
均返回bool型(Ture/False)
4、赋值运算
直接写等式(无需使用int等声明关键字)
a = 10
b = 'aaa'
5、位运算
& | ~ 按位与或非
^ 异或
<< / >> 所有数左移/右移
5、逻辑运算符
and 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值
or 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值
not 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True
6、成员运算符
in 如果在指定的序列中找到值返回 True,否则返回 False
not in 如果在指定的序列中没有找到值返回 True,否则返回 False
7、身份运算符
is 判断两个标识符是不是引用自同一个对象
is not 判断两个标识符是不是引用自不同对象
**
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
**优先级问题同C,多出的成员、逻辑、身份运算符为最低级别,优先顺序是身份、成员、逻辑。
三、py3的关键字 5min
1、条件控制
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
注意:条件后是冒号(:); 缩进需相同 。
if 嵌套逻辑同C,但是注意缩进
2、循环语句
①while
while condition:
statement
②for
for <variable> in <sequence>:
<statements>
else:
<statements>
③py特有的东东:range() 内置循环函数 + 关键字 in
数字序列:
for i in range(10):
print(i)
for i in range(1,10):
print(i)
#注意py里右括号边界取不到
④break、continue用法逻辑同C
for letter in 'Python':
if letter == 'h':
break
print '当前字母 :', letter
#output
当前字母 : P
当前字母 : y
当前字母 : t
四、py3迭代器(这里也是Py比较有趣的东东) iter() 5min
这个比较重要,用得好能节省很多代码量
1、先声明一点py迭代器只能无脑向后遍历
list = [1,2,3,4]
it = iter(list) #这里it类似于指向list的head指针
print(next(list)) #使用next(it)可以进行操作
2、或者是结合for使用
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
3、遍历技巧
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
print(k, v)
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))
五、py3函数 5min
1、规则:所有函数以def开头
无return时,默认返回none
def function_name(parameters):
function_body
2、调用函数:
同一个py文件(可称为module)直接调用函数名及参数
#附上变量作用域
x = int(1.0) # 内建作用域
count = 0 # 全局作用域
def outer():
count_outer = 1 # 闭包函数外的函数中
def inner():
count_inner = 2 # 局部作用域
当需要在当前py文件中引用某个module里的一个方法时:
import module
module.function_name(parameters)
这里几乎同JAVA模式
import java.lang.*;
public class class_name {
public static void main(String[] args) {
//其实这里不需要导包 但是为了对比导入看看
System.out.println("statement");
}
}
所以问题来了java和python的import长的这么像,有什么区别呢?
在python中import进来的package感觉更像是静态的类(module),换句话说就是在import进来后直接实例化了导入的模块。而在java中,往往导入之后还需要再实例化(new)一个对象,然后在对象上调用导入包的方法。综合来说python import = java static import com.packagename.* = java com.packagename.classname
当然了,python还能直接导入module里的方法
from module_name import method_name
使用的时候直接调用method_name即可
3、调用package
from package_name import py_name
#补充一个
import tensorflow as tf
#然后就是tf.method_name()
#每次都有冲动打成tfboys
4、自身调用(不知道咋怎么形容这个)
class Province:
# 静态字段
country = '中国'
def __init__(self, name):
# 普通字段
self.name = name
是不是很眼熟。简单来说和JAVA的this作用相同,只不过在py中要显视地写进parameter中
public class Province:
#静态字段
private String country = "china";
public void __init__(country) {
#普通字段
this.country = country;
}
5、继承(省略)
之前看django的时候记的,主要是python现在一般也不会用来做web啦,就不花大篇幅写了,面向对象的东西实在太多。
如果能理解java,再来看py几乎区别就是在self那一块还有一些静态的方法、公有成员变量的差别。
实在想了解可以移步Python面向对象
六、py的IO操作 3min
1、打印
print('{}+{}={}'.format(1, 2,3)
print('{word1}的英文是 {word2}'.format(word1='中国', word2='china'))
print("%d" % (num))
2、写入
str = input("请输入:");
print ("你输入的内容是: ", str)
3、文件IO
好吧跟C还是差不多,返回file对象
open(filename, mode)
mode如图
要求不多 不写也是极好的=-=
这样就好其实o.o
# 打开一个文件
f = open("/tmp/foo.txt", "r")
str = f.readline()
print(str)
# 关闭打开的文件
f.close()
嗯对。。open+readline就差不多ok
当然了这种操作pandas里有很多
有这么厉害的包 为什么还要手写对不XD
七、py的数据结构 5min
这里和C很像很像 by the way python底层就是c(当然了如果想做也可以是vb这种)
1、stack/heap
easy:
#用list
stack = [1, 2, 3]
#进栈
stack.append(4)
stack.append(5)
#出栈
stack.pop()
stack
2、queue
queue = deque(["Eric", "John", "Michael"])
queue.append("Terry") # Terry arrives
queue.append("Graham") # Graham arrives
queue.popleft() # The first to arrive now leaves
queue.popleft() # The second to arrive now leaves
queue # Remaining queue in order of arrival
3、嵌套list
py3:
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
transposed = []
for i in range(4):
transposed.append([row[i] for row in matrix])
用numpy比较容易解决 详情见numpy
import numpy as np
transposed = matrix.T
八、线程
觉得还是很有必要看一看
不过这学期有修一门课叫parallel computing
mark 等有时间再写一篇
-------------------------------------------分割线到这里结束啦------------------------------------------------
九、python机制(计算机专业)
关于python底层的一些东西可以帮助你更深入去了解一些东东 安利一个知乎专题:源码读python
得配上algorithm和data structure才带感
可以看看专门的python方向的算法课MIT_Algorithm
十、py使用
环境:anaconda3(下载3开头的)
环境变量配置:安装会自动加上,记得再加上这个,前缀是conda的安装目录
ide:pycharm很不错,可以申请免费用(最近到期了,又得重新用校园邮箱apply),但是要玩转要很久
当然了jupyter更好咯~ 对于新手来说 进入方式cmd:输入jupyter notebook或者是jupyter lab(win)
最近用的是sublime+python若干插件(居然还挺凑合,比较喜欢sublime的暗黑简约风格)
----------------------------------------------------end--------------------------------------------------------